From ef9609b5aa89ac405a890b12d184945767f0faa3 Mon Sep 17 00:00:00 2001 From: Erica Pescio Date: Thu, 22 Aug 2024 12:47:09 -0700 Subject: [PATCH] Major refactor (#42) * Updated .gitignore * Major refactor * Fixed tests pipeline * Updated pipelines * Fix for appinspect pipeline * Fix for appinspect pipeline * Updated tests pipeline * Updated tests pipeline * Updates for troubleshooting * Updates for troubleshooting 2 * Launching Splunk via docker compose in the pipeline * Fixed env issue * Removed troubleshooting * Adding troubleshooting for tests * Changed url to fix pipeline * Restored service w/ fixes * Fixes for pipeline * Fix options in pipeline * Restore version * Fixes for pipeline * Fixes for pipeline 2 * Fixes for pipeline 3 * Massive changes for pipeline * Added specific container image * Adding curl to container * Reverting pipeline * Troubleshooting * Troubleshooting * Fixed ip issue * Fixing tests * Fixing tests * Fixing tests * Removing package-lock for testing * Testing gh action for cypress * Testing gh action for cypress * Testing gh action for cypress * Edited SPL safeguards settings * npm versions * Fix for npm versions * Fix for npm versions * Testing with different browser * Testing with no gpu * Testing with chrome * Testing with chrome * Fixed bug with commands * Updated cypress config * Edited waiting times in tests * Fixes for tests in pipeline * Updated upload artifact version in pipeline * Fixes for tests pipeline * Fixes * Tests fixes * Fixed reports * Fixed tests * Testing with Electron * Testing with Electron * Testing with Electron * Testing with Electron * Fixes for junit report * Executing tests w/ chrome * Electron * Added permissions to fix test-reporter * Testing with Chrome * Testing with Chrome * Testing with Chrome. Latest node and actions * Testing with Chrome. Latest cypress * Testing with electron, added timeout * Replaced splunklogout command in tests * More fixes * More fixes * More fixes * More fixes * More fixes * More fixes * Tests fixes and more * Tests fixes * Tests fixes * Run Electron w. video * Run Electron w. video * Videos done. Overall cleanup * Fixed junit report * Enhanced test graph_analysis * Changed runner * Reconfigured self-hosted runner * Updated self-hosted runner * Changed self-hosted runner * ping splunk version * removed mem management for chrome * added debug * Updated tests for graph_analysis page * Fixed graph_analysis tests * Fixed graph_analysis tests * Fixed graph_analysis tests * Installing older version of python-for-scientific app * Added 3 retries at failures * Fixed graph_analysis tests * Changed to en-US * Fixed tests * Testing CodeBuild * Troubleshooting action * Troubleshooting action * Troubleshooting action * Troubleshooting action * Troubleshooting action * Troubleshooting action * Troubleshooting action * Troubleshooting action * Troubleshooting action * Troubleshooting action * Troubleshooting action * Troubleshooting action * increased timeout in pipeline * removed tests retries * added py4scientific app for testing * introduced splunk matrix in automated tests * introduced splunk matrix in automated tests * modified matrix in test pipeline * extended matrix in test pipeline * added strategy flag * edited docker-compose to support different platform * edited tests to run in splunk 9.2+ * edited package-lock for npm upgrade * edited test to get splunk 9.2+ compatibility * edited pipeline to test in 2 specific splunk versions * fixes for testing in pipeline * fixes for testing in pipeline * fixes for testing in pipeline * reverted tests for analysis tab * skipping tests for analysis tab till finalised * edited test pipeline * updated README --------- Co-authored-by: Erica Pescio --- .env.sample | 3 + .github/workflows/appinspect.yml | 53 + .github/workflows/ci.yml | 123 - .github/workflows/tests.yml | 156 ++ .gitignore | 10 +- CONTRIBUTING.md | 33 +- Makefile | 7 + README.md | 8 +- assets/ansible/default.yml | 18 + assets/apps/.gitkeep | 0 assets/cicd/config/web.conf | 3 + assets/docker/Dockerfile | 17 + assets/docker/configure.sh | 13 + ...3D-graph-network-topology-viz-screen-1.png | Bin ...3D-graph-network-topology-viz-screen-2.png | Bin ...3D-graph-network-topology-viz-screen-3.png | Bin ...3D-graph-network-topology-viz-screen-4.png | Bin docker-compose.yml | 53 + .../LICENSE | 0 .../README}/savedsearches.conf.spec | 0 .../app.manifest | 0 .../appserver}/static/images/connected.png | Bin .../appserver}/static/images/image | 0 .../appserver}/static/images/label.png | Bin .../appserver}/static/images/spine.png | Bin .../appserver}/static/images/weighted.png | Bin .../static/searchcontrolsevents.css | 0 .../appserver}/static/searchcontrolsevents.js | 0 .../3d_graph_network_topology_viz/README.md | 0 .../formatter.html | 0 .../package-lock.json | 0 .../package.json | 0 .../3d_graph_network_topology_viz/preview.png | Bin .../src/visualization_source.js | 0 .../visualization.css | 0 .../visualization.js | 0 .../webpack.config.js | 0 .../bin}/mltk_graph/GraphCentrality.py | 0 .../mltk_graph/GraphConnectedComponents.py | 0 .../bin}/mltk_graph/GraphLabelPropagation.py | 0 .../bin}/mltk_graph/MinimumSpanningTree.py | 0 .../default}/algos.conf | 0 .../default}/app.conf | 0 .../default}/data/ui/nav/default.xml | 0 .../default}/data/ui/views/graph_analysis.xml | 0 .../ui/views/graph_analysis_centrality.xml | 0 .../graph_analysis_connected_components.xml | 0 ..._analysis_example_connected_components.xml | 0 ...lysis_example_for_bitcoin_transactions.xml | 0 ...h_analysis_example_for_network_traffic.xml | 0 ...aph_analysis_example_label_propagation.xml | 0 .../graph_analysis_label_propagation.xml | 0 .../graph_analysis_minimum_spanning_tree.xml | 0 .../default}/macros.conf | 0 .../default}/savedsearches.conf | 0 .../default}/transforms.conf | 0 .../default}/visualizations.conf | 0 .../lookups}/cidds_ip_connections.csv | 0 .../metadata}/default.meta | 0 .../static}/appIcon.png | Bin .../static}/appIcon_2x.png | Bin .../static}/screenshot.png | Bin test/cypress.config.js | 40 + test/cypress/e2e/graph_analysis.cy.js | 69 + test/cypress/e2e/graph_examples.cy.js | 72 + test/cypress/e2e/login.cy.js | 17 + test/cypress/fixtures/example.json | 5 + test/cypress/plugins/index.js | 30 + test/cypress/support/commands.js | 44 + test/cypress/support/e2e.js | 33 + test/package-lock.json | 2028 +++++++++++++++++ test/package.json | 18 + 72 files changed, 2723 insertions(+), 130 deletions(-) create mode 100644 .env.sample create mode 100644 .github/workflows/appinspect.yml delete mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/tests.yml create mode 100644 Makefile create mode 100644 assets/ansible/default.yml create mode 100644 assets/apps/.gitkeep create mode 100644 assets/cicd/config/web.conf create mode 100644 assets/docker/Dockerfile create mode 100644 assets/docker/configure.sh rename {.images => assets/images}/splunk-3D-graph-network-topology-viz-screen-1.png (100%) rename {.images => assets/images}/splunk-3D-graph-network-topology-viz-screen-2.png (100%) rename {.images => assets/images}/splunk-3D-graph-network-topology-viz-screen-3.png (100%) rename {.images => assets/images}/splunk-3D-graph-network-topology-viz-screen-4.png (100%) create mode 100644 docker-compose.yml rename LICENSE => packages/splunk-3D-graph-network-topology-viz/LICENSE (100%) rename {README => packages/splunk-3D-graph-network-topology-viz/README}/savedsearches.conf.spec (100%) rename app.manifest => packages/splunk-3D-graph-network-topology-viz/app.manifest (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/images/connected.png (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/images/image (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/images/label.png (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/images/spine.png (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/images/weighted.png (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/searchcontrolsevents.css (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/searchcontrolsevents.js (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/visualizations/3d_graph_network_topology_viz/README.md (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/visualizations/3d_graph_network_topology_viz/formatter.html (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/visualizations/3d_graph_network_topology_viz/package-lock.json (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/visualizations/3d_graph_network_topology_viz/package.json (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/visualizations/3d_graph_network_topology_viz/preview.png (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/visualizations/3d_graph_network_topology_viz/src/visualization_source.js (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/visualizations/3d_graph_network_topology_viz/visualization.css (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/visualizations/3d_graph_network_topology_viz/visualization.js (100%) rename {appserver => packages/splunk-3D-graph-network-topology-viz/appserver}/static/visualizations/3d_graph_network_topology_viz/webpack.config.js (100%) rename {bin => packages/splunk-3D-graph-network-topology-viz/bin}/mltk_graph/GraphCentrality.py (100%) rename {bin => packages/splunk-3D-graph-network-topology-viz/bin}/mltk_graph/GraphConnectedComponents.py (100%) rename {bin => packages/splunk-3D-graph-network-topology-viz/bin}/mltk_graph/GraphLabelPropagation.py (100%) rename {bin => packages/splunk-3D-graph-network-topology-viz/bin}/mltk_graph/MinimumSpanningTree.py (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/algos.conf (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/app.conf (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/data/ui/nav/default.xml (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/data/ui/views/graph_analysis.xml (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/data/ui/views/graph_analysis_centrality.xml (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/data/ui/views/graph_analysis_connected_components.xml (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/data/ui/views/graph_analysis_example_connected_components.xml (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/data/ui/views/graph_analysis_example_for_bitcoin_transactions.xml (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/data/ui/views/graph_analysis_example_for_network_traffic.xml (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/data/ui/views/graph_analysis_example_label_propagation.xml (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/data/ui/views/graph_analysis_label_propagation.xml (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/data/ui/views/graph_analysis_minimum_spanning_tree.xml (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/macros.conf (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/savedsearches.conf (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/transforms.conf (100%) rename {default => packages/splunk-3D-graph-network-topology-viz/default}/visualizations.conf (100%) rename {lookups => packages/splunk-3D-graph-network-topology-viz/lookups}/cidds_ip_connections.csv (100%) rename {metadata => packages/splunk-3D-graph-network-topology-viz/metadata}/default.meta (100%) rename {static => packages/splunk-3D-graph-network-topology-viz/static}/appIcon.png (100%) rename {static => packages/splunk-3D-graph-network-topology-viz/static}/appIcon_2x.png (100%) rename {static => packages/splunk-3D-graph-network-topology-viz/static}/screenshot.png (100%) create mode 100644 test/cypress.config.js create mode 100644 test/cypress/e2e/graph_analysis.cy.js create mode 100644 test/cypress/e2e/graph_examples.cy.js create mode 100644 test/cypress/e2e/login.cy.js create mode 100644 test/cypress/fixtures/example.json create mode 100644 test/cypress/plugins/index.js create mode 100644 test/cypress/support/commands.js create mode 100644 test/cypress/support/e2e.js create mode 100644 test/package-lock.json create mode 100644 test/package.json diff --git a/.env.sample b/.env.sample new file mode 100644 index 00000000..0ab18116 --- /dev/null +++ b/.env.sample @@ -0,0 +1,3 @@ +SPLUNKBASE_USERNAME= +SPLUNKBASE_PASSWORD= +SPLUNK_PASSWORD= \ No newline at end of file diff --git a/.github/workflows/appinspect.yml b/.github/workflows/appinspect.yml new file mode 100644 index 00000000..40118504 --- /dev/null +++ b/.github/workflows/appinspect.yml @@ -0,0 +1,53 @@ +name: AppInspect + +on: + push: + paths-ignore: + - '.github/workflows/manual-release.yml' + - '.github/workflows/tests.yml' + +jobs: + appinspect-cli: + name: AppInspect CLI Validation + runs-on: ubuntu-latest + steps: + + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: Install dependencies + run: | + python -m pip install splunk-appinspect + + - name: Run AppInspect + run: | + ls . + app_id=$(cat splunk-*/app.manifest | jq -r '.info.id.name') + cp ../README.md ${app_id} + splunk-appinspect inspect ${app_id} --output-file appinspect.json + exit `cat appinspect.json | jq '.summary.failure'` + working-directory: ./packages + + appinspect-api: + name: AppInspect API Validation + needs: + - appinspect-cli + runs-on: ubuntu-latest + # Job not executed if branch is not master + if: github.ref == 'refs/heads/master' + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Run AppInspect + uses: splunk/appinspect-api-action@v3.0 + with: + username: ${{ secrets.SPLUNKBASE_USERNAME }} + password: ${{ secrets.SPLUNKBASE_PASSWORD }} + app_path: packages/ + includedTags: cloud \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index ea3798fc..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,123 +0,0 @@ -name: CI - -on: - push: - paths-ignore: - - '.github/workflows/manual-release.yml' - -jobs: - bundle-app: - name: Bundle App - runs-on: ubuntu-latest - outputs: - app_name: ${{ steps.appinfo.outputs.app_name }} - app_id: ${{ steps.appinfo.outputs.app_id }} - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Fetch and set app info - id: appinfo - run: | - APP_ID=$(cat app.manifest | jq -r '.info.id.name') - echo "app_id=${APP_ID}" >> $GITHUB_OUTPUT - APP_NAME=$(echo "$APP_ID" | tr _ - ) - echo "app_name=${APP_NAME}" >> $GITHUB_OUTPUT - - - name: Excluding images from README - run: | - sed -i '/^!/d' README.md - - - name: Bundle app source - run: | - mkdir dist - tar -zcvf dist/${{ steps.appinfo.outputs.app_name }}.tgz --exclude='.[^/]*' --exclude=./dist . - - - name: Upload artifact - uses: actions/upload-artifact@v3 - with: - name: app_tgz - path: dist/${{ steps.appinfo.outputs.app_name }}.tgz - - slim-validate: - name: SLIM Validation - needs: bundle-app - runs-on: ubuntu-latest - steps: - - name: Download artifact - uses: actions/download-artifact@v3 - with: - name: app_tgz - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: 3.7 - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install splunk-packaging-toolkit - - - name: Unpackage artifact - run: | - mkdir ${{ needs.bundle-app.outputs.app_id }} - tar -xf ${{ needs.bundle-app.outputs.app_name }}.tgz -C ${{ needs.bundle-app.outputs.app_id }} - - - name: Slim Validate - run: slim validate ${{ needs.bundle-app.outputs.app_id }} - - appinspect-cli: - name: AppInspect CLI Validation - needs: bundle-app - runs-on: ubuntu-latest - steps: - - name: Download artifact - uses: actions/download-artifact@v3 - with: - name: app_tgz - - - name: Unpackage artifact - run: | - mkdir -p build/${{ needs.bundle-app.outputs.app_id }} - tar -xf ${{ needs.bundle-app.outputs.app_name }}.tgz -C build/${{ needs.bundle-app.outputs.app_id }} - - - name: Setup Python - uses: actions/setup-python@v4 - with: - python-version: 3.7 - - - name: Install dependencies - run: | - python -m pip install splunk-appinspect - - - name: Run AppInspect - run: | - splunk-appinspect inspect ${{ needs.bundle-app.outputs.app_id }} --output-file appinspect.json - exit `cat appinspect.json | jq '.summary.failure'` - working-directory: ./build - - # appinspect-api: - # name: AppInspect API Validation - # needs: - # - bundle-app - # - appinspect-cli - # - slim-validate - # runs-on: ubuntu-latest - # # Job not executed if branch is not master - # if: github.ref == 'refs/heads/master' - # steps: - # - name: Download artifact - # uses: actions/download-artifact@v2 - # with: - # name: app_tgz - - # - name: Run AppInspect - # uses: splunk/appinspect-api-action@v2 - # with: - # filePath: ${{ needs.bundle-app.outputs.app_name }}.tgz - # splunkUser: ${{ secrets.SPLUNK_USER }} - # splunkPassword: ${{ secrets.SPLUNK_PASS }} - # includedTags: cloud - # failOnError: true - # failOnWarning: false \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..65b9396d --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,156 @@ +name: tests + +on: + pull_request: + branches: + - master + - develop + +permissions: + contents: read + actions: read + checks: write + +jobs: + slim-validate: + name: SLIM Validation + runs-on: ubuntu-latest + outputs: + app_name: ${{ steps.appinfo.outputs.app_name }} + app_id: ${{ steps.appinfo.outputs.app_id }} + steps: + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.9 + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Fetch and set app info + id: appinfo + run: | + APP_ID=$(cat packages/splunk-*/app.manifest | jq -r '.info.id.name') + echo "app_id=${APP_ID}" >> $GITHUB_OUTPUT + APP_NAME=$(echo "$APP_ID" | tr _ - ) + echo "app_name=${APP_NAME}" >> $GITHUB_OUTPUT + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install splunk-packaging-toolkit + + - name: Slim Validate + run: | + cp README.md packages/${{ steps.appinfo.outputs.app_id }} + slim validate packages/${{ steps.appinfo.outputs.app_id }} + + + splunk-test: + name: Deploy and test the Viz + runs-on: ubuntu-latest + needs: slim-validate + strategy: + fail-fast: false + matrix: + version: [9.3.0, 9.2.2, 9.1.3, 8.2.0] + services: + splunk: + image: splunk/splunk:${{ matrix.version }} + env: + SPLUNK_START_ARGS: --answer-yes --no-prompt --accept-license + SPLUNK_PASSWORD: password + SPLUNK_APPS_URL: https://splunkbase.splunk.com/app/2890/release/5.4.1/download,https://splunkbase.splunk.com/app/2882/release/4.1.2/download + SPLUNKBASE_USERNAME: ${{ secrets.SPLUNKBASE_USERNAME }} + SPLUNKBASE_PASSWORD: ${{ secrets.SPLUNKBASE_PASSWORD }} + DEBUG: true + options: >- + --health-interval 30s + --health-timeout 5s + --health-retries 5 + --name splunk + ports: + - 8000:8000 + - 8089:8089 + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20.11.1 + + - name: Copy app to service container and validate + # NOTE using volume mapping to add the app to the container will NOT work since checkout hasn't happened yet + run: | + docker cp packages/${{ needs.slim-validate.outputs.app_id }} ${{ job.services.splunk.id }}:/opt/splunk/etc/apps/${{ needs.slim-validate.outputs.app_id }} + docker exec -i ${{ job.services.splunk.id }} ls -a /opt/splunk/etc/apps + docker exec -i ${{ job.services.splunk.id }} ls -a /opt/splunk/etc/apps/${{ needs.slim-validate.outputs.app_id }} + + - name: Disable SPL safeguards for all commands + run: | + docker cp assets/cicd/config/web.conf ${{ job.services.splunk.id }}:/opt/splunk/etc/system/local/web.conf + echo "Validating 'web.conf' file creation" + docker exec -i ${{ job.services.splunk.id }} ls -a /opt/splunk/etc/system/local/ + + - name: Set container IP as env variable + run: | + echo "SPLUNK_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${{ job.services.splunk.id }})" >> $GITHUB_ENV + + - name: Restart instance + run: | + curl -k -u admin:password https://$SPLUNK_IP:8089/services/server/control/restart -X POST + sleep 30 + + - name: Configure MLTK permissions + run: | + curl --retry-delay 5 --retry 5 -f -k -u admin:password https://$SPLUNK_IP:8089/services/apps/local/Splunk_ML_Toolkit/acl -d sharing=global -d owner=nobody -X POST + echo "Check MLTK permissions" + curl -k -u admin:password https://$SPLUNK_IP:8089/services/apps/local/Splunk_ML_Toolkit/acl?output_mode=json | jq -r '.entry | .[].acl.sharing' + + - name: Tests execution prep + run: | + echo "Removing package-lock to avoid issues with splunk artifactory" + cd test + rm -rf package-lock.json + npm install + + - name: Cypress run + uses: cypress-io/github-action@v6 + # Set timeout to prevent hanging tasks + # NOTE: Careful! Tests timeouts can be impacted + timeout-minutes: 20 + env: + DEBUG: '@cypress/github-action' + ELECTRON_EXTRA_LAUNCH_ARGS: --disable-gpu + with: + start: npm run test + wait-on: 'http://localhost:8000' + # No videos can be recorded w/ ff as per https://github.com/cypress-io/cypress/issues/18415 + # browser: firefox + working-directory: test + + # - name: Verify results availability + # run: | + # ls -la test/cypress/results + + - name: Upload Test Results + uses: actions/upload-artifact@v4 + if: always() + with: + name: splunk${{ matrix.version }}-results + path: | + test/cypress/videos + test/cypress/screenshots + + # Add a job in the page to visualize test result reports + - name: JUnit Report + uses: dorny/test-reporter@v1 + if: always() + with: + name: Cypress Tests + path: cypress/results/results-*.xml + reporter: java-junit + working-directory: test + fail-on-error: false diff --git a/.gitignore b/.gitignore index ca033291..80ce0c9a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,11 @@ **/node_modules/ .vscode +.env *.pyc -local.meta -fiddle/ \ No newline at end of file +**/local.meta +fiddle/ +assets/apps/*.tgz +test/cypress/videos/ +test/cypress/screenshots/ +test/cypress/downloads/ +test/cypress/results/ \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c4859491..a17efc3e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -28,4 +28,35 @@ This action can be **manually triggered** by clicking on _Actions / Manual Relea * **Bump part** - Either major, minor or patch * (Optional) **Changelog notes** - By default all commit messages beginning from the last release are included -> **NOTE** Action available to all users with `Write` role at least \ No newline at end of file +> **NOTE** Action available to all users with `Write` role at least + +## Development Environment +The recommended local development environment is based on Docker. After the setup, the local Splunk Web will be available on http://localhost:8000 with Splunk Machine Learning Toolkit (MLTK) and the Python for Scientific Computing for Linux installed. + +### Prerequisites +* Docker + +### Setup +Create a `.env` file in the root of the repository. Don't worry, it is part of `.gitignore`. + +`cp .env.sample .env` + +Enter your Splunkbase Username and Password there to install dependencies such as the Splunk MLTK via URL. + +Manually download the Python for Scientific Computing for Linux from [Splunkbase](https://splunkbase.splunk.com/app/2882/release/4.2.0/download) and save the `.tgz` in `assets/apps`. +> Note that this should be done automatically but the app is too big for installation via REST by splunk-ansible. + +To setup your development environment, run + +`make setup` + +This will: + +* Install App dependencies +* Configure them in your local environment +* Run docker-compose up to start the local environment + +## Tests +To execute tests locally, run + +`make tests` diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..1ae3a7b4 --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +.PHONY : setup tests + +setup: + APP_NAME=splunk-3D-graph-network-topology-viz docker compose up -d --build + +tests: + cd test && npm install && npm run debug \ No newline at end of file diff --git a/README.md b/README.md index 64b05133..a3cbdb97 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ To enrich your dashboards with some interactivity, [enable drilldown in your das This token can then be used within your dashboard in another panel or visualisation. ## Examples -![alt text](.images/splunk-3D-graph-network-topology-viz-screen-3.png "Screenshot") +![alt text](assets/images/splunk-3D-graph-network-topology-viz-screen-3.png "Screenshot") ### Lookup tables * Add a lookup table defining these additional values to your Splunk instance. An example below: @@ -68,7 +68,7 @@ This token can then be used within your dashboard in another panel or visualisat * Execute your SPL ` | stats count as edge_weight by src dest | eval color_src="#cc0000", color_dest="#00ff00", weight_src=3 | eval edge_color=if(edge_weight < 18, "#0000cc","")` -![alt text](.images/splunk-3D-graph-network-topology-viz-screen-4.png "Example of colored nodes generated by simple SPL") +![alt text](assets/images/splunk-3D-graph-network-topology-viz-screen-4.png "Example of colored nodes generated by simple SPL") ## Graph Algorithm Examples @@ -81,9 +81,9 @@ Make sure you have the following Splunk apps installed in your instance to corre > Give **global** permissions to MLTK app if not already done -![alt text](.images/splunk-3D-graph-network-topology-viz-screen-1.png "Graph Analysis Example of Bitcoin Transactions") +![alt text](assets/images/splunk-3D-graph-network-topology-viz-screen-1.png "Graph Analysis Example of Bitcoin Transactions") -![alt text](.images/splunk-3D-graph-network-topology-viz-screen-2.png "Graph Analysis Example for Label Propagation Algorithm") +![alt text](assets/images/splunk-3D-graph-network-topology-viz-screen-2.png "Graph Analysis Example for Label Propagation Algorithm") ## Hardware Acceleration in Browsers All modern browsers shall have hardware acceleration turned on by default in order to increase your browser performance and free up CPU by leaving the GPU (Graphics Processing Unit) handling graphical intensive operations. diff --git a/assets/ansible/default.yml b/assets/ansible/default.yml new file mode 100644 index 00000000..a8a78135 --- /dev/null +++ b/assets/ansible/default.yml @@ -0,0 +1,18 @@ +splunk: + # apps_location: + # - https://splunkbase.splunk.com/app/2882/release/4.2.0/download + # - https://splunkbase.splunk.com/app/2890/release/5.4.1/download + # - /tmp/apps/python-for-scientific-computing-for-linux-64-bit_420.tgz + + conf: + - key: web + value: + directory: /opt/splunk/etc/system/local/ + content: + settings: + cacheEntriesLimit: 0 + cacheBytesLimit: 0 + splunkdConnectionTimeout: 9999 + enable_risky_command_check: 0 + enable_risky_command_check_dashboard: 0 + max_upload_size: 1024 \ No newline at end of file diff --git a/assets/apps/.gitkeep b/assets/apps/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/assets/cicd/config/web.conf b/assets/cicd/config/web.conf new file mode 100644 index 00000000..5dad1337 --- /dev/null +++ b/assets/cicd/config/web.conf @@ -0,0 +1,3 @@ +[settings] +enable_risky_command_check = 0 +enable_risky_command_check_dashboard = 0 \ No newline at end of file diff --git a/assets/docker/Dockerfile b/assets/docker/Dockerfile new file mode 100644 index 00000000..9c0ebca3 --- /dev/null +++ b/assets/docker/Dockerfile @@ -0,0 +1,17 @@ +# Use a minimal Linux distribution as the base image +FROM alpine:latest + +# Install curl and Docker CLI +RUN apk --no-cache add curl docker-cli jq + +# Set the working directory +WORKDIR /app + +# Copy the configuration script into the image +COPY configure.sh /app/configure.sh + +# Make the script executable +RUN chmod +x /app/configure.sh + +# Define the entry point to run the configuration script +CMD ["/bin/sh", "/app/configure.sh"] \ No newline at end of file diff --git a/assets/docker/configure.sh b/assets/docker/configure.sh new file mode 100644 index 00000000..9e616eeb --- /dev/null +++ b/assets/docker/configure.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +echo "Configuring Splunk MLTK Permissions" +curl -k -S -s -o /dev/null -u admin:${SPLUNK_PASSWORD} https://splunk4viz:8089/services/apps/local/Splunk_ML_Toolkit/acl -d sharing=global -d owner=nobody -X POST + +echo "[Check] Current Splunk MLTK Permission" +curl -k -S -s -u admin:${SPLUNK_PASSWORD} https://splunk4viz:8089/services/apps/local/Splunk_ML_Toolkit/acl?output_mode=json | jq -r '.entry | .[].acl.sharing' + +# Disabling dependency installation via CLI +# NOTE: Must be used only for large apps, such as the python-for-scientific v4.2.0+ +# +# echo "Installing dependency via CLI" +# docker exec splunk4viz bash -c "sudo /opt/splunk/bin/splunk install app /tmp/ansible/python-for-scientific-computing-for-linux-64-bit_420.tgz -auth admin:${SPLUNK_PASSWORD}" \ No newline at end of file diff --git a/.images/splunk-3D-graph-network-topology-viz-screen-1.png b/assets/images/splunk-3D-graph-network-topology-viz-screen-1.png similarity index 100% rename from .images/splunk-3D-graph-network-topology-viz-screen-1.png rename to assets/images/splunk-3D-graph-network-topology-viz-screen-1.png diff --git a/.images/splunk-3D-graph-network-topology-viz-screen-2.png b/assets/images/splunk-3D-graph-network-topology-viz-screen-2.png similarity index 100% rename from .images/splunk-3D-graph-network-topology-viz-screen-2.png rename to assets/images/splunk-3D-graph-network-topology-viz-screen-2.png diff --git a/.images/splunk-3D-graph-network-topology-viz-screen-3.png b/assets/images/splunk-3D-graph-network-topology-viz-screen-3.png similarity index 100% rename from .images/splunk-3D-graph-network-topology-viz-screen-3.png rename to assets/images/splunk-3D-graph-network-topology-viz-screen-3.png diff --git a/.images/splunk-3D-graph-network-topology-viz-screen-4.png b/assets/images/splunk-3D-graph-network-topology-viz-screen-4.png similarity index 100% rename from .images/splunk-3D-graph-network-topology-viz-screen-4.png rename to assets/images/splunk-3D-graph-network-topology-viz-screen-4.png diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..c43f3c0f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,53 @@ +version: '3.6' + +services: + configurator: + build: + context: ./assets/docker + dockerfile: Dockerfile + env_file: + - .env + container_name: configurator + depends_on: + splunk: + condition: service_healthy + volumes: + - /var/run/docker.sock:/var/run/docker.sock + + splunk: + image: "splunk/splunk:9.1.3" + platform: "linux/amd64" + container_name: splunk4viz + volumes: + # Mount a volume from your local app to the remote /etc/apps + # - ./packages/${APP_NAME}/stage:/opt/splunk/etc/apps/${APP_NAME} + # Mount a volume to retain any packaged apps locally in ./app_packages + # - ./app_packages:/opt/splunk/share/splunk/app_packages + # Mount output folder from local app to the remote /etc/apps + - ./packages/${APP_NAME}:/opt/splunk/etc/apps/${APP_NAME} + # Mount a volume to provide custom configurations to splunk-ansible + - ./assets/ansible/default.yml:/tmp/defaults/default.yml + # Mount the dependency app to be installed via REST by splunk-ansible (alternative to SPLUNK_APPS_URL usage) + # - './assets/apps/python-for-scientific-computing-for-linux-64-bit_420.tgz:/tmp/apps/python-for-scientific-computing-for-linux-64-bit_420.tgz' + # Mount a volume to make sure this dependency app can be installed by the configurator via CLI (for v4.2.0+) + # - './assets/apps/python-for-scientific-computing-for-linux-64-bit_420.tgz:/tmp/ansible/python-for-scientific-computing-for-linux-64-bit_420.tgz' + environment: + # This skips the license acceptance step + - SPLUNK_START_ARGS=--answer-yes --no-prompt --accept-license + # This pre-defines the admin password + - SPLUNK_PASSWORD=${SPLUNK_PASSWORD} + # This defines a tarball of apps to be pre-installed, you can + # also include multiple tarballs with comma-separated URLs + - SPLUNK_APPS_URL=https://splunkbase.splunk.com/app/2890/release/5.4.1/download,https://splunkbase.splunk.com/app/2882/release/4.1.2/download + # - SPLUNK_APPS_URL=/tmp/ansible/python-for-scientific-computing-for-linux-64-bit_420.tgz + - SPLUNKBASE_USERNAME=${SPLUNKBASE_USERNAME} + - SPLUNKBASE_PASSWORD=${SPLUNKBASE_PASSWORD} + ports: + - 8000:8000 # for web/browser access + - 8089:8089 # for REST API access + healthcheck: + # This tells Docker whether our Splunk container has MLTK toolkit installed + test: ['CMD', 'curl', '-f', '-k', '-u', 'admin:${SPLUNK_PASSWORD}', 'https://localhost:8089/services/apps/local/Splunk_ML_Toolkit'] + interval: 10s + timeout: 5s + retries: 50 \ No newline at end of file diff --git a/LICENSE b/packages/splunk-3D-graph-network-topology-viz/LICENSE similarity index 100% rename from LICENSE rename to packages/splunk-3D-graph-network-topology-viz/LICENSE diff --git a/README/savedsearches.conf.spec b/packages/splunk-3D-graph-network-topology-viz/README/savedsearches.conf.spec similarity index 100% rename from README/savedsearches.conf.spec rename to packages/splunk-3D-graph-network-topology-viz/README/savedsearches.conf.spec diff --git a/app.manifest b/packages/splunk-3D-graph-network-topology-viz/app.manifest similarity index 100% rename from app.manifest rename to packages/splunk-3D-graph-network-topology-viz/app.manifest diff --git a/appserver/static/images/connected.png b/packages/splunk-3D-graph-network-topology-viz/appserver/static/images/connected.png similarity index 100% rename from appserver/static/images/connected.png rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/images/connected.png diff --git a/appserver/static/images/image b/packages/splunk-3D-graph-network-topology-viz/appserver/static/images/image similarity index 100% rename from appserver/static/images/image rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/images/image diff --git a/appserver/static/images/label.png b/packages/splunk-3D-graph-network-topology-viz/appserver/static/images/label.png similarity index 100% rename from appserver/static/images/label.png rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/images/label.png diff --git a/appserver/static/images/spine.png b/packages/splunk-3D-graph-network-topology-viz/appserver/static/images/spine.png similarity index 100% rename from appserver/static/images/spine.png rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/images/spine.png diff --git a/appserver/static/images/weighted.png b/packages/splunk-3D-graph-network-topology-viz/appserver/static/images/weighted.png similarity index 100% rename from appserver/static/images/weighted.png rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/images/weighted.png diff --git a/appserver/static/searchcontrolsevents.css b/packages/splunk-3D-graph-network-topology-viz/appserver/static/searchcontrolsevents.css similarity index 100% rename from appserver/static/searchcontrolsevents.css rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/searchcontrolsevents.css diff --git a/appserver/static/searchcontrolsevents.js b/packages/splunk-3D-graph-network-topology-viz/appserver/static/searchcontrolsevents.js similarity index 100% rename from appserver/static/searchcontrolsevents.js rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/searchcontrolsevents.js diff --git a/appserver/static/visualizations/3d_graph_network_topology_viz/README.md b/packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/README.md similarity index 100% rename from appserver/static/visualizations/3d_graph_network_topology_viz/README.md rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/README.md diff --git a/appserver/static/visualizations/3d_graph_network_topology_viz/formatter.html b/packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/formatter.html similarity index 100% rename from appserver/static/visualizations/3d_graph_network_topology_viz/formatter.html rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/formatter.html diff --git a/appserver/static/visualizations/3d_graph_network_topology_viz/package-lock.json b/packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/package-lock.json similarity index 100% rename from appserver/static/visualizations/3d_graph_network_topology_viz/package-lock.json rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/package-lock.json diff --git a/appserver/static/visualizations/3d_graph_network_topology_viz/package.json b/packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/package.json similarity index 100% rename from appserver/static/visualizations/3d_graph_network_topology_viz/package.json rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/package.json diff --git a/appserver/static/visualizations/3d_graph_network_topology_viz/preview.png b/packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/preview.png similarity index 100% rename from appserver/static/visualizations/3d_graph_network_topology_viz/preview.png rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/preview.png diff --git a/appserver/static/visualizations/3d_graph_network_topology_viz/src/visualization_source.js b/packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/src/visualization_source.js similarity index 100% rename from appserver/static/visualizations/3d_graph_network_topology_viz/src/visualization_source.js rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/src/visualization_source.js diff --git a/appserver/static/visualizations/3d_graph_network_topology_viz/visualization.css b/packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/visualization.css similarity index 100% rename from appserver/static/visualizations/3d_graph_network_topology_viz/visualization.css rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/visualization.css diff --git a/appserver/static/visualizations/3d_graph_network_topology_viz/visualization.js b/packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/visualization.js similarity index 100% rename from appserver/static/visualizations/3d_graph_network_topology_viz/visualization.js rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/visualization.js diff --git a/appserver/static/visualizations/3d_graph_network_topology_viz/webpack.config.js b/packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/webpack.config.js similarity index 100% rename from appserver/static/visualizations/3d_graph_network_topology_viz/webpack.config.js rename to packages/splunk-3D-graph-network-topology-viz/appserver/static/visualizations/3d_graph_network_topology_viz/webpack.config.js diff --git a/bin/mltk_graph/GraphCentrality.py b/packages/splunk-3D-graph-network-topology-viz/bin/mltk_graph/GraphCentrality.py similarity index 100% rename from bin/mltk_graph/GraphCentrality.py rename to packages/splunk-3D-graph-network-topology-viz/bin/mltk_graph/GraphCentrality.py diff --git a/bin/mltk_graph/GraphConnectedComponents.py b/packages/splunk-3D-graph-network-topology-viz/bin/mltk_graph/GraphConnectedComponents.py similarity index 100% rename from bin/mltk_graph/GraphConnectedComponents.py rename to packages/splunk-3D-graph-network-topology-viz/bin/mltk_graph/GraphConnectedComponents.py diff --git a/bin/mltk_graph/GraphLabelPropagation.py b/packages/splunk-3D-graph-network-topology-viz/bin/mltk_graph/GraphLabelPropagation.py similarity index 100% rename from bin/mltk_graph/GraphLabelPropagation.py rename to packages/splunk-3D-graph-network-topology-viz/bin/mltk_graph/GraphLabelPropagation.py diff --git a/bin/mltk_graph/MinimumSpanningTree.py b/packages/splunk-3D-graph-network-topology-viz/bin/mltk_graph/MinimumSpanningTree.py similarity index 100% rename from bin/mltk_graph/MinimumSpanningTree.py rename to packages/splunk-3D-graph-network-topology-viz/bin/mltk_graph/MinimumSpanningTree.py diff --git a/default/algos.conf b/packages/splunk-3D-graph-network-topology-viz/default/algos.conf similarity index 100% rename from default/algos.conf rename to packages/splunk-3D-graph-network-topology-viz/default/algos.conf diff --git a/default/app.conf b/packages/splunk-3D-graph-network-topology-viz/default/app.conf similarity index 100% rename from default/app.conf rename to packages/splunk-3D-graph-network-topology-viz/default/app.conf diff --git a/default/data/ui/nav/default.xml b/packages/splunk-3D-graph-network-topology-viz/default/data/ui/nav/default.xml similarity index 100% rename from default/data/ui/nav/default.xml rename to packages/splunk-3D-graph-network-topology-viz/default/data/ui/nav/default.xml diff --git a/default/data/ui/views/graph_analysis.xml b/packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis.xml similarity index 100% rename from default/data/ui/views/graph_analysis.xml rename to packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis.xml diff --git a/default/data/ui/views/graph_analysis_centrality.xml b/packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_centrality.xml similarity index 100% rename from default/data/ui/views/graph_analysis_centrality.xml rename to packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_centrality.xml diff --git a/default/data/ui/views/graph_analysis_connected_components.xml b/packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_connected_components.xml similarity index 100% rename from default/data/ui/views/graph_analysis_connected_components.xml rename to packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_connected_components.xml diff --git a/default/data/ui/views/graph_analysis_example_connected_components.xml b/packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_example_connected_components.xml similarity index 100% rename from default/data/ui/views/graph_analysis_example_connected_components.xml rename to packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_example_connected_components.xml diff --git a/default/data/ui/views/graph_analysis_example_for_bitcoin_transactions.xml b/packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_example_for_bitcoin_transactions.xml similarity index 100% rename from default/data/ui/views/graph_analysis_example_for_bitcoin_transactions.xml rename to packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_example_for_bitcoin_transactions.xml diff --git a/default/data/ui/views/graph_analysis_example_for_network_traffic.xml b/packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_example_for_network_traffic.xml similarity index 100% rename from default/data/ui/views/graph_analysis_example_for_network_traffic.xml rename to packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_example_for_network_traffic.xml diff --git a/default/data/ui/views/graph_analysis_example_label_propagation.xml b/packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_example_label_propagation.xml similarity index 100% rename from default/data/ui/views/graph_analysis_example_label_propagation.xml rename to packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_example_label_propagation.xml diff --git a/default/data/ui/views/graph_analysis_label_propagation.xml b/packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_label_propagation.xml similarity index 100% rename from default/data/ui/views/graph_analysis_label_propagation.xml rename to packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_label_propagation.xml diff --git a/default/data/ui/views/graph_analysis_minimum_spanning_tree.xml b/packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_minimum_spanning_tree.xml similarity index 100% rename from default/data/ui/views/graph_analysis_minimum_spanning_tree.xml rename to packages/splunk-3D-graph-network-topology-viz/default/data/ui/views/graph_analysis_minimum_spanning_tree.xml diff --git a/default/macros.conf b/packages/splunk-3D-graph-network-topology-viz/default/macros.conf similarity index 100% rename from default/macros.conf rename to packages/splunk-3D-graph-network-topology-viz/default/macros.conf diff --git a/default/savedsearches.conf b/packages/splunk-3D-graph-network-topology-viz/default/savedsearches.conf similarity index 100% rename from default/savedsearches.conf rename to packages/splunk-3D-graph-network-topology-viz/default/savedsearches.conf diff --git a/default/transforms.conf b/packages/splunk-3D-graph-network-topology-viz/default/transforms.conf similarity index 100% rename from default/transforms.conf rename to packages/splunk-3D-graph-network-topology-viz/default/transforms.conf diff --git a/default/visualizations.conf b/packages/splunk-3D-graph-network-topology-viz/default/visualizations.conf similarity index 100% rename from default/visualizations.conf rename to packages/splunk-3D-graph-network-topology-viz/default/visualizations.conf diff --git a/lookups/cidds_ip_connections.csv b/packages/splunk-3D-graph-network-topology-viz/lookups/cidds_ip_connections.csv similarity index 100% rename from lookups/cidds_ip_connections.csv rename to packages/splunk-3D-graph-network-topology-viz/lookups/cidds_ip_connections.csv diff --git a/metadata/default.meta b/packages/splunk-3D-graph-network-topology-viz/metadata/default.meta similarity index 100% rename from metadata/default.meta rename to packages/splunk-3D-graph-network-topology-viz/metadata/default.meta diff --git a/static/appIcon.png b/packages/splunk-3D-graph-network-topology-viz/static/appIcon.png similarity index 100% rename from static/appIcon.png rename to packages/splunk-3D-graph-network-topology-viz/static/appIcon.png diff --git a/static/appIcon_2x.png b/packages/splunk-3D-graph-network-topology-viz/static/appIcon_2x.png similarity index 100% rename from static/appIcon_2x.png rename to packages/splunk-3D-graph-network-topology-viz/static/appIcon_2x.png diff --git a/static/screenshot.png b/packages/splunk-3D-graph-network-topology-viz/static/screenshot.png similarity index 100% rename from static/screenshot.png rename to packages/splunk-3D-graph-network-topology-viz/static/screenshot.png diff --git a/test/cypress.config.js b/test/cypress.config.js new file mode 100644 index 00000000..e2cc8bbb --- /dev/null +++ b/test/cypress.config.js @@ -0,0 +1,40 @@ +const { defineConfig } = require('cypress') + +// Ref. https://docs.cypress.io/guides/references/configuration +module.exports = defineConfig({ + //screenShotOnFailure: false, + e2e: { + env: { + cmc_uri: '/en-US/app/splunk-3D-graph-network-topology-viz', + splunk_user: 'admin', + splunk_password: 'password', + }, + // We've imported your old cypress plugins here. + // You may want to clean this up later by importing these. + setupNodeEvents(on, config) { + return require('./cypress/plugins/index.js')(on, config) + }, + baseUrl: 'http://localhost:8000', + defaultCommandTimeout: 40000, + // retries: 3, + // chromeWebSecurity: false, + // experimentalMemoryManagement: true, + pageLoadTimeout: 600000, + // viewportWidth: 1000, + // viewportHeight: 1200, + video: true, + videoCompression: false, + // Reference on skipping tests: + // https://www.browserstack.com/guide/cypress-skip-test + excludeSpecPattern: [ + // "./cypress/e2e/**/login.cy.js", + "./cypress/e2e/**/graph_analysis.cy.js" + ], + }, + // Write test results to stdout and to xml reports + reporter: 'junit', + reporterOptions: { + "mochaFile": "cypress/results/results-[hash].xml", + "toConsole": true + } +}) diff --git a/test/cypress/e2e/graph_analysis.cy.js b/test/cypress/e2e/graph_analysis.cy.js new file mode 100644 index 00000000..71add78a --- /dev/null +++ b/test/cypress/e2e/graph_analysis.cy.js @@ -0,0 +1,69 @@ +describe('Graph Analysis', { + // retries: { + // runMode: 2, // might fail headlessly due to slow page load + // } +}, () => { + beforeEach(() => { + cy.splunkLogin(); + cy.intercept( + { + method: 'GET', + pathname: + // CAREFUL!! For Splunk 9.2+ API has changed to **/search/v2/jobs/admin** + // --> This intercept does not work for 9.2+ + // --> already tried '/en-US/splunkd/__raw/servicesNS/admin/splunk-3D-graph-network-topology-viz/search/*/jobs/admin**' + '/en-US/splunkd/__raw/servicesNS/admin/splunk-3D-graph-network-topology-viz/search/jobs/admin**', + query: { + output_mode: 'json', + } + // times: 1 + } + ).as('hasPageLoaded'); + cy.visit(Cypress.env("cmc_uri") + "/graph_analysis"); + }); + + afterEach(() => { + cy.splunkLogout(); + }); + + describe("Validates data on dashboard", () => { + it("navigation works", () => { + // Check the URL is correct + cy.location().should((loc) => { + expect(loc.pathname).to.eq('/en-US/app/splunk-3D-graph-network-topology-viz/graph_analysis'); + }); + }) + + it("components render properly", () => { + cy.wait('@hasPageLoaded').then((interception) => { + expect(interception.response.body).not.to.be.empty; + + // Buttons + cy.get('#cidds').should('exist').and('be.visible').and('not.be.disabled'); + cy.get('#bitcoin').should('exist').and('be.visible').and('not.be.disabled'); + cy.get('#internal').should('exist').and('be.visible').and('not.be.disabled'); + + // Search bar + cy.get('#mysearchbar1').should('exist').and('be.visible'); + }); + }); + + it("internal log data sources render properly", () => { + cy.wait('@hasPageLoaded', { timeout: 10000 }).then((interception) => { + expect(interception.response.body).not.to.be.empty; + + cy.get('#internal').click(); + // UGLY but works to wait for the searches to run + cy.wait(10000); + // Table with search results shown + cy.get('.splunk-table').should('exist'); + // Dropdown buttons to select fields shown + cy.get('.splunk-dropdown').should('have.length', 3); + // Waiting for search to be done and dropdowns under "Select Fields" section to be shown + // Otherwise logout will be triggered and pending searches will throw errors + cy.get("div#statistics.viz-controller table").eq(0).find('thead').should('be.visible'); + cy.get("div#statistics.viz-controller table").eq(0).find('thead').should('exist'); + }); + }); + }); +}); \ No newline at end of file diff --git a/test/cypress/e2e/graph_examples.cy.js b/test/cypress/e2e/graph_examples.cy.js new file mode 100644 index 00000000..67303432 --- /dev/null +++ b/test/cypress/e2e/graph_examples.cy.js @@ -0,0 +1,72 @@ +const max_waiting = 25000; + +describe('Graph Examples', { +}, () => { + describe("Validates data on the [Bitcoin Transactions] dashboard", () => { + beforeEach(() => { + cy.splunkLogin(); + cy.visit(Cypress.env("cmc_uri") + "/graph_analysis_example_for_bitcoin_transactions"); + }); + afterEach(() => { + cy.splunkLogout(); + }); + + it("renders without errors", () => { + cy.get('.dashboard-header-title', { timeout: max_waiting }).should('have.text', 'Graph Analysis Example for Bitcoin Transactions'); + cy.get('.force-graph-container canvas', { timeout: max_waiting }).should('exist'); + cy.get('.force-graph-container canvas', { timeout: max_waiting }).should('be.visible'); + // cy.get('div.alert.alert-error', {timeout: max_waiting}).should('not.exist'); + }); + }); + + describe("Validates data on the [Network Traffic] dashboard", () => { + beforeEach(() => { + cy.splunkLogin(); + cy.visit(Cypress.env("cmc_uri") + "/graph_analysis_example_for_network_traffic"); + }); + afterEach(() => { + cy.splunkLogout(); + }); + + it("renders without errors", () => { + cy.get('.dashboard-header-title', { timeout: max_waiting }).should('have.text', 'Graph Analysis Example for Network Traffic'); + cy.get('.force-graph-container canvas', { timeout: max_waiting }).should('exist'); + cy.get('.force-graph-container canvas', { timeout: max_waiting }).should('be.visible'); + // cy.get('div.alert.alert-error', { timeout: max_waiting }).should('not.exist'); + }); + }); + + describe("Validates data on the [Connected Components] dashboard", () => { + beforeEach(() => { + cy.splunkLogin(); + cy.visit(Cypress.env("cmc_uri") + "/graph_analysis_example_connected_components"); + }); + afterEach(() => { + cy.splunkLogout(); + }); + + it("renders without errors", () => { + cy.get('.dashboard-header-title', { timeout: max_waiting }).should('have.text', 'Graph Analysis Example: Connected Components'); + cy.get('.force-graph-container canvas', { timeout: max_waiting }).should('exist'); + cy.get('.force-graph-container canvas', { timeout: max_waiting }).should('be.visible'); + // cy.get('div.alert.alert-error', { timeout: max_waiting }).should('not.exist'); + }); + }); + + describe("Validates data on the [Label Propagation] dashboard", () => { + beforeEach(() => { + cy.splunkLogin(); + cy.visit(Cypress.env("cmc_uri") + "/graph_analysis_example_label_propagation"); + }); + afterEach(() => { + cy.splunkLogout(); + }); + + it("renders without errors", () => { + cy.get('.dashboard-header-title', { timeout: max_waiting }).should('have.text', 'Graph Analysis Example: Label Propagation'); + cy.get('.force-graph-container canvas', { timeout: max_waiting }).should('exist'); + cy.get('.force-graph-container canvas', { timeout: max_waiting }).should('be.visible'); + // cy.get('div.alert.alert-error', { timeout: max_waiting }).should('not.exist'); + }); + }); +}); \ No newline at end of file diff --git a/test/cypress/e2e/login.cy.js b/test/cypress/e2e/login.cy.js new file mode 100644 index 00000000..a205b8eb --- /dev/null +++ b/test/cypress/e2e/login.cy.js @@ -0,0 +1,17 @@ +describe('Login and Cookie Preservation', () => { + afterEach(() => { + cy.splunkLogout(); + }); + + it('checks that we can successfully login to Splunk', () => { + // Cypress.Cookies.defaults({ + // preserve: ['session_id', + // 'splunkweb_csrf_token_9000', + // 'splunkd_8000', + // 'splunkweb_csrf_token_8000', + // 'session_id_8000'] + // }) + cy.splunkLogin(); + cy.visit('/en-US/app/splunk-3D-graph-network-topology-viz/graph_analysis'); + }) +}) diff --git a/test/cypress/fixtures/example.json b/test/cypress/fixtures/example.json new file mode 100644 index 00000000..02e42543 --- /dev/null +++ b/test/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} diff --git a/test/cypress/plugins/index.js b/test/cypress/plugins/index.js new file mode 100644 index 00000000..a465f842 --- /dev/null +++ b/test/cypress/plugins/index.js @@ -0,0 +1,30 @@ +/// +// *********************************************************** +// This example plugins/index.js can be used to load plugins +// +// You can change the location of this file or turn off loading +// the plugins file with the 'pluginsFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/plugins-guide +// *********************************************************** + +// This function is called when a project is opened or re-opened (e.g. due to +// the project's config changing) + +/** + * @type {Cypress.PluginConfig} + */ +module.exports = (on, config) => { + // `on` is used to hook into various events Cypress emits + // `config` is the resolved Cypress config + on('before:browser:launch', (browser = {}, launchOptions) => { + // `args` is an array of all the arguments that will + // be passed to browsers when it launches + console.log(launchOptions.args); // print all current args + if (browser.name == 'chrome' || browser.name == 'firefox') { + launchOptions.args.push('--disable-gpu'); + } + return launchOptions; + }) +} diff --git a/test/cypress/support/commands.js b/test/cypress/support/commands.js new file mode 100644 index 00000000..24defb8f --- /dev/null +++ b/test/cypress/support/commands.js @@ -0,0 +1,44 @@ +// *********************************************** +// This example commands.js shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add("login", (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) + +Cypress.Commands.add('splunkLogin', () => { + const loginPath = '/en-US/account/login'; + + cy.visit(loginPath); + + cy.get('input[name=username]').type(Cypress.env('splunk_user')); + cy.get('input[name=password]').type(Cypress.env('splunk_password')); + cy.get("input[type=submit][value='Sign In']").click(); + + cy.url().should('include', '/home'); +}) + +Cypress.Commands.add('splunkLogout', () => { + // cy.window().then((win) => { + // win.sessionStorage.removeItem('userToken'); + // }); + cy.request('/en-US/account/logout'); +}) diff --git a/test/cypress/support/e2e.js b/test/cypress/support/e2e.js new file mode 100644 index 00000000..89a0529b --- /dev/null +++ b/test/cypress/support/e2e.js @@ -0,0 +1,33 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands' + +// Alternatively you can use CommonJS syntax: +// require('./commands') + +// Cypress.on('uncaught:exception', (err, runnable) => { +// // we expect a 3rd party library error with message 'window.locale_name is not a function' +// // and don't want to fail the test so we return false +// if (err.message.includes('window.locale_name is not a function')) { +// return false; +// } +// if (err.message.includes('t.data is undefined')) { +// return false; +// } +// // we still want to ensure there are no other unexpected +// // errors, so we let them fail the test +// }) \ No newline at end of file diff --git a/test/package-lock.json b/test/package-lock.json new file mode 100644 index 00000000..95196337 --- /dev/null +++ b/test/package-lock.json @@ -0,0 +1,2028 @@ +{ + "name": "app-test-pkg", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "app-test-pkg", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "eslint-plugin-cypress": "^2.12.1" + }, + "devDependencies": { + "cypress": "^13.6.5" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cypress/request": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", + "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.10.4", + "safe-buffer": "^5.1.2", + "tough-cookie": "^4.1.3", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "dev": true, + "optional": true + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "node_modules/@types/sizzle": { + "version": "2.3.8", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.1.tgz", + "integrity": "sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cypress": { + "version": "13.13.3", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.13.3.tgz", + "integrity": "sha512-hUxPrdbJXhUOTzuML+y9Av7CKoYznbD83pt8g3klgpioEha0emfx4WNIuVRx0C76r0xV2MIwAW9WYiXfVJYFQw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@cypress/request": "^3.0.1", + "@cypress/xvfb": "^1.2.4", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.7.1", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.1", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "process": "^0.11.10", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.5.3", + "supports-color": "^8.1.1", + "tmp": "~0.2.3", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^16.0.0 || ^18.0.0 || >=20.0.0" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-plugin-cypress": { + "version": "2.15.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz", + "integrity": "sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==", + "dependencies": { + "globals": "^13.20.0" + }, + "peerDependencies": { + "eslint": ">= 3.2.1" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "engines": { + "node": "> 0.8" + } + }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/throttleit": { + "version": "1.0.1", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://repo.splunkdev.net:443/artifactory/api/npm/npm/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/test/package.json b/test/package.json new file mode 100644 index 00000000..2f338782 --- /dev/null +++ b/test/package.json @@ -0,0 +1,18 @@ +{ + "name": "app-test-pkg", + "version": "1.0.0", + "description": "Test Suite for Splunk 3D Graph Network Topology Viz", + "scripts": { + "debug": "cypress open", + "info": "cypress info", + "test": "cypress run" + }, + "author": "Splunk", + "license": "ISC", + "dependencies": { + "eslint-plugin-cypress": "^2.12.1" + }, + "devDependencies": { + "cypress": "^13.6.5" + } +}