From 1cce25ea811880835b2e08741be2d87f67455855 Mon Sep 17 00:00:00 2001 From: Willem Jan Gerritsen Date: Thu, 25 Aug 2022 09:40:20 +0200 Subject: [PATCH] Complete cafienne development in dev container fixes #21 - Have tests with callback running from devcontainer --- .devcontainer/Dockerfile | 14 + .devcontainer/base.Dockerfile | 17 + .devcontainer/devcontainer.json | 39 + .devcontainer/docker-compose.workspace.yml | 12 + .dockerignore | 3 - .env | 1 + .gitignore | 427 +- .mocharc.json | 7 + .vscode/extensions.json | 6 + .vscode/settings.json | 8 + CaseFiles/Compiled/CallMeBack.xml | 85 + CaseFiles/Compiled/HelloWorld.xml | 32 + .../Precompiled/CalculationProcess.process | 10 + CaseFiles/Precompiled/CallBack.process | 39 + CaseFiles/Precompiled/CallMeBack.case | 26 + CaseFiles/Precompiled/CallMeBack.dimensions | 13 + CaseFiles/Precompiled/HelloWorld.case | 9 + CaseFiles/Precompiled/HelloWorld.dimensions | 10 + CaseFiles/Precompiled/greeting.cfid | 1 + CaseFiles/Precompiled/output.cfid | 4 + CaseFiles/Precompiled/task.cfid | 1 + Dockerfile | 7 - LICENSE | 746 ++-- README.md | 41 +- cafienne-cassandra.yml | 189 - cafienne-postgres.yml | 196 - cafienne-sqlserver.yml | 179 - docker-compose.yml | 145 - documentation/demo-architecture.md | 1 - documentation/docker-configuration.md | 90 - package-lock.json | 3535 +++++++++++++++++ package.json | 37 + src/cassandra-conf/local.conf | 630 --- src/definitions/README.md | 1 - src/definitions/allocatefunds.process | 21 - src/definitions/approval.cfid | 7 - .../approvetravelrequest.humantask | 414 -- src/definitions/arrangevisa.humantask | 88 - src/definitions/checkapprover.process | 22 - .../checktravelrequirements.process | 16 - .../createtravelpurchaseorder.humantask | 382 -- src/definitions/destination.cfid | 4 - src/definitions/emailpurchaseorder.process | 163 - src/definitions/emailrequestor.process | 165 - src/definitions/emailtravelofffice.process | 172 - src/definitions/generatepurchaseorder.process | 356 -- src/definitions/greeting.cfid | 5 - src/definitions/helloworld.case | 124 - src/definitions/helloworld.dimensions | 17 - src/definitions/managetravelrequest.humantask | 369 -- src/definitions/manuallysetapprover.humantask | 366 -- src/definitions/meeting.cfid | 8 - src/definitions/notifyapprovelemail.process | 184 - src/definitions/project.cfid | 8 - src/definitions/readresponse.humantask | 50 - src/definitions/response.cfid | 6 - src/definitions/sendresponse.humantask | 74 - src/definitions/transport.cfid | 6 - src/definitions/traveldetails.cfid | 10 - src/definitions/traveller.cfid | 8 - src/definitions/travellerdetails.cfid | 5 - src/definitions/travelorderdoc.cfid | 2 - src/definitions/travelrequest.case | 1006 ----- src/definitions/travelrequest.cfid | 1 - src/definitions/travelrequest.dimensions | 123 - src/definitions/travelstatus.cfid | 6 - src/dex/conf/dex-setup.yaml | 95 - .../web/static/img/atlassian-crowd-icon.svg | 17 - src/dex/web/static/img/bitbucket-icon.svg | 5 - src/dex/web/static/img/coreos-icon.svg | 15 - src/dex/web/static/img/email-icon.svg | 5 - src/dex/web/static/img/github-icon.svg | 5 - src/dex/web/static/img/gitlab-icon.svg | 53 - src/dex/web/static/img/google-icon.svg | 14 - src/dex/web/static/img/ldap-icon.svg | 12 - src/dex/web/static/img/linkedin-icon.svg | 1 - src/dex/web/static/img/microsoft-icon.svg | 9 - src/dex/web/static/img/oidc-icon.svg | 156 - src/dex/web/static/img/old-email-icon.svg | 12 - src/dex/web/static/img/saml-icon.svg | 12 - src/dex/web/static/main.css | 140 - src/dex/web/templates/approval.html | 40 - src/dex/web/templates/device.html | 23 - src/dex/web/templates/device_success.html | 8 - src/dex/web/templates/error.html | 8 - src/dex/web/templates/footer.html | 3 - src/dex/web/templates/header.html | 21 - src/dex/web/templates/login.html | 19 - src/dex/web/templates/oob.html | 9 - src/dex/web/templates/password.html | 42 - src/dex/web/themes/coreos/favicon.ico | Bin 15086 -> 0 bytes src/dex/web/themes/coreos/logo.png | Bin 4976 -> 0 bytes src/dex/web/themes/coreos/styles.css | 113 - src/jdbc-conf/local.conf | 237 -- target/definitions/helloworld.xml | 276 -- test/CafienneSetup.ts | 11 + test/CallMeBackTest.ts | 97 + test/HelloWorld.ts | 37 + test/docker/docker-compose.yml | 99 + .../docker/src}/bootstrap/world.tenant.conf | 34 +- {src => test/docker/src}/conf/local.conf | 375 +- {src => test/docker/src}/conf/logback.xml | 84 +- test/support/ts-node-register.js | 4 + test/testtenant.ts | 32 + tsconfig.json | 14 + 105 files changed, 5174 insertions(+), 7712 deletions(-) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/base.Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/docker-compose.workspace.yml delete mode 100644 .dockerignore create mode 100644 .env create mode 100644 .mocharc.json create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 CaseFiles/Compiled/CallMeBack.xml create mode 100644 CaseFiles/Compiled/HelloWorld.xml create mode 100644 CaseFiles/Precompiled/CalculationProcess.process create mode 100644 CaseFiles/Precompiled/CallBack.process create mode 100644 CaseFiles/Precompiled/CallMeBack.case create mode 100644 CaseFiles/Precompiled/CallMeBack.dimensions create mode 100644 CaseFiles/Precompiled/HelloWorld.case create mode 100644 CaseFiles/Precompiled/HelloWorld.dimensions create mode 100644 CaseFiles/Precompiled/greeting.cfid create mode 100644 CaseFiles/Precompiled/output.cfid create mode 100644 CaseFiles/Precompiled/task.cfid delete mode 100644 Dockerfile delete mode 100644 cafienne-cassandra.yml delete mode 100644 cafienne-postgres.yml delete mode 100644 cafienne-sqlserver.yml delete mode 100644 docker-compose.yml delete mode 100644 documentation/demo-architecture.md delete mode 100644 documentation/docker-configuration.md create mode 100644 package-lock.json create mode 100644 package.json delete mode 100644 src/cassandra-conf/local.conf delete mode 100644 src/definitions/README.md delete mode 100644 src/definitions/allocatefunds.process delete mode 100644 src/definitions/approval.cfid delete mode 100644 src/definitions/approvetravelrequest.humantask delete mode 100644 src/definitions/arrangevisa.humantask delete mode 100644 src/definitions/checkapprover.process delete mode 100644 src/definitions/checktravelrequirements.process delete mode 100644 src/definitions/createtravelpurchaseorder.humantask delete mode 100644 src/definitions/destination.cfid delete mode 100644 src/definitions/emailpurchaseorder.process delete mode 100644 src/definitions/emailrequestor.process delete mode 100644 src/definitions/emailtravelofffice.process delete mode 100644 src/definitions/generatepurchaseorder.process delete mode 100644 src/definitions/greeting.cfid delete mode 100644 src/definitions/helloworld.case delete mode 100644 src/definitions/helloworld.dimensions delete mode 100644 src/definitions/managetravelrequest.humantask delete mode 100644 src/definitions/manuallysetapprover.humantask delete mode 100644 src/definitions/meeting.cfid delete mode 100644 src/definitions/notifyapprovelemail.process delete mode 100644 src/definitions/project.cfid delete mode 100644 src/definitions/readresponse.humantask delete mode 100644 src/definitions/response.cfid delete mode 100644 src/definitions/sendresponse.humantask delete mode 100644 src/definitions/transport.cfid delete mode 100644 src/definitions/traveldetails.cfid delete mode 100644 src/definitions/traveller.cfid delete mode 100644 src/definitions/travellerdetails.cfid delete mode 100644 src/definitions/travelorderdoc.cfid delete mode 100644 src/definitions/travelrequest.case delete mode 100644 src/definitions/travelrequest.cfid delete mode 100644 src/definitions/travelrequest.dimensions delete mode 100644 src/definitions/travelstatus.cfid delete mode 100644 src/dex/conf/dex-setup.yaml delete mode 100644 src/dex/web/static/img/atlassian-crowd-icon.svg delete mode 100644 src/dex/web/static/img/bitbucket-icon.svg delete mode 100644 src/dex/web/static/img/coreos-icon.svg delete mode 100644 src/dex/web/static/img/email-icon.svg delete mode 100644 src/dex/web/static/img/github-icon.svg delete mode 100644 src/dex/web/static/img/gitlab-icon.svg delete mode 100644 src/dex/web/static/img/google-icon.svg delete mode 100644 src/dex/web/static/img/ldap-icon.svg delete mode 100644 src/dex/web/static/img/linkedin-icon.svg delete mode 100644 src/dex/web/static/img/microsoft-icon.svg delete mode 100644 src/dex/web/static/img/oidc-icon.svg delete mode 100644 src/dex/web/static/img/old-email-icon.svg delete mode 100644 src/dex/web/static/img/saml-icon.svg delete mode 100644 src/dex/web/static/main.css delete mode 100644 src/dex/web/templates/approval.html delete mode 100644 src/dex/web/templates/device.html delete mode 100644 src/dex/web/templates/device_success.html delete mode 100644 src/dex/web/templates/error.html delete mode 100644 src/dex/web/templates/footer.html delete mode 100644 src/dex/web/templates/header.html delete mode 100644 src/dex/web/templates/login.html delete mode 100644 src/dex/web/templates/oob.html delete mode 100644 src/dex/web/templates/password.html delete mode 100644 src/dex/web/themes/coreos/favicon.ico delete mode 100644 src/dex/web/themes/coreos/logo.png delete mode 100644 src/dex/web/themes/coreos/styles.css delete mode 100644 src/jdbc-conf/local.conf delete mode 100644 target/definitions/helloworld.xml create mode 100644 test/CafienneSetup.ts create mode 100644 test/CallMeBackTest.ts create mode 100644 test/HelloWorld.ts create mode 100644 test/docker/docker-compose.yml rename {src => test/docker/src}/bootstrap/world.tenant.conf (96%) rename {src => test/docker/src}/conf/local.conf (76%) rename {src => test/docker/src}/conf/logback.xml (97%) create mode 100644 test/support/ts-node-register.js create mode 100644 test/testtenant.ts create mode 100644 tsconfig.json diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..e6f1da8 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,14 @@ +# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 18, 16, 14, 18-bullseye, 16-bullseye, 14-bullseye, 18-buster, 16-buster, 14-buster +ARG VARIANT=16-bullseye +FROM mcr.microsoft.com/vscode/devcontainers/typescript-node:0-${VARIANT} + +# [Optional] Uncomment this section to install additional OS packages. +# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ +# && apt-get -y install --no-install-recommends + +# [Optional] Uncomment if you want to install an additional version of node using nvm +# ARG EXTRA_NODE_VERSION=10 +# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}" + +# [Optional] Uncomment if you want to install more global node packages +# RUN su node -c "npm install -g " diff --git a/.devcontainer/base.Dockerfile b/.devcontainer/base.Dockerfile new file mode 100644 index 0000000..70216c9 --- /dev/null +++ b/.devcontainer/base.Dockerfile @@ -0,0 +1,17 @@ +# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 18, 16, 14, 18-bullseye, 16-bullseye, 14-bullseye, 18-buster, 16-buster, 14-buster +ARG VARIANT=16-bullseye +FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${VARIANT} + +# Install tslint, typescript. eslint is installed by javascript image +ARG NODE_MODULES="tslint-to-eslint-config typescript" +COPY library-scripts/meta.env /usr/local/etc/vscode-dev-containers +RUN su node -c "umask 0002 && npm install -g ${NODE_MODULES}" \ + && npm cache clean --force > /dev/null 2>&1 + +# [Optional] Uncomment this section to install additional OS packages. +# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ +# && apt-get -y install --no-install-recommends + +# [Optional] Uncomment if you want to install an additional version of node using nvm +# ARG EXTRA_NODE_VERSION=10 +# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..3973f83 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,39 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.245.0/containers/typescript-node +{ + "name": "Cafienne Getting Started demo development project", + "service": "workspace", + "workspaceFolder": "/home/vscode/workspaces/cafienne/", + "dockerComposeFile": [ + "../test/docker/docker-compose.yml", + "docker-compose.workspace.yml" + ], + + // Configure tool-specific properties. + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + // Add the IDs of extensions you want installed when the container is created. + "extensions": [ + "hbenl.vscode-mocha-test-adapter", + "hbenl.vscode-test-explorer", + "weakptr.javascript-test-runner", + "eamodio.gitlens", + "eg2.vscode-npm-script", + "ms-azuretools.vscode-docker", + "traBpUkciP.vscode-npm-scripts", + "ms-vscode.test-adapter-converter", + "redhat.vscode-yaml" + ] + } + }, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + "forwardPorts": [33077, 33080, 33081, 33077, 12378] + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "yarn install", + + // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. + // "remoteUser": "node" +} diff --git a/.devcontainer/docker-compose.workspace.yml b/.devcontainer/docker-compose.workspace.yml new file mode 100644 index 0000000..ef77770 --- /dev/null +++ b/.devcontainer/docker-compose.workspace.yml @@ -0,0 +1,12 @@ +version: '3' +services: + workspace: + image: wjgerritsen/cafienne-dev:latest + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ../..:/home/vscode/workspaces/cafienne/ + ports: + - 12378 + tty: true # <- keeps container running + networks: + - dev \ No newline at end of file diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 29d394b..0000000 --- a/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -src/definitions -tests/ -target/temp \ No newline at end of file diff --git a/.env b/.env new file mode 100644 index 0000000..daa3d96 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=CafienneGettingStarted \ No newline at end of file diff --git a/.gitignore b/.gitignore index 3be5628..fbf9197 100644 --- a/.gitignore +++ b/.gitignore @@ -1,87 +1,340 @@ -### Windows template -# Windows image file caches -Thumbs.db -ehthumbs.db - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msm -*.msp - -# Windows shortcuts -*.lnk - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -### OSX template -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk -### Eclipse template -*.pydevproject -.metadata -.gradle -/bin/ -/tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath - -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -run/ -documentation/UserContext.md +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- Backup*.rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb \ No newline at end of file diff --git a/.mocharc.json b/.mocharc.json new file mode 100644 index 0000000..8dfcf9f --- /dev/null +++ b/.mocharc.json @@ -0,0 +1,7 @@ +{ + "extension": [ + "ts" + ], + "logVerbose ": true, + "esModuleInterop": true +} \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..8e6fdd2 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,6 @@ +{ + "recommendations": [ + "ms-vscode-remote.remote-wsl", + "ms-vscode-remote.remote-containers" + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..18bbf69 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "testExplorer.addToEditorContextMenu": true, + "mochaExplorer.asyncOnly": true, + "mochaExplorer.logpanel": true, + "mochaExplorer.files": "test/**/*.ts", + "workbench.colorTheme": "Quiet Light", + "npm-scripts.showStartNotification": false, +} \ No newline at end of file diff --git a/CaseFiles/Compiled/CallMeBack.xml b/CaseFiles/Compiled/CallMeBack.xml new file mode 100644 index 0000000..1a1de1f --- /dev/null +++ b/CaseFiles/Compiled/CallMeBack.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${T(java.lang.System).getenv("TestBaseUrl")}/cmmn-wrapper?HandlerName=TestCallBack + POST + + { + "Task": "${operation}", + "CaseInstanceId": "${caseId}" + } + + + */* + application/json + + + + + + map("success", true, "message", responsePayload) + + + + + + + + + map("success", false, "message", responsePayload) + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CaseFiles/Compiled/HelloWorld.xml b/CaseFiles/Compiled/HelloWorld.xml new file mode 100644 index 0000000..d08fbda --- /dev/null +++ b/CaseFiles/Compiled/HelloWorld.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CaseFiles/Precompiled/CalculationProcess.process b/CaseFiles/Precompiled/CalculationProcess.process new file mode 100644 index 0000000..18cf2af --- /dev/null +++ b/CaseFiles/Precompiled/CalculationProcess.process @@ -0,0 +1,10 @@ + + + + + + true + + + + \ No newline at end of file diff --git a/CaseFiles/Precompiled/CallBack.process b/CaseFiles/Precompiled/CallBack.process new file mode 100644 index 0000000..dff005d --- /dev/null +++ b/CaseFiles/Precompiled/CallBack.process @@ -0,0 +1,39 @@ + + + + + + + ${T(java.lang.System).getenv("TestBaseUrl")}/cmmn-wrapper?HandlerName=TestCallBack + POST + + { + "Task": "${operation}", + "CaseInstanceId": "${caseId}" + } + + + */* + application/json + + + + + + map("success", true, "message", responsePayload) + + + + + + + + + map("success", false, "message", responsePayload) + + + + + + + \ No newline at end of file diff --git a/CaseFiles/Precompiled/CallMeBack.case b/CaseFiles/Precompiled/CallMeBack.case new file mode 100644 index 0000000..3fd86a0 --- /dev/null +++ b/CaseFiles/Precompiled/CallMeBack.case @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CaseFiles/Precompiled/CallMeBack.dimensions b/CaseFiles/Precompiled/CallMeBack.dimensions new file mode 100644 index 0000000..e53f437 --- /dev/null +++ b/CaseFiles/Precompiled/CallMeBack.dimensions @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/CaseFiles/Precompiled/HelloWorld.case b/CaseFiles/Precompiled/HelloWorld.case new file mode 100644 index 0000000..1a6dc8b --- /dev/null +++ b/CaseFiles/Precompiled/HelloWorld.case @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/CaseFiles/Precompiled/HelloWorld.dimensions b/CaseFiles/Precompiled/HelloWorld.dimensions new file mode 100644 index 0000000..20fffc9 --- /dev/null +++ b/CaseFiles/Precompiled/HelloWorld.dimensions @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/CaseFiles/Precompiled/greeting.cfid b/CaseFiles/Precompiled/greeting.cfid new file mode 100644 index 0000000..66d9875 --- /dev/null +++ b/CaseFiles/Precompiled/greeting.cfid @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/CaseFiles/Precompiled/output.cfid b/CaseFiles/Precompiled/output.cfid new file mode 100644 index 0000000..92887d8 --- /dev/null +++ b/CaseFiles/Precompiled/output.cfid @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/CaseFiles/Precompiled/task.cfid b/CaseFiles/Precompiled/task.cfid new file mode 100644 index 0000000..a401207 --- /dev/null +++ b/CaseFiles/Precompiled/task.cfid @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index bcadd43..0000000 --- a/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM cafienne/service:latest -WORKDIR /opt/cafienne -USER root -COPY src/ /opt/cafienne/ -COPY target/ /opt/cafienne -RUN chown -R daemon:daemon conf/ definitions/ -USER daemon \ No newline at end of file diff --git a/LICENSE b/LICENSE index a612ad9..76a17d7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,373 +1,373 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/README.md b/README.md index 829cd27..b688295 100644 --- a/README.md +++ b/README.md @@ -4,52 +4,33 @@ This repository enables you to quickly setup a Cafienne Demo environment with Do ## Prerequisites -The Cafienne Demo environment consists of a set of Docker images. Make sure you have a running [Docker](https://www.docker.com/) instance available on your system. - -Furthermore you need to have access to the [`Cafienne getting-started`](https://github.com/cafienne/getting-started) repository in Github. - -Please contact info@cafienne.io to arrange the proper access. -Before contacting Cafienne make sure to have a [Github](https://github.com) account. +The Cafienne Demo environment consists of a set of Docker images. Make sure you have a running [Docker](https://www.docker.com/) or [Rancher(moby)](https://rancherdesktop.io/) instance available on your system. +Also make sure VSCode is isntalled. ## Downloading and starting the environment -Next clone this repository from GitHub by running the following command in a terminal: - -``` -# this step puts the code onto your system -git clone https://github.com/cafienne/getting-started.git - -# go into the directory that holds the code -cd ./getting-started - -# tell Docker to spin up the environment - this may take a while the first time you do it -docker-compose up -``` - -This setup is the most default version. This version runs with an in-memory database, which means that whenever you start it, it starts with a blank completely blank environment. Alternatives with e.g. PostgreSQL or Microsoft SQL Server are documented at the [docker configuration](./documentation/docker-configuration.md). - +Open the development container with: [![Open in Remote - Containers](https://img.shields.io/static/v1?label=Remote%20-%20Containers&message=Open&color=blue&logo=visualstudiocode)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/cafienne/getting-started). ## Exposed URLs of the Cafienne Demo environment -After starting up the Cafienne Demo environment, the following URL allow you to access the various parts of the +After starting up the Cafienne Dev container, the following URLs allow you to access the various parts of the environment: -- Cafienne Generic UI: http://localhost:3317 -- Cafienne IDE environment: http://localhost:2081 -- Cafienne API (exposed through Swagger): http://localhost:2027 -- MailCatcher web UI: http://localhost:1080 - +- Cafienne IDE environment: http://localhost:33081 +- Cafienne Generic UI: http://localhost:33080 (login with: employee-eddy/Eddy) +- Cafienne API (exposed through Swagger): http://localhost:33027 (Authorize with: employee-eddy/Eddy) ## Building and deploying a CMMN model ### Creating a model -The Cafienne IDE can be accessed via http://localhost:2081. +The Cafienne IDE can be accessed via http://localhost:33081. In this environment, you can create new CMMN models and deploy them to the engine. +Unit tests can be run using the Mocha extension available in this dev container. ### Deploy existing models to the demo enviroment When you already have existing models built by the Cafienne IDE, you can simply deploy them to this -environment by copying the build CMMN model XML file to the `deployments/definitions` folder in this repository. -The Cafienne Demo environment picks up any valid model that is stored in this folder. +environment by copying the build CMMN model XML file to the `CaseFiles/Precompiled` folder in this repository. +The Cafienne Dev Container picks up any valid model that is stored in this folder. ## Help diff --git a/cafienne-cassandra.yml b/cafienne-cassandra.yml deleted file mode 100644 index f60a60b..0000000 --- a/cafienne-cassandra.yml +++ /dev/null @@ -1,189 +0,0 @@ -# This compose will work with docker 1.13.1+ -# -# To run, call: -# $ docker-compose -f cafienne-cassandra.yml up -# -version: '3.1' -services: - # supporting containers - mailcatcher: - image: schickling/mailcatcher:latest - labels: - component: mta - healthcheck: - test: ["CMD", "wget", "-q", "--spider", "http://mailcatcher:1080"] - interval: 10s - timeout: 5s - retries: 6 - networks: - - dev - expose: - - 1025 - - 1080 - ports: - - "1080:1080" - hostname: mailcatcher - container_name: mailcatcher - - idp: - image: quay.io/dexidp/dex:v2.23.0 - command: ["serve", "/dex-setup.yaml"] - networks: - - dev - expose: - - 5556 - - 5558 - ports: - - "5556:5556" - - "5558:5558" - hostname: idp - container_name: idp - volumes: - - ./src/dex/conf/dex-setup.yaml:/dex-setup.yaml - - ./src/dex/web/:/web/ - - ./run/dex/:/var/dex/ - - postgres: - image: postgres:12.1-alpine - networks: - - dev - expose: - - 5432 - ports: - - "5432:5432" - hostname: postgres - container_name: postgres - environment: - POSTGRES_USER: postgresuser - POSTGRES_PASSWORD: mysecret - POSTGRES_DB: cafienne-query - volumes: - - cassandra-conf-db-data:/var/lib/postgresql/data - - cassandra: - image: cassandra:3.11 - labels: - component: event-store - networks: - - dev - expose: - - 9042 - ports: - - "9042:9042" - hostname: cassandra - container_name: cassandra - volumes: - - cassandra-conf-cs-data:/var/lib/cassandra - healthcheck: - test: ["CMD", "cqlsh", "--execute", "show version;quit"] - interval: 10s - timeout: 5s - retries: 6 - - cafienne-ide: - image: cafienne/ide:latest - labels: - component: cafienne-ide - networks: - - dev - expose: - - 2081 - ports: - - "2081:2081" - hostname: ide - container_name: ide - environment: - BACKEND_API_URL: ${BACKEND_API_URL:-http://cafienne:2027} - volumes: - - ./target/definitions:/usr/src/app/repository_deploy - - ./src/definitions:/usr/src/app/repository - depends_on: - - cafienne - - generic-ui: - image: cafienne/generic-ui:latest - labels: - component: generic-ui - networks: - - dev - ports: - - "28080:80" - hostname: generic-ui - container_name: generic-ui - environment: - NODE_ENV: production - BACKEND_OIDC_HOST: ${BACKEND_OIDC_HOST:-generic-ui} - BACKEND_OIDC_PORT: ${BACKEND_OIDC_PORT:-28080} - BACKEND_DEX_HOST: ${BACKEND_DEX_HOST:-idp} - BACKEND_DEX_PORT: ${BACKEND_DEX_PORT:-5556} - BACKEND_API_HOST: ${BACKEND_API_HOST:-cafienne} - BACKEND_API_PORT: ${BACKEND_API_PORT:-2027} - healthcheck: - test: ["CMD", "curl", "-sS", "-o", "/dev/null", "http://generic-ui/index.html"] - interval: 10s - timeout: 5s - retries: 6 - depends_on: - - cafienne - - idp - - cafienne-ui: - image: cafienne/cafienne-ui:latest - labels: - component: cafienne-ui - networks: - - dev - ports: - - "3317:80" - expose: - - 3317 - hostname: cafienne-ui - container_name: cafienne-ui - environment: - OIDC_URI: ${OIDC_URI:-http://localhost:5556/dex} - OIDC_CLIENT_ID: ${OIDC_CLIENT_ID:-cafienne-ui} - CAFIENNE_URI: ${CAFIENNE_URI:-http://localhost:2027} - depends_on: - - cafienne - - idp - - cafienne: - image: cafienne/engine:latest - labels: - component: cafienne-engine - networks: - - dev - expose: - - 2027 - ports: - - "2027:2027" - hostname: cafienne - container_name: cafienne - healthcheck: - test: ["CMD", "curl", "-sS", "-o", "/dev/null", "http://cafienne:2027/status"] - interval: 10s - timeout: 5s - retries: 6 - environment: - CS_HOST: ${CS_HOST:-cassandra} - PROJECTION_DB_URL: ${PROJECTION_DB_URL:-jdbc:postgresql://postgres:5432/cafienne-query?reWriteBatchedInserts=true} - volumes: - - ./run/cafienne/journal:/opt/cafienne/journal - - ./target/definitions:/opt/cafienne/definitions - - ./src/cassandra-conf:/opt/cafienne/conf - depends_on: - - postgres - - cassandra - - idp - - mailcatcher - -volumes: - cassandra-conf-cs-data: - driver: local - cassandra-conf-db-data: - driver: local - dex: - driver: local -networks: - dev: - driver: bridge diff --git a/cafienne-postgres.yml b/cafienne-postgres.yml deleted file mode 100644 index 3f064cf..0000000 --- a/cafienne-postgres.yml +++ /dev/null @@ -1,196 +0,0 @@ -# This compose will work with docker 1.13.1+ -# -# To run, call: -# $ docker-compose -f cafienne-postgres.yml up -# -version: '3.1' -services: - # supporting containers - mailcatcher: - image: schickling/mailcatcher:latest - labels: - component: mta - healthcheck: - test: ["CMD", "wget", "-q", "--spider", "http://mailcatcher:1080"] - interval: 10s - timeout: 5s - retries: 6 - networks: - - dev - expose: - - 1025 - - 1080 - ports: - - "1080:1080" - hostname: mailcatcher - container_name: mailcatcher - - idp: - image: quay.io/dexidp/dex:v2.23.0 - command: ["serve", "/dex-setup.yaml"] - networks: - - dev - expose: - - 5556 - - 5558 - ports: - - "5556:5556" - - "5558:5558" - hostname: idp - container_name: idp - volumes: - - ./src/dex/conf/dex-setup.yaml:/dex-setup.yaml - - ./src/dex/web/:/web/ - - ./run/dex/:/var/dex/ - - cafienne-event-db: - image: postgres:12.1-alpine - networks: - - dev - expose: - - 5432 - ports: - - "5431:5432" - hostname: cafienne-event-db - container_name: cafienne-event-db - environment: - POSTGRES_USER: postgresuser - POSTGRES_PASSWORD: mysecret - POSTGRES_DB: cafienne-eventstore - volumes: - - postgres-event-db-data:/var/lib/postgresql/data - - cafienne-query-db: - image: postgres:12.1-alpine - networks: - - dev - expose: - - 5432 - ports: - - "5430:5432" - hostname: cafienne-query-db - container_name: cafienne-query-db - environment: - POSTGRES_USER: postgresuser - POSTGRES_PASSWORD: mysecret - POSTGRES_DB: cafienne-query - volumes: - - postgres-query-db-data:/var/lib/postgresql/data - - cafienne-ide: - image: cafienne/ide:latest - labels: - component: cafienne-ide - networks: - - dev - expose: - - 2081 - ports: - - "2081:2081" - hostname: ide - container_name: ide - environment: - BACKEND_API_URL: ${BACKEND_API_URL:-http://cafienne:2027} - volumes: - - ./target/definitions:/usr/src/app/repository_deploy - - ./src/definitions:/usr/src/app/repository - depends_on: - - cafienne - - generic-ui: - image: cafienne/generic-ui:latest - labels: - component: generic-ui - networks: - - dev - ports: - - "28080:80" - hostname: generic-ui - container_name: generic-ui - environment: - NODE_ENV: production - BACKEND_OIDC_HOST: ${BACKEND_OIDC_HOST:-generic-ui} - BACKEND_OIDC_PORT: ${BACKEND_OIDC_PORT:-28080} - BACKEND_DEX_HOST: ${BACKEND_DEX_HOST:-idp} - BACKEND_DEX_PORT: ${BACKEND_DEX_PORT:-5556} - BACKEND_API_HOST: ${BACKEND_API_HOST:-cafienne} - BACKEND_API_PORT: ${BACKEND_API_PORT:-2027} - healthcheck: - test: ["CMD", "curl", "-sS", "-o", "/dev/null", "http://generic-ui/index.html"] - interval: 10s - timeout: 5s - retries: 6 - depends_on: - - cafienne - - idp - - cafienne-ui: - image: cafienne/cafienne-ui:latest - labels: - component: cafienne-ui - networks: - - dev - ports: - - "3317:80" - expose: - - 3317 - hostname: cafienne-ui - container_name: cafienne-ui - environment: - OIDC_URI: ${OIDC_URI:-http://localhost:5556/dex} - OIDC_CLIENT_ID: ${OIDC_CLIENT_ID:-cafienne-ui} - CAFIENNE_URI: ${CAFIENNE_URI:-http://localhost:2027} - depends_on: - - cafienne - - idp - - cafienne: - image: cafienne/engine:latest - labels: - component: cafienne-engine - networks: - - dev - expose: - - 2027 - ports: - - "2027:2027" - hostname: cafienne - container_name: cafienne - healthcheck: - test: ["CMD", "curl", "-sS", "-o", "/dev/null", "http://cafienne:2027/status"] - interval: 10s - timeout: 5s - retries: 6 - environment: - EVENT_DB_URL: ${EVENT_DB_URL:-jdbc:postgresql://cafienne-event-db:5432/cafienne-eventstore?reWriteBatchedInserts=true} - EVENT_DB_PROFILE: ${EVENT_DB_PROFILE:-slick.jdbc.PostgresProfile$} - EVENT_DB_DRIVER: ${EVENT_DB_DRIVER:-org.postgresql.Driver} - EVENT_DB_USER: ${EVENT_DB_USER:-postgresuser} - EVENT_DB_PASSWORD: ${EVENT_DB_PASSWORD:-mysecret} - PROJECTION_DB_PROFILE: ${PROJECTION_DB_PROFILE:-slick.jdbc.PostgresProfile$} - PROJECTION_DB_DRIVER: ${PROJECTION_DB_DRIVER:-org.postgresql.Driver} - PROJECTION_DB_USER: ${PROJECTION_DB_USER:-postgresuser} - PROJECTION_DB_PASSWORD: ${PROJECTION_DB_PASSWORD:-mysecret} - PROJECTION_DB_URL: ${PROJECTION_DB_URL:-jdbc:postgresql://cafienne-query-db:5432/cafienne-query?reWriteBatchedInserts=true} - volumes: - - ./run/cafienne/journal:/opt/cafienne/journal - - ./run/cafienne/logs:/opt/cafienne/logs - - ./src/bootstrap:/opt/cafienne/bootstrap - - ./src/jdbc-conf:/opt/cafienne/conf - - ./target/definitions:/opt/cafienne/definitions - depends_on: - - cafienne-event-db - - cafienne-query-db - - idp - - mailcatcher - -volumes: - postgres-event-db-data: - driver: local - postgres-query-db-data: - driver: local - dex: - driver: local -networks: - dev: - driver: bridge diff --git a/cafienne-sqlserver.yml b/cafienne-sqlserver.yml deleted file mode 100644 index d510727..0000000 --- a/cafienne-sqlserver.yml +++ /dev/null @@ -1,179 +0,0 @@ -# This compose will work with docker 1.13.1+ -# -# To run, call: -# $ docker-compose -f cafienne-sqlserver.yml up -# -version: '3.1' -services: - # supporting containers - mailcatcher: - image: schickling/mailcatcher:latest - labels: - component: mta - healthcheck: - test: ["CMD", "wget", "-q", "--spider", "http://mailcatcher:1080"] - interval: 10s - timeout: 5s - retries: 6 - networks: - - dev - expose: - - 1025 - - 1080 - ports: - - "1080:1080" - hostname: mailcatcher - container_name: mailcatcher - - idp: - image: quay.io/dexidp/dex:v2.23.0 - command: ["serve", "/dex-setup.yaml"] - networks: - - dev - expose: - - 5556 - - 5558 - ports: - - "5556:5556" - - "5558:5558" - hostname: idp - container_name: idp - volumes: - - ./src/dex/conf/dex-setup.yaml:/dex-setup.yaml - - ./src/dex/web/:/web/ - - ./run/dex/:/var/dex/ - - sql-server: - image: batav/circle-ci:sqlserver - labels: - component: cafienne-sql-server - networks: - - dev - expose: - - 1433 - ports: - - "1433:1433" - hostname: sql-server - container_name: sql-server - environment: - SA_PASSWORD: Abc_123456 - ACCEPT_EULA: Y - QUERY_DB: cafienneQuery - EVENT_DB: cafienneEventstore - volumes: - - sqlserver-conf-db-data:/var/opt/mssql/data - - cafienne-ide: - image: cafienne/ide:latest - labels: - component: cafienne-ide - networks: - - dev - expose: - - 2081 - ports: - - "2081:2081" - hostname: ide - container_name: ide - environment: - BACKEND_API_URL: ${BACKEND_API_URL:-http://cafienne:2027} - volumes: - - ./target/definitions:/usr/src/app/repository_deploy - - ./src/definitions:/usr/src/app/repository - depends_on: - - cafienne - - generic-ui: - image: cafienne/generic-ui:latest - labels: - component: generic-ui - networks: - - dev - ports: - - "28080:80" - hostname: generic-ui - container_name: generic-ui - environment: - NODE_ENV: production - BACKEND_OIDC_HOST: ${BACKEND_OIDC_HOST:-generic-ui} - BACKEND_OIDC_PORT: ${BACKEND_OIDC_PORT:-28080} - BACKEND_DEX_HOST: ${BACKEND_DEX_HOST:-idp} - BACKEND_DEX_PORT: ${BACKEND_DEX_PORT:-5556} - BACKEND_API_HOST: ${BACKEND_API_HOST:-cafienne} - BACKEND_API_PORT: ${BACKEND_API_PORT:-2027} - healthcheck: - test: ["CMD", "curl", "-sS", "-o", "/dev/null", "http://generic-ui/index.html"] - interval: 10s - timeout: 5s - retries: 6 - depends_on: - - cafienne - - idp - - cafienne-ui: - image: cafienne/cafienne-ui:latest - labels: - component: cafienne-ui - networks: - - dev - ports: - - "3317:80" - expose: - - 3317 - hostname: cafienne-ui - container_name: cafienne-ui - environment: - OIDC_URI: ${OIDC_URI:-http://localhost:5556/dex} - OIDC_CLIENT_ID: ${OIDC_CLIENT_ID:-cafienne-ui} - CAFIENNE_URI: ${CAFIENNE_URI:-http://localhost:2027} - depends_on: - - cafienne - - idp - - cafienne: - image: cafienne/engine:latest - labels: - component: cafienne-engine - networks: - - dev - expose: - - 2027 - ports: - - "2027:2027" - hostname: cafienne - container_name: cafienne - environment: - EVENT_DB_PROFILE: ${EVENT_DB_PROFILE:-slick.jdbc.SQLServerProfile$} - EVENT_DB_DRIVER: ${EVENT_DB_DRIVER:-com.microsoft.sqlserver.jdbc.SQLServerDriver} - EVENT_DB_USER: ${EVENT_DB_USER:-SA} - EVENT_DB_PASSWORD: ${EVENT_DB_PASSWORD:-Abc_123456} - EVENT_DB_URL: ${EVENT_DB_URL:-jdbc:sqlserver://sql-server:1433;DatabaseName=cafienneEventstore;} - PROJECTION_DB_PROFILE: ${PROJECTION_DB_PROFILE:-slick.jdbc.SQLServerProfile$} - PROJECTION_DB_DRIVER: ${PROJECTION_DB_DRIVER:-com.microsoft.sqlserver.jdbc.SQLServerDriver} - PROJECTION_DB_USER: ${PROJECTION_DB_USER:-SA} - PROJECTION_DB_PASSWORD: ${PROJECTION_DB_PASSWORD:-Abc_123456} - PROJECTION_DB_URL: ${PROJECTION_DB_URL:-jdbc:sqlserver://sql-server:1433;DatabaseName=cafienneQuery;} - volumes: - - ./run/cafienne/journal:/opt/cafienne/journal - - ./run/cafienne/logs:/opt/cafienne/logs - - ./src/bootstrap:/opt/cafienne/bootstrap - - ./src/jdbc-conf:/opt/cafienne/conf - - ./target/definitions:/opt/cafienne/definitions - healthcheck: - test: ["CMD", "curl", "-sS", "-o", "/dev/null", "http://cafienne:2027/status"] - interval: 10s - timeout: 5s - retries: 6 - depends_on: - - sql-server - - idp - - mailcatcher - -volumes: - sqlserver-conf-db-data: - driver: local - dex: - driver: local -networks: - dev: - driver: bridge diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 849d5ba..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,145 +0,0 @@ -# This compose will work with docker 1.13.1+ -# -# To run, call: -# $ docker-compose up -# -version: "3.1" -services: - # supporting containers - mailcatcher: - image: schickling/mailcatcher:latest - labels: - component: mta - healthcheck: - test: ["CMD", "wget", "-q", "--spider", "http://mailcatcher:1080"] - interval: 10s - timeout: 5s - retries: 6 - networks: - - dev - expose: - - 1025 - - 1080 - ports: - - "1080:1080" - hostname: mailcatcher - container_name: mailcatcher - - idp: - image: quay.io/dexidp/dex:v2.23.0 - command: ["serve", "/dex-setup.yaml"] - networks: - - dev - expose: - - 5556 - - 5558 - ports: - - "5556:5556" - - "5558:5558" - hostname: idp - container_name: idp - volumes: - - ./src/dex/conf/dex-setup.yaml:/dex-setup.yaml - - ./src/dex/web/:/web/ - - ./run/dex/:/var/dex/ - - cafienne-ide: - image: cafienne/ide:latest - labels: - component: cafienne-ide - networks: - - dev - expose: - - 2081 - ports: - - "2081:2081" - hostname: ide - container_name: ide - environment: - BACKEND_API_URL: ${BACKEND_API_URL:-http://cafienne:2027} - volumes: - - ./target/definitions:/usr/src/app/repository_deploy - - ./src/definitions:/usr/src/app/repository - depends_on: - - cafienne - - generic-ui: - image: cafienne/generic-ui:latest - labels: - component: generic-ui - networks: - - dev - ports: - - "28080:80" - hostname: generic-ui - container_name: generic-ui - environment: - NODE_ENV: production - BACKEND_OIDC_HOST: ${BACKEND_OIDC_HOST:-generic-ui} - BACKEND_OIDC_PORT: ${BACKEND_OIDC_PORT:-28080} - BACKEND_DEX_HOST: ${BACKEND_DEX_HOST:-idp} - BACKEND_DEX_PORT: ${BACKEND_DEX_PORT:-5556} - BACKEND_API_HOST: ${BACKEND_API_HOST:-cafienne} - BACKEND_API_PORT: ${BACKEND_API_PORT:-2027} - healthcheck: - test: ["CMD", "curl", "-sS", "-o", "/dev/null", "http://generic-ui/index.html", ] - interval: 10s - timeout: 5s - retries: 6 - depends_on: - - cafienne - - idp - - cafienne-ui: - image: cafienne/cafienne-ui:latest - labels: - component: cafienne-ui - networks: - - dev - ports: - - "3317:80" - expose: - - 3317 - hostname: cafienne-ui - container_name: cafienne-ui - environment: - OIDC_URI: ${OIDC_URI:-http://localhost:5556/dex} - OIDC_CLIENT_ID: ${OIDC_CLIENT_ID:-cafienne-ui} - CAFIENNE_URI: ${CAFIENNE_URI:-http://localhost:2027} - depends_on: - - cafienne - - idp - - cafienne: - image: cafienne/engine:latest - labels: - component: cafienne-engine - networks: - - dev - expose: - - 2027 - ports: - - "2027:2027" - hostname: cafienne - container_name: cafienne - healthcheck: - test: ["CMD", "curl", "-sS", "-o", "/dev/null", "http://cafienne:2027/status"] - interval: 10s - timeout: 5s - retries: 6 - volumes: - - ./run/cafienne/journal:/opt/cafienne/journal - - ./run/cafienne/logs:/opt/cafienne/logs - - ./target/definitions:/opt/cafienne/definitions - - ./src/conf:/opt/cafienne/conf - - ./src/bootstrap:/opt/cafienne/bootstrap - depends_on: - - idp - - mailcatcher - -volumes: - dex: - driver: local -networks: - dev: - driver: bridge diff --git a/documentation/demo-architecture.md b/documentation/demo-architecture.md deleted file mode 100644 index 5af726c..0000000 --- a/documentation/demo-architecture.md +++ /dev/null @@ -1 +0,0 @@ -# Cafienne Demo Environment Overview diff --git a/documentation/docker-configuration.md b/documentation/docker-configuration.md deleted file mode 100644 index 983e4af..0000000 --- a/documentation/docker-configuration.md +++ /dev/null @@ -1,90 +0,0 @@ -# Docker configuration - - -## Contents - - [Introduction](#introduction) - - [Starting the images](#starting-the-images) - - [Persistence in the Cafienne Demo environment](#persistence-in-the-cafienne-demo-environment) - - [Storing events in Cassandra and data in PostgreSQL](#storing-events-in-cassandra-and-data-in-postgresql) - - [Storing both events and data in PostgreSQL](#storing-both-events-and-data-in-postgresql) - - [Storing both events and data in Microsoft SQL Server](#storing-both-events-and-data-in-microsoft-sql-server) - - [Some other Docker commands](#some-other-docker-commands) - - [Example commands](#example-commands) - - -## Introduction -This page gives some explanation on the use of Docker with the Cafienne Demo environment - - - Download a recent version of [Docker Desktop](https://www.docker.com/products/docker-desktop) - - Ensure your Docker is using at least 4G of memory (`Docker -> Resources ... -> Advanced`) - - Ensure your local drive can be mounted into Docker containers (`Docker -> Resources ... -> File Sharing`) - - -## Starting the images -The Cafienne Demo environment spins up a set of `Docker` images from a [YAML](https://en.wikipedia.org/wiki/YAML) file. -The YAML file tells the images to work together. -You can start the environment with the following command - -``` -docker-compose up -``` -This will tell `Docker` to start with the default `docker-compose.yml` file. - -Alternatively you can tell `Docker` to start with a specific `YAML` file with the `docker-compose -f` option. - -## Persistence in the Cafienne Demo environment - -The `getting-started` repository comes with a few alternatives for persistence. Events and Data are stored in 2 different database schemas. The [architecture documentation](demo-architecture.md) of the Cafienne Demo environment explains this in more detail. - -- [Apache Cassandra](https://cassandra.apache.org/) is an append-only database, and is optimized for fast storage of events. -- [PostgreSQL](https://www.postgresql.org/) is a well known open source RDBMS. It can be used both for storage of events and data. -- [Microsoft SQL Server](https://www.microsoft.com/sql-server/) is a commercial alternative to PostgreSQL. - -#### Storing events in Cassandra and data in PostgreSQL -``` -docker-compose -f "cafienne-cassandra.yml" up -``` - -#### Storing both events and data in PostgreSQL -``` -docker-compose -f "cafienne-postgres.yml" up -``` - -#### Storing both events and data in Microsoft SQL Server -``` -docker-compose -f "cafienne-sqlserver.yml" up -``` - -If you are comfortable with `docker-compose`, feel free to look into the yaml files and make your own composition. - -## Some other Docker commands -Sometimes `Cafienne` publishes new versions of the Docker images. -Through `docker-compose pull` you can retrieve the latest [`Cafienne images`](https://hub.docker.com/orgs/cafienne/repositories) from [Docker Hub](https://hub.docker.com). - -#### Examples -``` -# Spin up the environment in detached mode. Will return the console to you -docker-compose up -d - -# bring down the environment -docker-compose stop - -# refresh the images and download latest versions from https://hub.docker.com -docker-compose pull - - -# Bring up the for the Cassandra/PostgreSQL setup -docker-compose -f "cafienne-cassandra.yml" stop -docker-compose -f "cafienne-cassandra.yml" pull -docker-compose -f "cafienne-cassandra.yml" up - -# refresh the images for the PostgreSQL setup -docker-compose -f "cafienne-postgres.yml" stop -docker-compose -f "cafienne-postgres.yml" pull -docker-compose -f "cafienne-postgres.yml" up - -# refresh the images for the Microsoft SQL Server setup -docker-compose -f "cafienne-sqlserver.yml" stop -docker-compose -f "cafienne-sqlserver.yml" pull -docker-compose -f "cafienne-sqlserver.yml" up -``` diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..100c50b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3535 @@ +{ + "name": "CafienneGettingStarted", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "CafienneGettingStarted", + "version": "1.0.0", + "dependencies": { + "@cafienne/typescript-client": "^0.6.1", + "express": "^4.17.1", + "server-destroy": "1.0.1" + }, + "devDependencies": { + "@types/express": "^4.17.13", + "@types/mocha": "9.1.0", + "@types/node": "13.5.0", + "@types/server-destroy": "^1.0.1", + "mocha": "9.1.4", + "ts-node": "10.9.1", + "typescript": "4.5.4" + } + }, + "node_modules/@cafienne/typescript-client": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@cafienne/typescript-client/-/typescript-client-0.6.1.tgz", + "integrity": "sha512-Da+j+PhQ96TN1LHc6QfGlMulnfl/8EO0TN2lE8JHOYVD8Qljq0xqLYb3L8oxF6jfDh3uX3Q3vnkusq852qkTHQ==", + "dependencies": { + "express": "^4.17.1", + "isomorphic-fetch": "^2.2.1", + "poll-until-promise": "^4.0.4", + "server-destroy": "1.0.1", + "ts-node-dev": "^1.1.8", + "typescript": "^3.7.4", + "xmldom": "0.6.0" + } + }, + "node_modules/@cafienne/typescript-client/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.30", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", + "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "dev": true + }, + "node_modules/@types/node": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.5.0.tgz", + "integrity": "sha512-Onhn+z72D2O2Pb2ql2xukJ55rglumsVo1H6Fmyi8mlU9SvKdBk/pUSUAiBY/d9bAOF7VVWajX3sths/+g6ZiAQ==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dev": true, + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-77QGr7waZbE0Y0uF+G+uH3H3SmhyA78Jf2r5r7QSrpg0U3kSXduWpGjzP9PvPLR/KCy+kHjjpnugRHsYTnHopg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==" + }, + "node_modules/@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==" + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/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://registry.npmjs.org/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/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/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://registry.npmjs.org/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/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/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://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", + "dependencies": { + "xtend": "^4.0.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/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://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/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/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "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==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.4.tgz", + "integrity": "sha512-+q2aV5VlJZuLgCWoBvGI5zEwPF9eEI0kr/sAA9Jm4xMND7RfIEyF8JE7C0JIg8WXRG+P1sdIAb5ccoHPlXLzcw==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.2", + "debug": "4.3.2", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.25", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/poll-until-promise": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/poll-until-promise/-/poll-until-promise-4.1.0.tgz", + "integrity": "sha512-FQX3Ntdl2pEE8VL2hdkvH1zpsIHChVKJQE8nMpOjv52/2Jp1Vv+Qvjz8Jm6MxbPnq6nNy7z/iZW637YGZqnkpg==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "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==", + "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==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/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://registry.npmjs.org/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-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/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/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node-dev": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-1.1.8.tgz", + "integrity": "sha512-Q/m3vEwzYwLZKmV6/0VlFxcZzVV/xcgOt+Tx/VjaaRHyiBcFlV0541yrT09QjzzCxlDZ34OzKjrFAynlmtflEg==", + "dependencies": { + "chokidar": "^3.5.1", + "dynamic-dedupe": "^0.3.0", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "resolve": "^1.0.0", + "rimraf": "^2.6.1", + "source-map-support": "^0.5.12", + "tree-kill": "^1.2.2", + "ts-node": "^9.0.0", + "tsconfig": "^7.0.0" + }, + "bin": { + "ts-node-dev": "lib/bin.js", + "tsnd": "lib/bin.js" + }, + "engines": { + "node": ">=0.8.0" + }, + "peerDependencies": { + "node-notifier": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/ts-node-dev/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/ts-node-dev/node_modules/ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dependencies": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + } + }, + "node_modules/tsconfig/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/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/workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/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://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/xmldom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz", + "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@cafienne/typescript-client": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@cafienne/typescript-client/-/typescript-client-0.6.1.tgz", + "integrity": "sha512-Da+j+PhQ96TN1LHc6QfGlMulnfl/8EO0TN2lE8JHOYVD8Qljq0xqLYb3L8oxF6jfDh3uX3Q3vnkusq852qkTHQ==", + "requires": { + "express": "^4.17.1", + "isomorphic-fetch": "^2.2.1", + "poll-until-promise": "^4.0.4", + "server-destroy": "1.0.1", + "ts-node-dev": "^1.1.8", + "typescript": "^3.7.4", + "xmldom": "0.6.0" + }, + "dependencies": { + "typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==" + } + } + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.30", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", + "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "dev": true + }, + "@types/mocha": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "dev": true + }, + "@types/node": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.5.0.tgz", + "integrity": "sha512-Onhn+z72D2O2Pb2ql2xukJ55rglumsVo1H6Fmyi8mlU9SvKdBk/pUSUAiBY/d9bAOF7VVWajX3sths/+g6ZiAQ==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-77QGr7waZbE0Y0uF+G+uH3H3SmhyA78Jf2r5r7QSrpg0U3kSXduWpGjzP9PvPLR/KCy+kHjjpnugRHsYTnHopg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==" + }, + "@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==" + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", + "requires": { + "xtend": "^4.0.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "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==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "mocha": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.4.tgz", + "integrity": "sha512-+q2aV5VlJZuLgCWoBvGI5zEwPF9eEI0kr/sAA9Jm4xMND7RfIEyF8JE7C0JIg8WXRG+P1sdIAb5ccoHPlXLzcw==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.2", + "debug": "4.3.2", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.25", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "poll-until-promise": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/poll-until-promise/-/poll-until-promise-4.1.0.tgz", + "integrity": "sha512-FQX3Ntdl2pEE8VL2hdkvH1zpsIHChVKJQE8nMpOjv52/2Jp1Vv+Qvjz8Jm6MxbPnq6nNy7z/iZW637YGZqnkpg==" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "ts-node-dev": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-1.1.8.tgz", + "integrity": "sha512-Q/m3vEwzYwLZKmV6/0VlFxcZzVV/xcgOt+Tx/VjaaRHyiBcFlV0541yrT09QjzzCxlDZ34OzKjrFAynlmtflEg==", + "requires": { + "chokidar": "^3.5.1", + "dynamic-dedupe": "^0.3.0", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "resolve": "^1.0.0", + "rimraf": "^2.6.1", + "source-map-support": "^0.5.12", + "tree-kill": "^1.2.2", + "ts-node": "^9.0.0", + "tsconfig": "^7.0.0" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + } + } + }, + "tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "requires": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + } + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typescript": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "xmldom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz", + "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..932a7c1 --- /dev/null +++ b/package.json @@ -0,0 +1,37 @@ +{ + "name": "CafienneGettingStarted", + "version": "1.0.0", + "description": "Development setup for Cafienne", + "main": "", + "scripts": { + "test": "mocha --exit ./test/**/*.ts", + "build": "mocha --dry-run ./test/**/*.ts", + "startcafienne": "docker compose --file .\\test\\docker\\docker-compose.yml up -d", + "stopcafienne": "docker compose --file .\\test\\docker\\docker-compose.yml down", + "viewCafiennelogs": "docker compose --file .\\test\\docker\\docker-compose.yml logs -f", + "cafienneIDE": "explorer http://localhost:33081/", + "cafienneUI": "explorer http://localhost:33080/", + "cafienneAPI": "explorer http://localhost:33027/" + }, + "author": "", + "dependencies": { + "@cafienne/typescript-client": "^0.6.1", + "express": "^4.17.1", + "server-destroy": "1.0.1" + }, + "devDependencies": { + "@types/express": "^4.17.13", + "@types/mocha": "9.1.0", + "@types/node": "13.5.0", + "@types/server-destroy": "^1.0.1", + "mocha": "9.1.4", + "typescript": "4.5.4", + "ts-node": "10.9.1" + }, + "mocha": { + "timeout": 30000, + "require": [ + "./test/support/ts-node-register.js" + ] + } +} diff --git a/src/cassandra-conf/local.conf b/src/cassandra-conf/local.conf deleted file mode 100644 index 43685e2..0000000 --- a/src/cassandra-conf/local.conf +++ /dev/null @@ -1,630 +0,0 @@ -################################################################################################## -## ## -## Default configurations to use ## -## - Cassandra for storing events ## -## - PostgreSQL for building up projections database for case queries ## -## ## -## Some of the settings can be passed as environment variables ## -## ## -################################################################################################## -akka { - loglevel = INFO - loggers = ["akka.event.slf4j.Slf4jLogger"] - logger-startup-timeout = 10s - - actor { - serialize-messages = on - - serializers { - cafienne_serializer = "org.cafienne.infrastructure.serialization.CafienneSerializer" - } - serialization-bindings { - "org.cafienne.infrastructure.serialization.CafienneSerializable" = cafienne_serializer - } - } - - persistence { - journal { - # DO NOT USE LEVELDB FOR A MULTI NODE SETUP !!! - # NOTE: Default journal is leveldb, as it comes out of the box without setup. - # However, this cannot be used in production or in a multi-node setup. - # In that case, the cassandra-journal has to be enabled. - #plugin = "akka.persistence.journal.leveldb" - plugin = "cassandra-journal" - auto-start-journals = ["cassandra-journal"] - - # Default configuration for leveldb storage of events. - # Cassandra configuration is at the end of this file - leveldb { - store { - # DO NOT USE 'native = off' IN PRODUCTION !!! - native = off - dir = "journal" - } - - event-adapters { - tagging = "org.cafienne.actormodel.tagging.CaseTaggingEventAdapter" - } - - event-adapter-bindings { - "org.cafienne.actormodel.event.ModelEvent" = tagging - } - } - } - - snapshot-store { - # Path to the snapshot store plugin to be used - plugin = cassandra-snapshot-store - #plugin = "akka.persistence.snapshot-store.local" - - # Local filesystem snapshot store plugin. - local { - - # Class name of the plugin. - class = "akka.persistence.snapshot.local.LocalSnapshotStore" - - # Dispatcher for the plugin actor. - plugin-dispatcher = "akka.persistence.dispatchers.default-plugin-dispatcher" - - # Dispatcher for streaming snapshot IO. - stream-dispatcher = "akka.persistence.dispatchers.default-stream-dispatcher" - - # Storage location of snapshot files. - dir = "snapshots" - } - } - } -} - -cafienne { - # Engine wide platform settings - platform { - # Platform has owners that are allowed to create/disable/enable tenants - # This property specifies the set of user-id's that are owners - # This array may not be empty. - owners = ["admin", "CgVhZG1pbhIFbG9jYWw"] - owners = ${?CAFIENNE_PLATFORM_OWNERS} - # Default tenant will be used when a user does not provide the tenant as a parameter to - # the API call (e.g. in StartCase). When the user is member of only one tenant, - # then that tenant will be submitted along with the StartCase command. - # If the user belongs to multiple tenants, then this default-tenant option will be passed. - default-tenant = "world" - default-tenant = ${?CAFIENNE_PLATFORM_DEFAULT_TENANT} - # bootstrap-file holds a reference to a json or yaml file that has default tenant information. - # E.g., tenant name, tenant owners, tenant users can be given in this file. - # During launch of the case engine, the file will be scanned and a special CreateTenant command is sent - # into the system, thereby setting up a default tenant with owners and users. - # The bootstrap configuration will search for this file, and try to parse it into a standard akka Config - # object. - # If the bootstrap-file property is not filled, the system will search for a file that holds - # the default tenant name plus either a .conf, .json, .yml or .yaml extension. - # In case of tenant 'world', the system would search for existence in the following order: - # - 'world.conf' - # - 'world.json' - # - 'world.yml' - # - 'world.yaml' - # If none of these files are found, the bootstrap attempt will be skipped. - bootstrap-file = "bootstrap/world.tenant.conf" - } - - engine { - # Properties for sending tasks of type Mail - mail-service { - # Here you can fill any regular javax.mail properties - # All properties mentioned here are passed into the connection with the mail server - mail.host = mailcatcher - mail.smtp.port = 1025 - # Optional username/pwd to be used to connect to the mail server - authentication { - user = "" - password = "" - } - } - } - - api { - bindhost = "0.0.0.0" - bindport = 2027 - - security { - # configuration settings for OpenID Connect - oidc { - connect-url = "http://localhost:5556/dex/.well-known/openid-configuration" - connect-url = ${?CAFIENNE_OIDC_CONNECT_URL} - token-url = "http://127.0.0.1:5556/dex/token" - token-url = ${?CAFIENNE_OIDC_TOKEN_URL} - key-url = "http://idp:5556/dex/keys" - key-url = ${?CAFIENNE_OIDC_KEY_URL} - authorization-url = "http://127.0.0.1:5556/dex/auth" - authorization-url = ${?CAFIENNE_OIDC_AUTHORIZATION_URL} - issuer = "http://localhost:5556/dex" - issuer = ${?CAFIENNE_OIDC_ISSUER} - } - - ################################################################################################### - ## ## - ## Fill this setting to true to allow developers to access engine events without authentication ## - ## ## - ## WARNING - Enabling opens up the full engine in read-only mode for anyone to access ## - ## ## - ################################################################################################### - debug.events.open = false - debug.events.open = ${?CAFIENNE_DEBUG_EVENTS} - } - } - - # The case engine reads definitions as XML files from disk and/or the classpath. - # The files are cached in-memory, based on their lastModified timestamp - # (i.e., if you change a file on disk, the engine will reload it into the cache). - # By default, the engine will read from the configured location. If the definitions file cannot be found - # in this location, the engine will try to load it as a resource from the classpath, hence enabling to ship - # fixed definitions in a jar file. - definitions { - provider = "org.cafienne.cmmn.repository.file.FileBasedDefinitionProvider" - location = "./definitions" - location = ${?CAFIENNE_CMMN_DEFINITIONS_PATH} - cache { - size = 100 - } - } - - actor { - # the seconds of idle time after which a case actor is removed from akka memory - # if the case has not received new commands after the specified number of seconds, - # the case engine will ask akka to remove the case from memory to avoid memory leaks. - idle-period = 600 - - # If debug is true, then all StartCase commands by default will run in debug mode, - # unless specified otherwise in the command - debug = false - } - - query-db { - # This setting tells cafienne which journal to use for reading events. - # If this omitted, cafienne will try to guess the read journal, based on the akka settings - read-journal = "cassandra-query-journal" - - profile = "slick.jdbc.PostgresProfile$" - profile = ${?PROJECTION_DB_PROFILE} - db { - driver = "org.postgresql.Driver" - driver = ${?PROJECTION_DB_DRIVER} - ################################################################### - ## ## - ## Database schema 'cafienne-query' must be created manually ## - ## ## - ################################################################### - url = "jdbc:postgresql://localhost:5432/cafienne-query?reWriteBatchedInserts=true" - url = ${PROJECTION_DB_URL} - - ################################################################### - ## ## - ## MAKE SURE TO FILL USER AND PASSWORD FOR CONNECTION ## - ## ## - ################################################################### - user = "postgresuser" - user = ${?PROJECTION_DB_USER} - password = "mysecret" - password = ${?PROJECTION_DB_PASSWORD} - numThreads = 10 - connectionTimeout = 5000 - validationTimeout = 5000 - } - } -} - -#################################################################################### -## ## -## Below are settings for Akka Event Storage for Cassandra ## -## ## -#################################################################################### -cassandra-journal { - - event-adapters { - tagging = "org.cafienne.actormodel.tagging.CaseTaggingEventAdapter" - } - - event-adapter-bindings { - "org.cafienne.actormodel.event.ModelEvent" = tagging - } - - events-by-tag { - query-plugin = cassandra-query-journal - } - - # FQCN of the cassandra journal plugin - class = "akka.persistence.cassandra.journal.CassandraJournal" - - # Comma-separated list of contact points in the Cassandra cluster. - # Host:Port pairs are also supported. In that case the port parameter will be ignored. - contact-points = [${CS_HOST}] - - # Port of contact points in the Cassandra cluster. - # Will be ignored if the contact point list is defined by host:port pairs. - port = 9042 - - # The implementation of akka.persistence.cassandra.SessionProvider - # is used for creating the Cassandra Session. By default the - # the ConfigSessionProvider is building the Cluster from configuration properties - # but it is possible to replace the implementation of the SessionProvider - # to reuse another session or override the Cluster builder with other - # settings. - # For example, it is possible to lookup the contact points of the Cassandra cluster - # asynchronously instead of giving them in the configuration in a subclass of - # ConfigSessionProvider and overriding the lookupContactPoints method. - # It may optionally have a constructor with an ActorSystem and Config parameter. - # The config parameter is this config section of the plugin. - session-provider = akka.persistence.cassandra.ConfigSessionProvider - - # The identifier that will be passed as parameter to the - # ConfigSessionProvider.lookupContactPoints method. - cluster-id = "" - - # Name of the keyspace to be created/used by the journal - keyspace = "akka" - - # Parameter indicating whether the journal keyspace should be auto created - keyspace-autocreate = true - - # Parameter indicating whether the journal tables should be auto created - tables-autocreate = true - - # The number of retries when a write request returns a TimeoutException or an UnavailableException. - write-retries = 3 - - # Deletes are achieved using a metadata entry and then the actual messages are deleted asynchronously - # Number of retries before giving up - delete-retries = 3 - - # Number of retries before giving up connecting for the initial connection to the Cassandra cluster - connect-retries = 3 - - # Delay between connection retries, for the initial connection to the Cassandra cluster - connect-retry-delay = 30s - - # Max delay of the ExponentialReconnectionPolicy that is used when reconnecting - # to the Cassandra cluster - reconnect-max-delay = 30s - - # Cassandra driver connection pool settings - # Documented at https://datastax.github.io/java-driver/manual/pooling/ - connection-pool { - - # Create new connection threshold local - new-connection-threshold-local = 800 - - # Create new connection threshold remote - new-connection-threshold-remote = 200 - - # Connections per host core local - connections-per-host-core-local = 1 - - # Connections per host max local - connections-per-host-max-local = 4 - - # Connections per host core remote - connections-per-host-core-remote = 1 - - # Connections per host max remote - connections-per-host-max-remote = 4 - - # Max requests per connection local - max-requests-per-connection-local = 32768 - - # Max requests per connection remote - max-requests-per-connection-remote = 2000 - - # Sets the timeout when trying to acquire a connection from a host's pool - pool-timeout-millis = 0 - } - - # Name of the table to be created/used by the journal. - # If the table doesn't exist it is automatically created. - table = "messages" - - # Compaction strategy for the journal table. - # Please refer to the tests for example configurations. - # Refer to http://docs.datastax.com/en/cql/3.1/cql/cql_reference/compactSubprop.html - # for more information regarding the properties. - table-compaction-strategy { - class = "SizeTieredCompactionStrategy" - } - - # Name of the table to be created/used for storing metadata. - # If the table doesn't exist it is automatically created. - metadata-table = "metadata" - - # Name of the table to be created/used for journal config. - # If the table doesn't exist it is automatically created. - config-table = "config" - - # Set this to on to only use Cassandra 2.x compatible features, - # i.e. if you are using a Cassandra 2.x server. - # To run tests with Cassandra 2.x server you have to do the following: - # - start Cassandra 2.x server on default port 9042, with empty data directory - # - change CassandraLauncher.randomPort to 9042 - # - change CassandraLauncher.start to do nothing - # - set this cassandra-2x-compat = on - # - note that you must delete all data between each test run - cassandra-2x-compat = off - - # Possibility to disable the eventsByTag query and creation of - # the materialized view. This will automatically be off when - # cassandra-2x-compat=on - enable-events-by-tag-query = on - - # Name of the materialized view for eventsByTag query - events-by-tag-view = "eventsbytag" - - # replication strategy to use. SimpleStrategy or NetworkTopologyStrategy - replication-strategy = "SimpleStrategy" - - # Replication factor to use when creating a keyspace. Is only used when replication-strategy is SimpleStrategy. - replication-factor = 1 - - # Replication factor list for data centers, e.g. ["dc1:3", "dc2:2"]. Is only used when replication-strategy is NetworkTopologyStrategy. - data-center-replication-factors = [] - - # To limit the Cassandra hosts this plugin connects with to a specific datacenter. - # (DCAwareRoundRobinPolicy withLocalDc) - # The id for the local datacenter of the Cassandra hosts it should connect to. - # By default, this property is not set resulting in Datastax's standard round robin policy being used. - local-datacenter = "" - - # Number of hosts from non-local datacenter to use as a fall-back policy. - # Works only when local-datacenter is set - used-hosts-per-remote-dc = 0 - - # To connect to the Cassandra hosts with credentials. - # Authentication is disabled if username is not configured. - authentication.username = "" - authentication.password = "" - - # SSL can be configured with the following properties. - # SSL is disabled if the truststore is not configured. - # For detailed instructions, please refer to the DataStax Cassandra chapter about - # SSL Encryption: http://docs.datastax.com/en/cassandra/2.0/cassandra/security/secureSslEncryptionTOC.html - # Path to the JKS Truststore file - ssl.truststore.path = "" - # Password to unlock the JKS Truststore - ssl.truststore.password = "" - # Path to the JKS Keystore file (optional config, only needed for client authentication) - ssl.keystore.path = "" - # Password to unlock JKS Truststore and access the private key (both must use the same password) - ssl.keystore.password = "" - - # Write consistency level - # The default read and write consistency levels ensure that persistent actors can read their own writes. - # During normal operation, persistent actors only write to the journal, reads occur only during recovery. - write-consistency = "QUORUM" - - # Read consistency level - read-consistency = "QUORUM" - - # Maximum number of messages that will be batched when using `persistAsync`. - # Also used as the max batch size for deletes. - max-message-batch-size = 100 - - # Target number of entries per partition (= columns per row). - # Must not be changed after table creation (currently not checked). - # This is "target" as AtomicWrites that span partition boundaries will result in bigger partitions to ensure atomicity. - target-partition-size = 500000 - - # Maximum size of result set - max-result-size = 50001 - - # Maximum size of result set during replay - max-result-size-replay = 50001 - - # The query journal to use when recoverying - query-plugin = "cassandra-query-journal" - - # Dispatcher for the plugin actor. - plugin-dispatcher = "cassandra-plugin-default-dispatcher" - - # Dispatcher for potentially blocking tasks. - blocking-dispatcher = "cassandra-plugin-blocking-dispatcher" - - # The time to wait before cassandra will remove the thombstones created for deleted entries. - # cfr. gc_grace_seconds table property documentation on http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/tabProp.html - gc-grace-seconds = 864000 - - # When using more than one tag per event you have to configure know - # tags in this section to give each tag an identifier. When using - # only one tag per event the identifier is 1, automatically. - # tagname = tagid - # where tagid must be 1, 2, or 3. Max 3 tags per event is supported. - # For example: - # BlogPosts = 1 - # Announcement = 2 - # Authors = 1 - # With those tag identifiers you can use BlogPosts and Announcement for a single event, - # but you cannot combine BlogPosts and Authors, since they have the same tag identifier. - tags { - } - - # Minimum time between publishing messages to DistributedPubSub to announce events for a specific tag have - # been written. These announcements cause any ongoing getEventsByTag to immediately re-poll, rather than - # wait. In order enable this feature, make the following settings: - # - # - enable clustering for your actor system - # - cassandra-journal.pubsub-minimum-interval = 1s (send real-time announcements at most every sec) - # - cassandra-query-journal.eventual-consistency-delay = 0s (so it immediately tries to show changes) - # - # Setting pubsub-minimum-interval to "off" will disable the journal sending these announcements. - pubsub-minimum-interval = off - - # Set the protocol version explicitly, should only be used for compatibility testing. - # Supported values: 3, 4 - protocol-version = "" -} - -# This configures the default settings for all CassandraReadJournal plugin -# instances in the system. -# -# If you use multiple plugin instances you need to create differently named -# sections containing only those settings that shall be different from the defaults -# configured here, importing the defaults like so: -# -# my-cassandra-query-journal = ${cassandra-query-journal} -# my-cassandra-query-journal { -# -# } -cassandra-query-journal { - # Implementation class of the Cassandra ReadJournalProvider - class = "akka.persistence.cassandra.query.CassandraReadJournalProvider" - - # Absolute path to the write journal plugin configuration section - write-plugin = "cassandra-journal" - - # New events are retrieved (polled) with this interval. - refresh-interval = 1s - - # How many events to fetch in one query (replay) and keep buffered until they - # are delivered downstreams. - max-buffer-size = 500 - - # The fetch size of the Cassandra select statement - # Value less or equal to 0 means max-result-size will be used - # http://docs.datastax.com/en/drivers/java/3.0/com/datastax/driver/core/Statement.html - max-result-size-query = 250 - - # Read consistency level - read-consistency = "QUORUM" - - # The number of retries when a read query fails. - read-retries = 3 - - # Configure this to the first bucket eventByTag queries will start from in the format - # yyyyMMddTHH:mm yyyyMMdd is also supported if using Day as a bucket size - # Will be rounded down to the start of whatever time bucket it falls into - # When NoOffset is used it will look for events from this day and forward. - # First time bucket dramatically improves startup performance if projections starts freshly with NoOffset - first-time-bucket = "20200101T00:00" - - session-provider = "akka.cassandra.session.DefaultSessionProvider" - session-name = "" - - # Absolute path to the write journal plugin configuration section - write-plugin = "cassandra-journal" - read-profile = "cassandra-journal" - - # NOTE: Setting refresh-interval to less than 2 seconds is not recommended. - refresh-interval = 100ms - - events-by-tag { - refresh-interval = 100ms - # Setting this to anything lower than 2s is highly discouraged. - # In a developer system for just dev&test it is fine. - eventual-consistency-delay = 100ms - } - - # The returned event stream is ordered by the offset (timestamp), which corresponds - # to the same order as the write journal stored the events, with inaccuracy due to clock skew - # between different nodes. The same stream elements (in same order) are returned for multiple - # executions of the query on a best effort basis. The query is using a Cassandra Materialized - # View for the query and that is eventually consistent, so different queries may see different - # events for the latest events, but eventually the result will be ordered by timestamp - # (Cassandra timeuuid column). To compensate for the the eventual consistency the query is - # delayed to not read the latest events, the duration of this delay is defined by this - # configuration property. - # However, this is only best effort and in case of network partitions - # or other things that may delay the updates of the Materialized View the events may be - # delivered in different order (not strictly by their timestamp). - eventual-consistency-delay = 1s - - # If you use the same tag for all events for a `persistenceId` it is possible to get - # a more strict delivery order than otherwise. This can be useful when all events of - # a PersistentActor class (all events of all instances of that PersistentActor class) - # are tagged with the same tag. Then the events for each `persistenceId` can be delivered - # strictly by sequence number. If a sequence number is missing the query is delayed up - # to the configured `delayed-event-timeout` and if the expected event is still not - # found the stream is completed with failure. This means that there must not be any - # holes in the sequence numbers for a given tag, i.e. all events must be tagged - # with the same tag. Set this property to for example 30s to enable this feature. - # It is disabled by default. - delayed-event-timeout = 0s - - # Dispatcher for the plugin actors. - plugin-dispatcher = "cassandra-plugin-default-dispatcher" -} - -cassandra-snapshot-store { - - # FQCN of the cassandra snapshot store plugin - class = "akka.persistence.cassandra.snapshot.CassandraSnapshotStore" - - # Comma-separated list of contact points in the cluster - contact-points = [${CS_HOST}] - - # Port of contact points in the cluster - port = 9042 - - # Name of the keyspace to be created/used by the snapshot store - keyspace = "akka_snapshot" - - # Parameter indicating whether the snapshot keyspace should be auto created - keyspace-autocreate = true - - # In case that schema creation failed you can define a number of retries before giving up. - keyspace-autocreate-retries = 1 - - # Number of retries before giving up connecting to the cluster - connect-retries = 3 - - # Delay between connection retries - connect-retry-delay = 5s - - # Name of the table to be created/used by the snapshot store - table = "snapshots" - - # Compaction strategy for the snapshot table - table-compaction-strategy { - class = "SizeTieredCompactionStrategy" - } - - # Name of the table to be created/used for journal config - config-table = "config" - - # Name of the table to be created/used for storing metadata - metadata-table = "metadata" - - # replication strategy to use. SimpleStrategy or NetworkTopologyStrategy - replication-strategy = "SimpleStrategy" - - # Replication factor to use when creating a keyspace. Is only used when replication-strategy is SimpleStrategy. - replication-factor = 1 - - # Replication factor list for data centers, e.g. ["dc1:3", "dc2:2"]. Is only used when replication-strategy is NetworkTopologyStrategy. - data-center-replication-factors = [] - - # Write consistency level - write-consistency = "ONE" - - # Read consistency level - read-consistency = "ONE" - - # Maximum number of snapshot metadata to load per recursion (when trying to - # find a snapshot that matches specified selection criteria). Only increase - # this value when selection criteria frequently select snapshots that are - # much older than the most recent snapshot i.e. if there are much more than - # 10 snapshots between the most recent one and selected one. This setting is - # only for increasing load efficiency of snapshots. - max-metadata-result-size = 10 - - # Maximum size of result set - max-result-size = 50001 - - # Dispatcher for the plugin actor. - plugin-dispatcher = "cassandra-snapshot-store.default-dispatcher" - - # Default dispatcher for plugin actor. - default-dispatcher { - type = Dispatcher - executor = "fork-join-executor" - fork-join-executor { - parallelism-min = 2 - parallelism-max = 8 - } - } -} diff --git a/src/definitions/README.md b/src/definitions/README.md deleted file mode 100644 index 065e698..0000000 --- a/src/definitions/README.md +++ /dev/null @@ -1 +0,0 @@ -### All CMMN related source files (produced by the IDE) are stored here diff --git a/src/definitions/allocatefunds.process b/src/definitions/allocatefunds.process deleted file mode 100644 index e4117fb..0000000 --- a/src/definitions/allocatefunds.process +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - http://localhost:8380/allocatefunds - POST - {"travelrequest": "${travelrequest}", "approval": "${approval}"} - - application/json - - - - - \ No newline at end of file diff --git a/src/definitions/approval.cfid b/src/definitions/approval.cfid deleted file mode 100644 index 62b8f3d..0000000 --- a/src/definitions/approval.cfid +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/definitions/approvetravelrequest.humantask b/src/definitions/approvetravelrequest.humantask deleted file mode 100644 index 5bd5622..0000000 --- a/src/definitions/approvetravelrequest.humantask +++ /dev/null @@ -1,414 +0,0 @@ - - - - - - - - - - - { - "schema": { - "type": "object", - "properties": { - "TravelRequest": {"$ref": "#/definitions/TravelRequest"}, - "Approval": {"$ref": "#/definitions/Approval"} - }, - "definitions": { - "TravelRequest": { - "type": "object", - "properties": { - "TravellerDetails": {"$ref": "#/definitions/TravellerDetails"}, - "TravelDetails": {"$ref": "#/definitions/TravelDetails"}, - "Meeting": {"$ref": "#/definitions/Meeting"}, - "Transport": {"$ref": "#/definitions/Transport"}, - "Project": {"$ref": "#/definitions/Project"} - } - }, - "TravellerDetails":{ - "title": "Requestor / Traveller Details", - "type": "object", - "required": ["Requestor", "RequestDate", "Traveller"], - "properties": { - "RequestDate": { - "title": "Request date", - "type": "string", - "format": "date", - "defaultValue": "$today" - }, - "Requestor": { - "title": "Requestor", - "type": "string" - }, - "PointOfContact": { - "title": "Point of contact", - "type": "string" - }, - "Traveller": { - "type": "array", - "minItems": 1, - "items": {"$ref": "#/definitions/Traveller"}, - "defaultValue": [] - } - } - }, - "TravelDetails":{ - "title": "Destination and Dates", - "type": "object", - "required": ["Destination", "DepartureDate", "ReturnDate"], - "properties": { - "Destination": { - "type": "array", - "minItems": 1, - "items": {"$ref": "#/definitions/Destination"} - }, - "DepartureDate": { - "title": "Departure date", - "type": "string", - "format": "date" - }, - "ReturnDate": { - "title": "Return date", - "type": "string", - "format": "date" - }, - "DeparturePoint": { - "title": "Departure point", - "type": "string" - }, - "ReturnPoint": { - "title": "Return point", - "type": "string" - }, - "AdvanceRequired": { - "title": "Advance required", - "type": "boolean" - }, - "Purpose": { - "title": "Purpose", - "type": "string" - }, - "Justification": { - "title": "Justification", - "type": "string" - }, - "Comments": { - "title": "Comments", - "type": "string" - } - } - }, - "Traveller": { - "title": "Traveller", - "type": "object", - "required": ["Name", "Email", "Nationality", "PassNo"], - "properties": { - "Name": { - "title": "Name", - "type": "string" - }, - "Email": { - "title": "Email", - "type": "string" - }, - "Nationality": { - "title": "Nationality", - "type": "string", - "enumNames": [ - "Albania", - "Belgium", - "Bulgaria", - "Canada", - "Croatia", - "Czech Rep", - "Denmark", - "Estonia", - "France", - "Germany", - "Greece", - "Hungary", - "Iceland", - "Italy", - "Latvia", - "Lithuania", - "Luxembourg", - "Netherlands", - "Norway", - "Poland", - "Portugal", - "Romania", - "Slovakia", - "Slovenia", - "Spain", - "Turkey", - "United Kingdom", - "USA" - ], - "enum": [ - "AL", - "BE", - "BU", - "CA", - "HR", - "CZ", - "DA", - "EN", - "FR", - "GE", - "GR", - "HU", - "IC", - "IT", - "LG", - "LH", - "LU", - "NL", - "NO", - "PL", - "PO", - "RO", - "LO", - "SI", - "ES", - "TU", - "UK", - "US" - ] - }, - "PassNo": { - "title": "Pass number", - "type": "string" - } - } - }, - "Destination": { - "title": "Destination", - "type": "object", - "required": [ - "City", - "Country" - ], - "properties": { - "City": { - "title": "City", - "type": "string" - }, - "Country": { - "title": "Country", - "type": "string", - "enumNames": [ - "Albania", - "Belgium", - "Bulgaria", - "Canada", - "Croatia", - "Czech Rep", - "Denmark", - "Estonia", - "France", - "Germany", - "Greece", - "Hungary", - "Iceland", - "Italy", - "Latvia", - "Lithuania", - "Luxembourg", - "Netherlands", - "Norway", - "Poland", - "Portugal", - "Romania", - "Slovakia", - "Slovenia", - "Spain", - "Turkey", - "United Kingdom", - "USA" - ], - "enum": [ - "AL", - "BE", - "BU", - "CA", - "HR", - "CZ", - "DA", - "EN", - "FR", - "GE", - "GR", - "HU", - "IC", - "IT", - "LG", - "LH", - "LU", - "NL", - "NO", - "PL", - "PO", - "RO", - "LO", - "SI", - "ES", - "TU", - "UK", - "US" - ] - } - } - }, - "Meeting": { - "title": "Meeting Details", - "type": "object", - "properties": { - "StartDate": { - "title": "Start date", - "type": "string", - "format": "date" - }, - "StartTime": { - "title": "Start time", - "type": "string", - "format": "time" - }, - "EndDate": { - "title": "End date", - "type": "string", - "format": "date" - }, - "EndTime": { - "title": "End time", - "type": "string", - "format": "time" - }, - "DurationIncLeave": { - "title": "Duration incl. leave", - "type": "integer" - } - } - }, - "Transport": { - "title": "Transport Details", - "type": "object", - "required": ["ModeOfTransport"], - "properties": { - "ModeOfTransport": { - "title": "Mode of transport", - "type": "string", - "enum": [ - "Shuttle", - "Staff car", - "Hire car", - "Train", - "Air", - "POMV" - ] - }, - "POMVMake": { - "title": "POMV make", - "type": "string" - }, - "POMVLicense": { - "title": "POMV license", - "type": "string" - } - } - }, - "Project": { - "title": "Project Details", - "type": "object", - "required": ["Assistant"], - "properties": { - "IMIS-code": { - "title": "IMIS-code", - "type": "string" - }, - "IMIS-activity-code": { - "title": "IMIS-activity-code", - "type": "string" - }, - "Manager": { - "title": "Project manager", - "type": "string" - }, - "ChiefServiceLine": { - "title": "Chief service line", - "type": "string" - }, - "Assistant": { - "title": "Project assistant", - "type": "string" - } - } - }, - "Approval": { - "title": "Approval", - "type": "object", - "required": ["Status"], - "properties": { - "Status": { - "title": "Approval status", - "type": "string" - }, - "ApprovedBy": { - "title": "Approved by", - "type": "string", - "default": "$CURRENT_USER" - }, - "ApprovalTimestamp": { - "title": "Approval time", - "type": "string", - "format": "date-time", - "defaultValue": "$now" - }, - "Motivation": { - "title": "Motivation", - "type": "string" - } - } - } - } - }, - "uiSchema": { - "TravelRequest": { - "ui:widget": "stepper", - "ui:order": ["TravellerDetails", "TravelDetails", "Meeting", "Transport", "Project"], - "ui:readonly": true, - "TravelDetails" : { - "Purpose": {"ui:widget": "textarea"}, - "Justification": {"ui:widget": "textarea"} - }, - "Transport" : { - "POMVMake": {"ui:widget": "textarea"} - }, - "TravellerDetails" : { - "Requestor": {"ui:widget": "user-selector", "multiSelect" : false}, - "PointOfContact": {"ui:widget": "user-selector", "multiSelect" : false} - }, - "Project" : { - "Manager": {"ui:widget": "user-selector", "multiSelect" : false}, - "Assistant": {"ui:widget": "user-selector", "multiSelect" : false} - } - }, - "Approval" : { - "Status": { - "ui:widget": "radio", - "options": { - "Approved": "approved", - "Rejected": "disapproved" - }, - "defaultSelected": "approved" - }, - "ApprovedBy": {"ui:widget": "user-selector", "multiSelect" : false}, - "ApprovalTimestamp" : { - "ui:readonly": true - } - } - } - } - - - \ No newline at end of file diff --git a/src/definitions/arrangevisa.humantask b/src/definitions/arrangevisa.humantask deleted file mode 100644 index a02849b..0000000 --- a/src/definitions/arrangevisa.humantask +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - { - "schema": { - "type": "object", - "properties": { - "TravelRequest": { - "$ref": "#/definitions/TravelRequest" - } - }, - "definitions": { - "TravelRequest": { - "type": "object", - "properties": { - "TravellerDetails": {"$ref": "#/definitions/TravellerDetails"} - } - }, - "TravellerDetails":{ - "title": "Requestor / Traveller Details", - "type": "object", - "properties": { - "Requestor": { - "title": "Requestor", - "type": "string" - }, - "Traveller": { - "type": "array", - "minItems": 1, - "items": {"$ref": "#/definitions/Traveller"}, - "defaultValue": [] - } - } - }, - "Traveller": { - "title": "Traveller", - "type": "object", - "required": ["isESTAApplicationSubmitted","isVisaDocumentsAvailable"], - "properties": { - "Name": { - "title": "Name", - "type": "string" - }, - "Email": { - "title": "Email", - "type": "string" - }, - "PassNo": { - "title": "PassNo", - "type": "string" - }, - "isESTAApplicationSubmitted": { - "title": "ESTA application submitted", - "type": "boolean" - }, - "isVisaDocumentsAvailable": { - "title": "Visa documents available", - "type": "boolean" - } - } - } - } - }, - "uiSchema": { - "TravelRequest": { - "TravellerDetails" : { - "Traveller" :{ - "items":{ - "ui:order": ["Name", "Email", "PassNo", "isESTAApplicationSubmitted", "isVisaDocumentsAvailable"], - "Name": {"ui:readonly": true}, - "Email": {"ui:readonly": true}, - "PassNo": {"ui:readonly": true} - } - } - } - - } - } - } - - - \ No newline at end of file diff --git a/src/definitions/checkapprover.process b/src/definitions/checkapprover.process deleted file mode 100644 index b7859db..0000000 --- a/src/definitions/checkapprover.process +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - http://localhost:8380/checkavailability - POST - { - "projectmananger": "${projectmanager}", - "chiefserviceline": "${chiefserviceline}", - "startdate": "${startdate}", - "enddate": "${enddate}"} - - - application/json - - - - \ No newline at end of file diff --git a/src/definitions/checktravelrequirements.process b/src/definitions/checktravelrequirements.process deleted file mode 100644 index 7c5681d..0000000 --- a/src/definitions/checktravelrequirements.process +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - http://demo1776471.mockable.io/travelrequirements - POST - {"destinationCountry": "${destinationCountry}", "travellers": "${travellers}"} - - application/json - - - - \ No newline at end of file diff --git a/src/definitions/createtravelpurchaseorder.humantask b/src/definitions/createtravelpurchaseorder.humantask deleted file mode 100644 index 72c6177..0000000 --- a/src/definitions/createtravelpurchaseorder.humantask +++ /dev/null @@ -1,382 +0,0 @@ - - - - - - - - - - - - { - "schema": { - "type": "object", - "properties": {"TravelRequest": {"$ref": "#/definitions/TravelRequest"}}, - "definitions": { - "TravelRequest": { - "type": "object", - "properties": { - "TravellerDetails": {"$ref": "#/definitions/TravellerDetails"}, - "TravelDetails": {"$ref": "#/definitions/TravelDetails"}, - "Meeting": {"$ref": "#/definitions/Meeting"}, - "Transport": {"$ref": "#/definitions/Transport"}, - "Project": {"$ref": "#/definitions/Project"} - } - }, - "TravellerDetails":{ - "title": "Requestor / Traveller Details", - "type": "object", - "required": ["Requestor", "RequestDate", "Traveller"], - "properties": { - "RequestDate": { - "title": "Request date", - "type": "string", - "format": "date", - "defaultValue": "$today" - }, - "Requestor": { - "title": "Requestor", - "type": "string" - }, - "PointOfContact": { - "title": "Point of contact", - "type": "string" - }, - "Traveller": { - "type": "array", - "minItems": 1, - "items": {"$ref": "#/definitions/Traveller"}, - "defaultValue": [] - } - } - }, - "TravelDetails":{ - "title": "Destination and Dates", - "type": "object", - "required": ["Destination", "DepartureDate", "ReturnDate"], - "properties": { - "Destination": { - "type": "array", - "minItems": 1, - "items": {"$ref": "#/definitions/Destination"} - }, - "DepartureDate": { - "title": "Departure date", - "type": "string", - "format": "date" - }, - "ReturnDate": { - "title": "Return date", - "type": "string", - "format": "date" - }, - "DeparturePoint": { - "title": "Departure point", - "type": "string" - }, - "ReturnPoint": { - "title": "Return point", - "type": "string" - }, - "AdvanceRequired": { - "title": "Advance required", - "type": "boolean" - }, - "Purpose": { - "title": "Purpose", - "type": "string" - }, - "Justification": { - "title": "Justification", - "type": "string" - }, - "Comments": { - "title": "Comments", - "type": "string" - } - } - }, - "Traveller": { - "title": "Traveller", - "type": "object", - "required": ["Name", "Email", "Nationality", "PassNo"], - "properties": { - "Name": { - "title": "Name", - "type": "string" - }, - "Email": { - "title": "Email", - "type": "string" - }, - "Nationality": { - "title": "Nationality", - "type": "string", - "enumNames": [ - "Albania", - "Belgium", - "Bulgaria", - "Canada", - "Croatia", - "Czech Rep", - "Denmark", - "Estonia", - "France", - "Germany", - "Greece", - "Hungary", - "Iceland", - "Italy", - "Latvia", - "Lithuania", - "Luxembourg", - "Netherlands", - "Norway", - "Poland", - "Portugal", - "Romania", - "Slovakia", - "Slovenia", - "Spain", - "Turkey", - "United Kingdom", - "USA" - ], - "enum": [ - "AL", - "BE", - "BU", - "CA", - "HR", - "CZ", - "DA", - "EN", - "FR", - "GE", - "GR", - "HU", - "IC", - "IT", - "LG", - "LH", - "LU", - "NL", - "NO", - "PL", - "PO", - "RO", - "LO", - "SI", - "ES", - "TU", - "UK", - "US" - ] - }, - "PassNo": { - "title": "Pass number", - "type": "string" - } - } - }, - "Destination": { - "title": "Destination", - "type": "object", - "required": [ - "City", - "Country" - ], - "properties": { - "City": { - "title": "City", - "type": "string" - }, - "Country": { - "title": "Country", - "type": "string", - "enumNames": [ - "Albania", - "Belgium", - "Bulgaria", - "Canada", - "Croatia", - "Czech Rep", - "Denmark", - "Estonia", - "France", - "Germany", - "Greece", - "Hungary", - "Iceland", - "Italy", - "Latvia", - "Lithuania", - "Luxembourg", - "Netherlands", - "Norway", - "Poland", - "Portugal", - "Romania", - "Slovakia", - "Slovenia", - "Spain", - "Turkey", - "United Kingdom", - "USA" - ], - "enum": [ - "AL", - "BE", - "BU", - "CA", - "HR", - "CZ", - "DA", - "EN", - "FR", - "GE", - "GR", - "HU", - "IC", - "IT", - "LG", - "LH", - "LU", - "NL", - "NO", - "PL", - "PO", - "RO", - "LO", - "SI", - "ES", - "TU", - "UK", - "US" - ] - } - } - }, - "Meeting": { - "title": "Meeting Details", - "type": "object", - "properties": { - "StartDate": { - "title": "Start date", - "type": "string", - "format": "date" - }, - "StartTime": { - "title": "Start time", - "type": "string", - "format": "time" - }, - "EndDate": { - "title": "End date", - "type": "string", - "format": "date" - }, - "EndTime": { - "title": "End time", - "type": "string", - "format": "time" - }, - "DurationIncLeave": { - "title": "Duration incl. leave", - "type": "integer" - } - } - }, - "Transport": { - "title": "Transport Details", - "type": "object", - "required": ["ModeOfTransport"], - "properties": { - "ModeOfTransport": { - "title": "Mode of transport", - "type": "string", - "enum": [ - "Shuttle", - "Staff car", - "Hire car", - "Train", - "Air", - "POMV" - ] - }, - "POMVMake": { - "title": "POMV make", - "type": "string" - }, - "POMVLicense": { - "title": "POMV license", - "type": "string" - } - } - }, - "Project": { - "title": "Project Details", - "type": "object", - "required": ["Assistant"], - "properties": { - "IMIS-code": { - "title": "IMIS-code", - "type": "string" - }, - "IMIS-activity-code": { - "title": "IMIS-activity-code", - "type": "string" - }, - "Manager": { - "title": "Project manager", - "type": "string" - }, - "ChiefServiceLine": { - "title": "Chief service line", - "type": "string" - }, - "Assistant": { - "title": "Project assistant", - "type": "string" - } - } - } - } - }, - "uiSchema": { - "TravelRequest": { - "ui:widget": "stepper", - "ui:order": ["TravellerDetails", "TravelDetails", "Meeting", "Transport", "Project"], - "TravelDetails" : { - "ui:readonly": true, - "Purpose": {"ui:widget": "textarea"}, - "Justification": {"ui:widget": "textarea"} - }, - "Transport" : { - "ui:readonly": true, - "POMVMake": {"ui:widget": "textarea"} - }, - "TravellerDetails" : { - "ui:readonly": true, - "Requestor": {"ui:widget": "user-selector", "multiSelect" : false}, - "PointOfContact": {"ui:widget": "user-selector", "multiSelect" : false} - }, - "Meeting" : { - "ui:readonly": true - }, - "Project" : { - "Manager": {"ui:widget": "user-selector", "multiSelect" : false}, - "Assistant": {"ui:widget": "user-selector", "multiSelect" : false} - } - } - } -}, - "uiSchema": {"TravelRequest": { - "Purpose": {"ui:widget": "textarea"}, - "Justification": {"ui:widget": "textarea"} - }} - } - - - \ No newline at end of file diff --git a/src/definitions/destination.cfid b/src/definitions/destination.cfid deleted file mode 100644 index 16a1556..0000000 --- a/src/definitions/destination.cfid +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/definitions/emailpurchaseorder.process b/src/definitions/emailpurchaseorder.process deleted file mode 100644 index 021fa62..0000000 --- a/src/definitions/emailpurchaseorder.process +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - - - - - - - Your Travel approval document - travelrequest@email.org - travelrequest@email.org - -
${toAddress}
-
- - ${travelorder} - - - - -
Hidden text
- - - - -
- - - - - - - - - - - -
- -
- - - - -
-

Travel Document

-
-
- - -
- - - - - -
-

Hello ${toName},

-

This is your Travel approval document for your trip to ${destinationCity} in ${destinationCountry} on ${departureDate} -
-

-
-
${fromName} -
- -
- - - - - -
- logo small -
- -
- -
- - ]]> -
-
-
-
\ No newline at end of file diff --git a/src/definitions/emailrequestor.process b/src/definitions/emailrequestor.process deleted file mode 100644 index 1cf5e28..0000000 --- a/src/definitions/emailrequestor.process +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - - - - - - - - Your Travel request has been ${approvalStatus} - ${fromAddress} - ${fromAddress} - -
${toAddress}
-
- - - -
Hidden text
- - - - -
- - - - - - - - - - - -
- -
- - - - -
-

Travel Request Approved

-
-
- - -
- - - - - -
-

Hello ${toName},

-

- Your Travel request to ${destinationCity} in ${destinationCountry} on ${departureDate} -
has been ${approvalStatus} -

-
-
- Kind regards, -
- ${fromName} -
- -
- - - - - -
- logo small -
- -
- -
- - ]]> -
-
-
-
\ No newline at end of file diff --git a/src/definitions/emailtravelofffice.process b/src/definitions/emailtravelofffice.process deleted file mode 100644 index a16f0d9..0000000 --- a/src/definitions/emailtravelofffice.process +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - - - - - - - - - - - - Please arrange travel requirements for ${fromName} - ${fromAddress} - ${fromAddress} - -
info@travel-office.com
-
- - - -
Hidden text
- - - - -
- - - - - - - - - - - -
- -
- - - - -
-

Arrange Travel Requirements

-
-
- - -
- - - - - -
-

Hello,

-

- Could you please make arrangements for my travel to ${destinationCity} in ${destinationCountry} -
-

-
    -
  • Departure date: ${departureDate}
  • -
  • Return date: ${returnDate}
  • -
  • Departure point: ${departurePoint}
  • -
  • Return point: ${returnPoint} -
  • Required transport: ${transportMode}
  • -
-
-
- Kind regards, -
- ${fromName} -
- -
- - - - - -
- logo small -
- -
- -
- - ]]> -
-
-
-
\ No newline at end of file diff --git a/src/definitions/generatepurchaseorder.process b/src/definitions/generatepurchaseorder.process deleted file mode 100644 index fd4c342..0000000 --- a/src/definitions/generatepurchaseorder.process +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <band height="100" splitType="Stretch"> - <staticText> - <reportElement style="Sans_Normal" x="0" y="70" width="373" height="30" uuid="0a796ca5-9308-4f25-a670-b5fe688171f3"/> - <textElement> - <font size="24" isBold="true" isItalic="true"/> - </textElement> - <text> - <![CDATA[Travel Request Approval]]> - </text> - </staticText> - <image scaleImage="RetainShape" evaluationTime="Report"> - <reportElement mode="Transparent" x="461" y="0" width="89" height="100" uuid="37390975-19d4-41f7-a3a6-9d36651bcb02"> - <property name="com.jaspersoft.studio.unit.height" value="pixel"/> - <property name="com.jaspersoft.studio.unit.width" value="pixel"/> - </reportElement> - <graphicElement fill="Solid"/> - <imageExpression> - <![CDATA[new ByteArrayInputStream(java.util.Base64.getDecoder().decode($V{logo}.getBytes()))]]> - </imageExpression> - </image> - </band> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/definitions/greeting.cfid b/src/definitions/greeting.cfid deleted file mode 100644 index 217761f..0000000 --- a/src/definitions/greeting.cfid +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/definitions/helloworld.case b/src/definitions/helloworld.case deleted file mode 100644 index df0182b..0000000 --- a/src/definitions/helloworld.case +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - complete - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { - "schema": { - "title": "Greeting", - "type": "object", - "required": [ - "Greeting" - ], - "properties": { - "Greeting": { - "title": "Your greeting to the World", - "type": "object", - "properties": { - "Message": { - "type": "string", - "title": "Your message" - }, - "To": { - "type": "string", - "title": "To whom?" - }, - "From": { - "type": "string", - "title": "From", - "default": "$CURRENT_USER" - } - } - } - } - }, - "uiSchema": { - "Greeting": { - "Message": {"ui:widget": "textarea"}, - "To" : {"ui:widget": "user-selector", "multiSelect" : false, "role" : "Receiver"}, - "From" : {"ui:widget": "user-selector", "multiSelect" : false, "role" : "Sender"} - } - } -} - - \ No newline at end of file diff --git a/src/definitions/helloworld.dimensions b/src/definitions/helloworld.dimensions deleted file mode 100644 index bb644e7..0000000 --- a/src/definitions/helloworld.dimensions +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/definitions/managetravelrequest.humantask b/src/definitions/managetravelrequest.humantask deleted file mode 100644 index f72ecf5..0000000 --- a/src/definitions/managetravelrequest.humantask +++ /dev/null @@ -1,369 +0,0 @@ - - - - - - - - - - { - "schema": { - "type": "object", - "properties": {"TravelRequest": {"$ref": "#/definitions/TravelRequest"}}, - "definitions": { - "TravelRequest": { - "type": "object", - "properties": { - "TravellerDetails": {"$ref": "#/definitions/TravellerDetails"}, - "TravelDetails": {"$ref": "#/definitions/TravelDetails"}, - "Meeting": {"$ref": "#/definitions/Meeting"}, - "Transport": {"$ref": "#/definitions/Transport"}, - "Project": {"$ref": "#/definitions/Project"} - } - }, - "TravellerDetails":{ - "title": "Requestor / Traveller Details", - "type": "object", - "required": ["Requestor", "RequestDate", "Traveller"], - "properties": { - "RequestDate": { - "title": "Request date", - "type": "string", - "format": "date", - "defaultValue": "$today" - }, - "Requestor": { - "title": "Requestor", - "type": "string" - }, - "PointOfContact": { - "title": "Point of contact", - "type": "string" - }, - "Traveller": { - "type": "array", - "minItems": 1, - "items": {"$ref": "#/definitions/Traveller"}, - "defaultValue": [] - } - } - }, - "TravelDetails":{ - "title": "Destination and Dates", - "type": "object", - "required": ["Destination", "DepartureDate", "ReturnDate"], - "properties": { - "Destination": { - "type": "array", - "minItems": 1, - "items": {"$ref": "#/definitions/Destination"} - }, - "DepartureDate": { - "title": "Departure date", - "type": "string", - "format": "date" - }, - "ReturnDate": { - "title": "Return date", - "type": "string", - "format": "date" - }, - "DeparturePoint": { - "title": "Departure point", - "type": "string" - }, - "ReturnPoint": { - "title": "Return point", - "type": "string" - }, - "AdvanceRequired": { - "title": "Advance required", - "type": "boolean" - }, - "Purpose": { - "title": "Purpose", - "type": "string" - }, - "Justification": { - "title": "Justification", - "type": "string" - }, - "Comments": { - "title": "Comments", - "type": "string" - } - } - }, - "Traveller": { - "title": "Traveller", - "type": "object", - "required": ["Name", "Email", "Nationality", "PassNo"], - "properties": { - "Name": { - "title": "Name", - "type": "string" - }, - "Email": { - "title": "Email", - "type": "string" - }, - "Nationality": { - "title": "Nationality", - "type": "string", - "enumNames": [ - "Albania", - "Belgium", - "Bulgaria", - "Canada", - "Croatia", - "Czech Rep", - "Denmark", - "Estonia", - "France", - "Germany", - "Greece", - "Hungary", - "Iceland", - "Italy", - "Latvia", - "Lithuania", - "Luxembourg", - "Netherlands", - "Norway", - "Poland", - "Portugal", - "Romania", - "Slovakia", - "Slovenia", - "Spain", - "Turkey", - "United Kingdom", - "USA" - ], - "enum": [ - "AL", - "BE", - "BU", - "CA", - "HR", - "CZ", - "DA", - "EN", - "FR", - "GE", - "GR", - "HU", - "IC", - "IT", - "LG", - "LH", - "LU", - "NL", - "NO", - "PL", - "PO", - "RO", - "LO", - "SI", - "ES", - "TU", - "UK", - "US" - ] - }, - "PassNo": { - "title": "Pass number", - "type": "string" - } - } - }, - "Destination": { - "title": "Destination", - "type": "object", - "required": [ - "City", - "Country" - ], - "properties": { - "City": { - "title": "City", - "type": "string" - }, - "Country": { - "title": "Country", - "type": "string", - "enumNames": [ - "Albania", - "Belgium", - "Bulgaria", - "Canada", - "Croatia", - "Czech Rep", - "Denmark", - "Estonia", - "France", - "Germany", - "Greece", - "Hungary", - "Iceland", - "Italy", - "Latvia", - "Lithuania", - "Luxembourg", - "Netherlands", - "Norway", - "Poland", - "Portugal", - "Romania", - "Slovakia", - "Slovenia", - "Spain", - "Turkey", - "United Kingdom", - "USA" - ], - "enum": [ - "AL", - "BE", - "BU", - "CA", - "HR", - "CZ", - "DA", - "EN", - "FR", - "GE", - "GR", - "HU", - "IC", - "IT", - "LG", - "LH", - "LU", - "NL", - "NO", - "PL", - "PO", - "RO", - "LO", - "SI", - "ES", - "TU", - "UK", - "US" - ] - } - } - }, - "Meeting": { - "title": "Meeting Details", - "type": "object", - "properties": { - "StartDate": { - "title": "Start date", - "type": "string", - "format": "date" - }, - "StartTime": { - "title": "Start time", - "type": "string", - "format": "time" - }, - "EndDate": { - "title": "End date", - "type": "string", - "format": "date" - }, - "EndTime": { - "title": "End time", - "type": "string", - "format": "time" - }, - "DurationIncLeave": { - "title": "Duration incl. leave", - "type": "integer" - } - } - }, - "Transport": { - "title": "Transport Details", - "type": "object", - "required": ["ModeOfTransport"], - "properties": { - "ModeOfTransport": { - "title": "Mode of transport", - "type": "string", - "enum": [ - "Shuttle", - "Staff car", - "Hire car", - "Train", - "Air", - "POMV" - ] - }, - "POMVMake": { - "title": "POMV make", - "type": "string" - }, - "POMVLicense": { - "title": "POMV license", - "type": "string" - } - } - }, - "Project": { - "title": "Project Details", - "type": "object", - "required": ["Assistant"], - "properties": { - "IMIS-code": { - "title": "IMIS-code", - "type": "string" - }, - "IMIS-activity-code": { - "title": "IMIS-activity-code", - "type": "string" - }, - "Manager": { - "title": "Project manager", - "type": "string" - }, - "ChiefServiceLine": { - "title": "Chief service line", - "type": "string" - }, - "Assistant": { - "title": "Project assistant", - "type": "string" - } - } - } - } - }, - "uiSchema": { - "TravelRequest": { - "ui:widget": "stepper", - "ui:order": ["TravellerDetails", "TravelDetails", "Meeting", "Transport", "Project"], - "TravelDetails" : { - "Purpose": {"ui:widget": "textarea"}, - "Justification": {"ui:widget": "textarea"} - }, - "Transport" : { - "POMVMake": {"ui:widget": "textarea"} - }, - "TravellerDetails" : { - "Requestor": {"ui:widget": "user-selector", "multiSelect" : false}, - "PointOfContact": {"ui:widget": "user-selector", "multiSelect" : false} - }, - "Project" : { - "Manager": {"ui:widget": "user-selector", "multiSelect" : false}, - "Assistant": {"ui:widget": "user-selector", "multiSelect" : false} - } - } - } -} - - - \ No newline at end of file diff --git a/src/definitions/manuallysetapprover.humantask b/src/definitions/manuallysetapprover.humantask deleted file mode 100644 index 36bf020..0000000 --- a/src/definitions/manuallysetapprover.humantask +++ /dev/null @@ -1,366 +0,0 @@ - - - - - - - { - "schema": { - "type": "object", - "properties": {"TravelRequest": {"$ref": "#/definitions/TravelRequest"}}, - "definitions": { - "TravelRequest": { - "type": "object", - "properties": { - "TravellerDetails": {"$ref": "#/definitions/TravellerDetails"}, - "TravelDetails": {"$ref": "#/definitions/TravelDetails"}, - "Meeting": {"$ref": "#/definitions/Meeting"}, - "Transport": {"$ref": "#/definitions/Transport"}, - "Project": {"$ref": "#/definitions/Project"} - } - }, - "TravellerDetails":{ - "title": "Requestor / Traveller Details", - "type": "object", - "required": ["Requestor", "RequestDate", "Traveller"], - "properties": { - "RequestDate": { - "title": "Request date", - "type": "string", - "format": "date", - "defaultValue": "$today" - }, - "Requestor": { - "title": "Requestor", - "type": "string" - }, - "PointOfContact": { - "title": "Point of contact", - "type": "string" - }, - "Traveller": { - "type": "array", - "minItems": 1, - "items": {"$ref": "#/definitions/Traveller"}, - "defaultValue": [] - } - } - }, - "TravelDetails":{ - "title": "Destination and Dates", - "type": "object", - "required": ["Destination", "DepartureDate", "ReturnDate"], - "properties": { - "Destination": { - "type": "array", - "minItems": 1, - "items": {"$ref": "#/definitions/Destination"} - }, - "DepartureDate": { - "title": "Departure date", - "type": "string", - "format": "date" - }, - "ReturnDate": { - "title": "Return date", - "type": "string", - "format": "date" - }, - "DeparturePoint": { - "title": "Departure point", - "type": "string" - }, - "ReturnPoint": { - "title": "Return point", - "type": "string" - }, - "AdvanceRequired": { - "title": "Advance required", - "type": "boolean" - }, - "Purpose": { - "title": "Purpose", - "type": "string" - }, - "Justification": { - "title": "Justification", - "type": "string" - }, - "Comments": { - "title": "Comments", - "type": "string" - } - } - }, - "Traveller": { - "title": "Traveller", - "type": "object", - "required": ["Name", "Email", "Nationality", "PassNo"], - "properties": { - "Name": { - "title": "Name", - "type": "string" - }, - "Email": { - "title": "Email", - "type": "string" - }, - "Nationality": { - "title": "Nationality", - "type": "string", - "enumNames": [ - "Albania", - "Belgium", - "Bulgaria", - "Canada", - "Croatia", - "Czech Rep", - "Denmark", - "Estonia", - "France", - "Germany", - "Greece", - "Hungary", - "Iceland", - "Italy", - "Latvia", - "Lithuania", - "Luxembourg", - "Netherlands", - "Norway", - "Poland", - "Portugal", - "Romania", - "Slovakia", - "Slovenia", - "Spain", - "Turkey", - "United Kingdom", - "USA" - ], - "enum": [ - "AL", - "BE", - "BU", - "CA", - "HR", - "CZ", - "DA", - "EN", - "FR", - "GE", - "GR", - "HU", - "IC", - "IT", - "LG", - "LH", - "LU", - "NL", - "NO", - "PL", - "PO", - "RO", - "LO", - "SI", - "ES", - "TU", - "UK", - "US" - ] - }, - "PassNo": { - "title": "Pass number", - "type": "string" - } - } - }, - "Destination": { - "title": "Destination", - "type": "object", - "required": [ - "City", - "Country" - ], - "properties": { - "City": { - "title": "City", - "type": "string" - }, - "Country": { - "title": "Country", - "type": "string", - "enumNames": [ - "Albania", - "Belgium", - "Bulgaria", - "Canada", - "Croatia", - "Czech Rep", - "Denmark", - "Estonia", - "France", - "Germany", - "Greece", - "Hungary", - "Iceland", - "Italy", - "Latvia", - "Lithuania", - "Luxembourg", - "Netherlands", - "Norway", - "Poland", - "Portugal", - "Romania", - "Slovakia", - "Slovenia", - "Spain", - "Turkey", - "United Kingdom", - "USA" - ], - "enum": [ - "AL", - "BE", - "BU", - "CA", - "HR", - "CZ", - "DA", - "EN", - "FR", - "GE", - "GR", - "HU", - "IC", - "IT", - "LG", - "LH", - "LU", - "NL", - "NO", - "PL", - "PO", - "RO", - "LO", - "SI", - "ES", - "TU", - "UK", - "US" - ] - } - } - }, - "Meeting": { - "title": "Meeting Details", - "type": "object", - "properties": { - "StartDate": { - "title": "Start date", - "type": "string", - "format": "date" - }, - "StartTime": { - "title": "Start time", - "type": "string", - "format": "time" - }, - "EndDate": { - "title": "End date", - "type": "string", - "format": "date" - }, - "EndTime": { - "title": "End time", - "type": "string", - "format": "time" - }, - "DurationIncLeave": { - "title": "Duration incl. leave", - "type": "integer" - } - } - }, - "Transport": { - "title": "Transport Details", - "type": "object", - "required": ["ModeOfTransport"], - "properties": { - "ModeOfTransport": { - "title": "Mode of transport", - "type": "string", - "enum": [ - "Shuttle", - "Staff car", - "Hire car", - "Train", - "Air", - "POMV" - ] - }, - "POMVMake": { - "title": "POMV make", - "type": "string" - }, - "POMVLicense": { - "title": "POMV license", - "type": "string" - } - } - }, - "Project": { - "title": "Project Details", - "type": "object", - "required": ["Assistant"], - "properties": { - "IMIS-code": { - "title": "IMIS-code", - "type": "string" - }, - "IMIS-activity-code": { - "title": "IMIS-activity-code", - "type": "string" - }, - "Manager": { - "title": "Project manager", - "type": "string" - }, - "ChiefServiceLine": { - "title": "Chief service line", - "type": "string" - }, - "Assistant": { - "title": "Project assistant", - "type": "string" - } - } - } - } - }, - "uiSchema": { - "TravelRequest": { - "ui:widget": "stepper", - "ui:order": ["TravellerDetails", "TravelDetails", "Meeting", "Transport", "Project"], - "TravelDetails" : { - "Purpose": {"ui:widget": "textarea"}, - "Justification": {"ui:widget": "textarea"} - }, - "Transport" : { - "POMVMake": {"ui:widget": "textarea"} - }, - "TravellerDetails" : { - "Requestor": {"ui:widget": "user-selector", "multiSelect" : false}, - "PointOfContact": {"ui:widget": "user-selector", "multiSelect" : false} - }, - "Project" : { - "Manager": {"ui:widget": "user-selector", "multiSelect" : false}, - "Assistant": {"ui:widget": "user-selector", "multiSelect" : false} - } - } - } -} - - - \ No newline at end of file diff --git a/src/definitions/meeting.cfid b/src/definitions/meeting.cfid deleted file mode 100644 index 1ae7544..0000000 --- a/src/definitions/meeting.cfid +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/definitions/notifyapprovelemail.process b/src/definitions/notifyapprovelemail.process deleted file mode 100644 index 2646b85..0000000 --- a/src/definitions/notifyapprovelemail.process +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - - - - - - - - - - - - - - Travel Approval request - travelrequest@email.org - noreply@email.org - -
${toAddress}
-
- - - -
Hidden text
- - - - -
- - - - - - - - - - - -
- -
- - - - -
-

Travel Request Approval

-
-
- - -
- - - - - - - - -
-

Hello ${toName},

-

- ${travellerName} requests approval for the Travel request: -

-
    -
  • Destination(s): ${destinationCity} in ${destinationCountry}
  • -
  • Start date: ${departureDate}
  • -
  • End date: ${returnDate}
  • -
-
- - - - - - - - -
- Approve - - Reject -
- View Travel Request -
-
- -
- - - - - -
- logo small -
- -
- -
- - ]]> -
-
-
-
\ No newline at end of file diff --git a/src/definitions/project.cfid b/src/definitions/project.cfid deleted file mode 100644 index be3e63f..0000000 --- a/src/definitions/project.cfid +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/definitions/readresponse.humantask b/src/definitions/readresponse.humantask deleted file mode 100644 index 00e9810..0000000 --- a/src/definitions/readresponse.humantask +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - { - "schema": { - "title": "Read response", - "type": "object", - "properties": { - "Response": { - "title": "Your response", - "type": "object", - "properties": { - "Message": { - "type": "string", - "title": "Your response message" - }, - "Date": { - "type": "string", - "format": "date", - "title": "Pick a date" - }, - "Time": { - "type": "string", - "format": "time", - "title": "Pick a time" - }, - "SomeBoolean": { - "type": "boolean", - "title": "Check this" - } - } - } - } - }, - "uiSchema": { - "Message": { - "ui:widget": "textarea" - } - } - } - - - \ No newline at end of file diff --git a/src/definitions/response.cfid b/src/definitions/response.cfid deleted file mode 100644 index bdc6b0f..0000000 --- a/src/definitions/response.cfid +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/definitions/sendresponse.humantask b/src/definitions/sendresponse.humantask deleted file mode 100644 index 78a4ac2..0000000 --- a/src/definitions/sendresponse.humantask +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - { - "schema" : { - "title" : "You have received a greeting", - "type" : "object", - "required" : [ - "Response" - ], - "properties" : { - "Greeting" : { - "title" : " ", - "type" : "object", - "properties" : { - "Message" : { - "title" : "Greeting", - "type" : "string" - } - } - }, - "Response" : { - "title" : "Your response", - "type" : "object", - "properties" : { - "Message" : { - "type" : "string", - "title" : "Your response message" - }, - "Date" : { - "type" : "string", - "format" : "date", - "title" : "Pick a date" - }, - "Time" : { - "type" : "string", - "format" : "time", - "title" : "Pick a time" - }, - "SomeBoolean" : { - "type" : "boolean", - "title" : "Check this" - } - } - } - } - }, - "uiSchema" : { - "ui:order": [ "Greeting", "Response" ], - "Greeting" : { - "Message" : { - "ui:widget" : "textarea", - "ui:readonly" : true - }, - "To" : { - "ui:readonly" : true - } - }, - "Response" : { - "Message" : { - "ui:widget" : "textarea" - } - } - } -} - - - \ No newline at end of file diff --git a/src/definitions/transport.cfid b/src/definitions/transport.cfid deleted file mode 100644 index e48c883..0000000 --- a/src/definitions/transport.cfid +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/definitions/traveldetails.cfid b/src/definitions/traveldetails.cfid deleted file mode 100644 index 194e238..0000000 --- a/src/definitions/traveldetails.cfid +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/definitions/traveller.cfid b/src/definitions/traveller.cfid deleted file mode 100644 index 7f125a5..0000000 --- a/src/definitions/traveller.cfid +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/definitions/travellerdetails.cfid b/src/definitions/travellerdetails.cfid deleted file mode 100644 index 5665ddb..0000000 --- a/src/definitions/travellerdetails.cfid +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/definitions/travelorderdoc.cfid b/src/definitions/travelorderdoc.cfid deleted file mode 100644 index cfbef40..0000000 --- a/src/definitions/travelorderdoc.cfid +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/src/definitions/travelrequest.case b/src/definitions/travelrequest.case deleted file mode 100644 index 86120a8..0000000 --- a/src/definitions/travelrequest.case +++ /dev/null @@ -1,1006 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - start - - - - - - - - - - - - complete - - - complete - - - - - - - - - - - - complete - - - - - occur - - - - - complete - - - complete - - - - - occur - - - - - occur - - - - - occur - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - complete - - - - - - - - - - - - complete - - - - - start - - - - - - - - - - - - complete - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { - "schema": { - "type": "object", - "properties": {"TravelRequest": {"$ref": "#/definitions/TravelRequest"}}, - "definitions": { - "TravelRequest": { - "type": "object", - "properties": { - "TravellerDetails": {"$ref": "#/definitions/TravellerDetails"}, - "TravelDetails": {"$ref": "#/definitions/TravelDetails"}, - "Meeting": {"$ref": "#/definitions/Meeting"}, - "Transport": {"$ref": "#/definitions/Transport"}, - "Project": {"$ref": "#/definitions/Project"} - } - }, - "TravellerDetails":{ - "title": "Requestor / Traveller Details", - "type": "object", - "required": ["Requestor", "RequestDate", "Traveller"], - "properties": { - "RequestDate": { - "title": "Request date", - "type": "string", - "format": "date", - "defaultValue": "$today" - }, - "Requestor": { - "title": "Requestor", - "type": "string", - "default": "$CURRENT_USER" - }, - "PointOfContact": { - "title": "Point of contact", - "type": "string" - }, - "Traveller": { - "type": "array", - "minItems": 1, - "items": {"$ref": "#/definitions/Traveller"}, - "default": [{"Nationality": "NL"}] - } - } - }, - "TravelDetails":{ - "title": "Destination and Dates", - "type": "object", - "required": ["Destination", "DepartureDate", "Purpose", "ReturnDate", "DeparturePoint", "ReturnPoint"], - "properties": { - "Destination": { - "type": "array", - "minItems": 1, - "items": {"$ref": "#/definitions/Destination"}, - "default": [{"Country" : "NL"}] - }, - "DepartureDate": { - "title": "Departure date", - "type": "string", - "format": "date" - }, - "ReturnDate": { - "title": "Return date", - "type": "string", - "format": "date" - }, - "DeparturePoint": { - "title": "Departure point", - "type": "string" - }, - "ReturnPoint": { - "title": "Return point", - "type": "string" - }, - "AdvanceRequired": { - "title": "Advance required", - "type": "boolean" - }, - "Purpose": { - "title": "Purpose", - "type": "string" - }, - "Justification": { - "title": "Justification", - "type": "string" - }, - "Comments": { - "title": "Comments", - "type": "string" - } - } - }, - "Traveller": { - "title": "Traveller", - "type": "object", - "required": ["Name", "Email", "Nationality", "PassNo"], - "properties": { - "Name": { - "title": "Name", - "type": "string" - }, - "Email": { - "title": "Email", - "type": "string" - }, - "Nationality": { - "title": "Nationality", - "type": "string", - "enumNames": [ - "Albania", - "Belgium", - "Bulgaria", - "Canada", - "Croatia", - "Czech Rep", - "Denmark", - "Estonia", - "France", - "Germany", - "Greece", - "Hungary", - "Iceland", - "Italy", - "Latvia", - "Lithuania", - "Luxembourg", - "Netherlands", - "Norway", - "Poland", - "Portugal", - "Romania", - "Slovakia", - "Slovenia", - "Spain", - "Turkey", - "United Kingdom", - "USA" - ], - "enum": [ - "AL", - "BE", - "BU", - "CA", - "HR", - "CZ", - "DA", - "EN", - "FR", - "GE", - "GR", - "HU", - "IC", - "IT", - "LG", - "LH", - "LU", - "NL", - "NO", - "PL", - "PO", - "RO", - "LO", - "SI", - "ES", - "TU", - "UK", - "US" - ] - }, - "PassNo": { - "title": "Pass number", - "type": "string" - } - } - }, - "Destination": { - "title": "Destination", - "type": "object", - "required": [ - "City", - "Country" - ], - "properties": { - "Country": { - "title": "Country", - "type": "string", - "enumNames": [ - "Albania", - "Belgium", - "Bulgaria", - "Canada", - "Croatia", - "Czech Rep", - "Denmark", - "Estonia", - "France", - "Germany", - "Greece", - "Hungary", - "Iceland", - "Italy", - "Latvia", - "Lithuania", - "Luxembourg", - "Netherlands", - "Norway", - "Poland", - "Portugal", - "Romania", - "Slovakia", - "Slovenia", - "Spain", - "Turkey", - "United Kingdom", - "USA" - ], - "enum": [ - "AL", - "BE", - "BU", - "CA", - "HR", - "CZ", - "DA", - "EN", - "FR", - "GE", - "GR", - "HU", - "IC", - "IT", - "LG", - "LH", - "LU", - "NL", - "NO", - "PL", - "PO", - "RO", - "LO", - "SI", - "ES", - "TU", - "UK", - "US" - ] - }, - "City": { - "title": "City", - "type": "string" - } - } - }, - "Meeting": { - "title": "Meeting Details", - "type": "object", - "properties": { - "StartDate": { - "title": "Start date", - "type": "string", - "format": "date" - }, - "StartTime": { - "title": "Start time", - "type": "string", - "format": "time" - }, - "EndDate": { - "title": "End date", - "type": "string", - "format": "date" - }, - "EndTime": { - "title": "End time", - "type": "string", - "format": "time" - }, - "DurationIncLeave": { - "title": "Duration incl. leave", - "type": "integer" - } - } - }, - "Transport": { - "title": "Transport Details", - "type": "object", - "required": ["ModeOfTransport"], - "properties": { - "ModeOfTransport": { - "title": "Mode of transport", - "type": "string", - "enum": [ - "Shuttle", - "Staff car", - "Hire car", - "Train", - "Air", - "POMV" - ] - }, - "POMVMake": { - "title": "POMV make", - "type": "string" - }, - "POMVLicense": { - "title": "POMV license", - "type": "string" - } - } - }, - "Project": { - "title": "Project Details", - "type": "object", - "required": [ "Manager", "Assistant"], - "properties": { - "IMIS-code": { - "title": "IMIS-code", - "type": "string" - }, - "IMIS-activity-code": { - "title": "IMIS-activity-code", - "type": "string" - }, - "Manager": { - "title": "Project manager", - "type": "string" - }, - "ChiefServiceLine": { - "title": "Chief service line", - "type": "string" - }, - "Assistant": { - "title": "Project assistant", - "type": "string" - } - } - } - } - }, - "uiSchema": { - "TravelRequest": { - "ui:widget": "stepper", - "TravelDetails" : { - "Destination": { - "ui:help": "Destinations of travel. Click on the '+' to add more", - "items":{ - "ui:order":["Country", "City"] - } - }, - "Purpose": { - "ui:widget": "textarea", - "ui:help": "Short brief on the primary purpose for the travel" - }, - "Justification": { - "ui:widget": "textarea", - "ui:help": "Any additional points you would like to add to the purpose" - }, - "Comments": { - "ui:widget": "textarea", - "ui:help": "Any message or comment you would like to provide to the Approver" - } - }, - "Transport" : { - "POMVMake": {"ui:help": "Manufacturer and make of your personal vehicle"}, - "POMVLicense": {"ui:help": "License/ Registration number of your vehicle"} - }, - "TravellerDetails" : { - "Requestor": {"ui:widget": "user-selector", "multiSelect" : false, "role" : "Requestor"}, - "PointOfContact": { - "ui:widget": "user-selector", - "ui:help": "Person other than you who can be contacted for any queries on this travel", - "multiSelect" : false - }, - "Traveller":{ - "ui:help": "Details of person(s) travelling. Click on the '+' to add more", - "items":{ - "PassNo":{ - "ui:help": "Pass Number" - } - } - } - }, - "Project" : { - "IMIS-code": { - "ui:help": "Project Code" - }, - "IMIS-activity-code": { - "ui:help": "Project Activity Code" - }, - "Manager": {"ui:widget": "user-selector", "multiSelect" : false, "role" : "Approver"}, - "Assistant": {"ui:widget": "user-selector", "multiSelect" : false, "role" : "PersonalAssistant"} - } - } - } -} - - - \ No newline at end of file diff --git a/src/definitions/travelrequest.cfid b/src/definitions/travelrequest.cfid deleted file mode 100644 index c819242..0000000 --- a/src/definitions/travelrequest.cfid +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/definitions/travelrequest.dimensions b/src/definitions/travelrequest.dimensions deleted file mode 100644 index 84f1ec4..0000000 --- a/src/definitions/travelrequest.dimensions +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/definitions/travelstatus.cfid b/src/definitions/travelstatus.cfid deleted file mode 100644 index 0b58b9b..0000000 --- a/src/definitions/travelstatus.cfid +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/dex/conf/dex-setup.yaml b/src/dex/conf/dex-setup.yaml deleted file mode 100644 index b303988..0000000 --- a/src/dex/conf/dex-setup.yaml +++ /dev/null @@ -1,95 +0,0 @@ -issuer: "http://localhost:5556/dex" -storage: - type: sqlite3 - config: - file: /var/dex/dex.db -web: - http: 0.0.0.0:5556 - allowedOrigins: ["*"] - -telemetry: - http: 0.0.0.0:5558 - -oauth2: - # use ["code", "token", "id_token"] to enable implicit flow for web-only clients - responseTypes: [ "code", "token", "id_token" ] # also allowed are "token" and "id_token" - # By default, Dex will ask for approval to share data with application - # (approval for sharing data from connected IdP to Dex is separate process on IdP) - skipApprovalScreen: true - # If only one authentication method is enabled, the default behavior is to - # go directly to it. For connected IdPs, this redirects the browser away - # from application to upstream provider such as the Google login page -# alwaysShowLoginScreen: false -logger: - level: "debug" - format: "json" - -frontend: - dir: ./web - -staticClients: -- id: swagger-ui - redirectURIs: - - 'http://localhost:2027/oauth2-redirect.html' - name: 'Cafienne Swagger UI' - secret: ZXhhbXBsZS1hcHAtc2VjcmV0 -- id: generic-ui - redirectURIs: - - 'http://localhost:28080/#/oidcresponse' - name: 'Cafienne Generic UI' - secret: ZXhhbXBsZS1hcHAtc2VjcmV0 -- id: cafienne-ui - redirectURIs: - - 'http://localhost:3317/callback' - name: 'Cafienne UI' - secret: ZXhhbXBsZS1hcHAtc2VjcmV0 - -# Let dex keep a list of passwords which can be used to login to dex. -enablePasswordDB: true - -# A static list of passwords to login the end user. By identifying here, dex -# won't look in its underlying storage for passwords. -# -# If this option isn't chosen users may be added through the gRPC API. -staticPasswords: -- email: "admin@example.com" - # bcrypt hash of the string "password" - hash: "$2a$10$2b2cU8CPhOTaGrs1HRQuAueS7JTT5ZHsHSzYiFPm1leZck7Mc8T4W" - username: "admin" - userID: "admin" - -- email: "lana" #email is the login name for dex; - # bcrypt hash of the string "lana" - hash: "$2a$10$ZrEQl/enxrc1bhDWrwhKSePYkqCEf.2X3wXeat/hI0ULOptDUpyCS" - # userID is the account that is known and registered inside Cafienne engine - userID: "lana" - -- email: "lana@example.com" - # bcrypt hash of the string "lana" - hash: "$2a$10$ZrEQl/enxrc1bhDWrwhKSePYkqCEf.2X3wXeat/hI0ULOptDUpyCS" - # userID is the account that is known and registered inside Cafienne engine - userID: "lana" - -- email: "suzy@example.com" - # bcrypt hash of the string "suzy" - hash: "$2a$10$3pTi1m5yR.tBcZMV/dJi.O1NlMPN/ZH03eSmNfJFuTOOTm82T03lK" - # userID is the account that is known and registered inside Cafienne engine - userID: "suzy" - -- email: "suzy" - # bcrypt hash of the string "suzy" - hash: "$2a$10$3pTi1m5yR.tBcZMV/dJi.O1NlMPN/ZH03eSmNfJFuTOOTm82T03lK" - # userID is the account that is known and registered inside Cafienne engine - userID: "suzy" - -- email: "hank@example.com" - # bcrypt hash of the string "hank" - hash: "$2a$10$osTMgQ8GxoeWghmYcrBXB.0nV9XsoQkAMUcNlL0/wT7qYoJSnbJzS" - # userID is the account that is known and registered inside Cafienne engine - userID: "hank" - -- email: "hank" - # bcrypt hash of the string "hank" - hash: "$2a$10$osTMgQ8GxoeWghmYcrBXB.0nV9XsoQkAMUcNlL0/wT7qYoJSnbJzS" - # userID is the account that is known and registered inside Cafienne engine - userID: "hank" diff --git a/src/dex/web/static/img/atlassian-crowd-icon.svg b/src/dex/web/static/img/atlassian-crowd-icon.svg deleted file mode 100644 index cd94e30..0000000 --- a/src/dex/web/static/img/atlassian-crowd-icon.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - diff --git a/src/dex/web/static/img/bitbucket-icon.svg b/src/dex/web/static/img/bitbucket-icon.svg deleted file mode 100644 index 72f4eb1..0000000 --- a/src/dex/web/static/img/bitbucket-icon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/dex/web/static/img/coreos-icon.svg b/src/dex/web/static/img/coreos-icon.svg deleted file mode 100644 index db59cbc..0000000 --- a/src/dex/web/static/img/coreos-icon.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - diff --git a/src/dex/web/static/img/email-icon.svg b/src/dex/web/static/img/email-icon.svg deleted file mode 100644 index 5d60728..0000000 --- a/src/dex/web/static/img/email-icon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/dex/web/static/img/github-icon.svg b/src/dex/web/static/img/github-icon.svg deleted file mode 100644 index 5d60728..0000000 --- a/src/dex/web/static/img/github-icon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/dex/web/static/img/gitlab-icon.svg b/src/dex/web/static/img/gitlab-icon.svg deleted file mode 100644 index e8d408f..0000000 --- a/src/dex/web/static/img/gitlab-icon.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - - logo-square - Created with Sketch. - - - - - - - - - - - \ No newline at end of file diff --git a/src/dex/web/static/img/google-icon.svg b/src/dex/web/static/img/google-icon.svg deleted file mode 100644 index 9d4fe34..0000000 --- a/src/dex/web/static/img/google-icon.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/dex/web/static/img/ldap-icon.svg b/src/dex/web/static/img/ldap-icon.svg deleted file mode 100644 index 506dadc..0000000 --- a/src/dex/web/static/img/ldap-icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - Combined-Shape - Created with Sketch. - - - - - diff --git a/src/dex/web/static/img/linkedin-icon.svg b/src/dex/web/static/img/linkedin-icon.svg deleted file mode 100644 index 409bad5..0000000 --- a/src/dex/web/static/img/linkedin-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/dex/web/static/img/microsoft-icon.svg b/src/dex/web/static/img/microsoft-icon.svg deleted file mode 100644 index 739c395..0000000 --- a/src/dex/web/static/img/microsoft-icon.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/dex/web/static/img/oidc-icon.svg b/src/dex/web/static/img/oidc-icon.svg deleted file mode 100644 index e2817b0..0000000 --- a/src/dex/web/static/img/oidc-icon.svg +++ /dev/null @@ -1,156 +0,0 @@ - - - - - facebook web - - - - - - - - - - - - - image/svg+xml - - facebook web - - - User:ZyMOS - - - - - - - - - - - - - - - Open Icon Library - - - - - - - - - - - - - - - - - - diff --git a/src/dex/web/static/img/old-email-icon.svg b/src/dex/web/static/img/old-email-icon.svg deleted file mode 100644 index 10f0d8d..0000000 --- a/src/dex/web/static/img/old-email-icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - Shape - Created with Sketch. - - - - - diff --git a/src/dex/web/static/img/saml-icon.svg b/src/dex/web/static/img/saml-icon.svg deleted file mode 100644 index 506dadc..0000000 --- a/src/dex/web/static/img/saml-icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - Combined-Shape - Created with Sketch. - - - - - diff --git a/src/dex/web/static/main.css b/src/dex/web/static/main.css deleted file mode 100644 index 21ac5d8..0000000 --- a/src/dex/web/static/main.css +++ /dev/null @@ -1,140 +0,0 @@ -* { - box-sizing: border-box; -} - -body { - margin: 0; -} - -.dex-container { - color: #1f4e79; - margin: 45px auto; - max-width: 500px; - min-width: 320px; - text-align: center; -} - -.dex-btn { - border-radius: 4px; - border: 0; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.25), 0 0 1px rgba(0, 0, 0, 0.25); - cursor: pointer; - font-size: 16px; - padding: 0; -} - -.dex-btn:focus { - outline: none; -} - -.dex-btn:active { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - outline: none; -} - -.dex-btn-icon { - background-position: center; - background-repeat: no-repeat; - background-size: 24px; - border-radius: 4px 0 0 4px; - float: left; - height: 36px; - margin-right: 5px; - width: 36px; -} - -.dex-btn-icon--google { - background-color: #FFFFFF; - background-image: url(../static/img/google-icon.svg);; -} - -.dex-btn-icon--local { - background-color: #84B6EF; - background-image: url(../static/img/google-icon.svg); -} - -.dex-btn-icon--coreos { - /* B&W CoreOS SVG logo */ - background-image: url(../static/img/coreos-icon.svg); -} - -.dex-btn-icon--github { - background-color: #F5F5F5; - background-image: url(../static/img/github-icon.svg); -} - -.dex-btn-icon--gitlab { - background-image: url(../static/img/gitlab-icon.svg); - background-size: contain; -} - -.dex-btn-icon--oidc { - background-image: url(../static/img/oidc-icon.svg); - background-size: contain; -} - -.dex-btn-icon--bitbucket-cloud { - background-color: #205081; - background-image: url(../static/img/bitbucket-icon.svg); -} - -.dex-btn-icon--atlassian-crowd { - background-color: #CFDCEA; - background-image: url(../static/img/atlassian-crowd-icon.svg); -} - -.dex-btn-icon--ldap { - background-color: #84B6EF; - background-image: url(../static/img/ldap-icon.svg); -} - -.dex-btn-icon--saml { - background-color: #84B6EF; - background-image: url(../static/img/saml-icon.svg); -} - -.dex-btn-icon--linkedin { - background-image: url(../static/img/linkedin-icon.svg); - background-size: contain; -} - -.dex-btn-icon--microsoft { - background-image: url(../static/img/microsoft-icon.svg); -} - -.dex-btn-text { - font-weight: 600; - line-height: 36px; - padding: 6px 12px; - text-align: center; -} - -.dex-subtle-text { - color: #999; - font-size: 12px; -} - -.dex-separator { - color: #999; -} - -.dex-list { - color: #999; - display: inline-block; - font-size: 12px; - list-style: circle; - text-align: left; -} - -.dex-error-box { - background-color: #DD1327; - color: #fff; - font-size: 14px; - font-weight: normal; - max-width: 320px; - padding: 4px 0; -} - -.dex-error-box { - margin: 20px auto; -} diff --git a/src/dex/web/templates/approval.html b/src/dex/web/templates/approval.html deleted file mode 100644 index 2fa7bf2..0000000 --- a/src/dex/web/templates/approval.html +++ /dev/null @@ -1,40 +0,0 @@ -{{ template "header.html" . }} - -
-

Grant Access

- -
-
-
{{ .Client }} would like to:
-
    - {{ range $scope := .Scopes }} -
  • {{ $scope }}
  • - {{ end }} -
-
-
- -
-
-
- - - -
-
-
-
- - - -
-
-
- -
- -{{ template "footer.html" . }} diff --git a/src/dex/web/templates/device.html b/src/dex/web/templates/device.html deleted file mode 100644 index 674cbdc..0000000 --- a/src/dex/web/templates/device.html +++ /dev/null @@ -1,23 +0,0 @@ -{{ template "header.html" . }} - -
-

Enter User Code

-
-
- {{ if( .UserCode )}} - - {{ else }} - - {{ end }} -
- - {{ if .Invalid }} -
- Invalid or Expired User Code -
- {{ end }} - -
-
- -{{ template "footer.html" . }} diff --git a/src/dex/web/templates/device_success.html b/src/dex/web/templates/device_success.html deleted file mode 100644 index 53b09ce..0000000 --- a/src/dex/web/templates/device_success.html +++ /dev/null @@ -1,8 +0,0 @@ -{{ template "header.html" . }} - -
-

Login Successful for {{ .ClientName }}

-

Return to your device to continue

-
- -{{ template "footer.html" . }} diff --git a/src/dex/web/templates/error.html b/src/dex/web/templates/error.html deleted file mode 100644 index 418f76f..0000000 --- a/src/dex/web/templates/error.html +++ /dev/null @@ -1,8 +0,0 @@ -{{ template "header.html" . }} - -
-

{{ .ErrType }}

-

{{ .ErrMsg }}

-
- -{{ template "footer.html" . }} diff --git a/src/dex/web/templates/footer.html b/src/dex/web/templates/footer.html deleted file mode 100644 index 5b6e2d6..0000000 --- a/src/dex/web/templates/footer.html +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/dex/web/templates/header.html b/src/dex/web/templates/header.html deleted file mode 100644 index 068ac4d..0000000 --- a/src/dex/web/templates/header.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - Login for Cafienne - - - - - - - -
-
- -
-
- -
- diff --git a/src/dex/web/templates/login.html b/src/dex/web/templates/login.html deleted file mode 100644 index 420166f..0000000 --- a/src/dex/web/templates/login.html +++ /dev/null @@ -1,19 +0,0 @@ -{{ template "header.html" . }} - -
-

{{ issuer }}

-
- {{ range $c := .Connectors }} - - {{ end }} -
-
- -{{ template "footer.html" . }} diff --git a/src/dex/web/templates/oob.html b/src/dex/web/templates/oob.html deleted file mode 100644 index ba84d81..0000000 --- a/src/dex/web/templates/oob.html +++ /dev/null @@ -1,9 +0,0 @@ -{{ template "header.html" . }} - -
-

Login Successful

-

Please copy this code, switch to your application and paste it there:

- -
- -{{ template "footer.html" . }} diff --git a/src/dex/web/templates/password.html b/src/dex/web/templates/password.html deleted file mode 100644 index 1f693c5..0000000 --- a/src/dex/web/templates/password.html +++ /dev/null @@ -1,42 +0,0 @@ -{{ template "header.html" . }} - -
-

Log in with a user name or email address.

-
-
-
- -
- -
-
-
- -
- -
- - {{ if .Invalid }} -
- Invalid {{ .UsernamePrompt }} and password. -
- {{ end }} - - - -
- {{ if .BackLink }} - - {{ end }} -
-

Cafienne demo accounts -

suzy
-
lana
-
hank
-

-
- - -{{ template "footer.html" . }} diff --git a/src/dex/web/themes/coreos/favicon.ico b/src/dex/web/themes/coreos/favicon.ico deleted file mode 100644 index d7e130bd7c5fcca6aa123cdeb5992ae51c49135d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 zcmeI3`;V5z6~|vd1r-nh5fycpWw{7)DJT$7ZgLfirAWJ8`D~A zOxkE`FG;OU(COQG$Xd^0oW%$#%P%$YMY z&qAv;t~H@GZCZ=6r*-DKR_no5tJTwUvHd>uccCp`UbOpLt!=lpS_|m|ixC&;6s;Eh zhV%Q?&J9z*W~p)+cn5L!a^B7BB}mW_AJV(x!s(RXNbcftx|}zk|BE zZHEogf`1eBaUqBL3?N@UcNOKGlrh%&Z5hwL)3fo~9I`EQ{b57skMfpmyz{c3dU6{= zW=^w@^r_kSTMJs=FKloQ*5!qK$KP5r-oEyUF){y;6};;BZtd5HA!ACWzs`R#_uPh{ zS?2z`-1RelCWBa;urc(7KWy8_SS#Zvn}=~f4K&5Cyl(cv_4JE*M>)*hoA#mWQu;aU z%*(;SR_k(Lp6LM_f%z%@Og#TZKYVx}aH?1AhdyJ{xHcy)151m#w6@qAZNtzp37iHq zLpF8y?eA#b z1g?d9Z0<;`V4Q30Ubj2|k{n9qPXteb=|FzO!x8G*l+Hm)?cT3`$|S2>Tj=jucN~0A-k;<@JO6FQNYd_=|vkHYYoF6EN@VTh~tm3 zcn&LbF<9B8Kj`#v>;TC9?_NI~eJp8j1)D3hC!m#cq^?aT!JT=(x;lOI>k4_4#+kP7 z1;)8`=Ox`W)<61G7>kF1d|}^SuqR{{(>v$XX+9?U;@w==Ak&3 z?JrH9eeA2x&CkkEmi_f>F^ZqNHQ z%zqdC)&`Hdemnxod`8`QoB%Vje&%1}rOdz7=YuarA4}TnLCT>yJ?ijWN8?)m*;jwM z_gr)DE~|hx=^uISm4!uJnmqTAYp9)$wV!@+pSm~7`*G-v5}y0mapuo$z_E_ghsM)- z`%=2L>RJw#7WH&*rEVTDUX6RlDq}lvjB(QVZh^NOr1dQHsN*YOerBWgod%aY|KRJF zCu3Y8Pe1I+X?Y!_^s+X^{pooSojeD>*+pgGrhz%lMceWxsAMA_Hp zI`cX__lNn@b#Ol!zr97<@y(7)SD@Da(AVjK(|!Z!379n2+O} z!$FYtY|+*qM?o1!)QuO?*_)WH0N&oxyH^(p9*t}aVlRp&e(rc znUu;(XGZAgwq)EApnUat*K`lB0Oldr)pd3amIHa(>Ux;V%Q);-UsFG2fxYr6rn2134Z;C|58=EDWR7?3uiHE!~GCp!9E^JSg-UCsQ# z|M1U1{c;3P^of?=dN}QR?sV9YB2@Sd+~m-C=A)pAU9{ zj^C$a{Aicx_OAOb*j*5KDxKC(Z1=ORkW?&m-Y2t9qZw} zUY+H4myyl|8Qvp50&RD8Xp_MoL3+1p)$(FL_?GeA6Z^=wVfsrF zw}4G=1_9Q0CL%Lo@!(V<&@_ zm(afj-UMB}Bj{($%uxoV^D(c4PxVuJhf(T(eUtmtw?p{N?{cv=?hW6UQwq7RRqP|> zxEGR-DLq%*AEDEA>d)uYZQXI;uV7Ji3^e2aJ+QCJvkm=a@L~h+5WL@lw)_vx?=9*a zQ9e~Bh`yAJd+rbZz`TldqNiBc{zE>6?W#ATRf+`8L|-oY3jsP-o;L_e0w} z8~mb8uYpqy{NwOm2X*nk2KxJee^D~@2hDF1e*kUYd7v5p#`n>oqb|0fe+~QqB)`=4 z37UPt77%~0u&w;ur(3hOyvX>Tqo-0 zo-?4#iNU9IFFXZOj4MBQMO_=Whu#X$JarVr8ss{SHFf6sspN;ex{@)j<#V9vO#LFf z=Rt~#Tn04rhH={VFB+hkXMYIl@|gM39AEo40O*H-d!XYS=%f9oz@xcsQHO4vJ_Fj$ z5@-v-cR=}XWwLRe+w$7-I5hXkvtUc~&r9fg!Ew;h{(PKu#<-R*fOKcb`OqeUv!E@f z6l3+<{(MZ-p|1h@H08{o7vt`RuFkeRmiOzXjtphJ0eY(ap?OYxA8e@dY(qZ{1{!$g zxbK0sJ0`R~@DtGZHg-&zVK9K*ttBe)sYk_$%a;EW?)|IjcxXy9zC@Xlr-v>a- zDbhhM!}B=(&8n~?*Xg|~ePeF2JLt*;`sJyhiIKBcg}nuG|$vugFQJt>d^Js3(?L? z=$_MlPiec?KwAv{1bXr@-PRfB+0ti!O5^UOEyhjd?{^gQ#e7dgdmK5<_*F6G5rQ#m~#{BL}P9M@c(`Mzq4$*SG9 z8KWNG@84+P`+k2L)W!cp(EkS7bV1X;PVe^<4LZHsy$QOFe`7l0*7>*}!l!enm$5|M zds(cFXT=vl_|3f%`^bE=62yC6AIBQIj^@mCU!XMKt26eI>(rLN>*iXeG0xoeVcmFW zlfm!6W7ToCp}!2yHSoMI{07wJfAfVpd+WvyhlUJ&xD|xo%ykjN`e`GGJB@2)?ueN7 zoLHtlX$3EQYHspg6YJ{UiFI>ts59N8hGTE1zQ}wU{0P*=zxM^#qwU@c&Aj>^SXtEp zO`p60j#PQ0-A0E#-3h|Su0hn@8{YZz?Z6|4qNwkoUA}26JoD5skYawUZS6)r zws_{h0_xuH)1ki#MwAD;(SNypu+4Mh97yMAE)SaLg!k$GoPIUevGpLRJsYlOyTdkY ze+Hb4_O(`GyJuFppRYChuY|o9|Cy5iC(7TY%1=KT%75weA??pT{p90({Dt%9|CO~r ylmBrh|HAptFU@~x2!C*}s=u)J!q9$6Po{UUjz83nVc9uYo#$Z14^4J9`1jwDa`6d4+8(>9bP>K(uL_bh+C?|oh8y3ciA=ep1RT|S@h=l-T1ak3K61ZnPkFjaA8M7PKSm2lJLL*zmSvoT@L4b{qb15uU`bQ7jFsx z65={#p>W zIFl7C4aorZTDWt<#dXsH2ut<0O5;@`q_*nTLg3%Um4)bbg;aL=91zfH6XxMq$|c=7 zi)Q3$!TdljgRoy;S>m(7vF!j>0JrvSpx`+K0hV8fL5Km>oniG0G*8srU^rP| zwW6dkTzN1eV1vCje-Ik)ggnLI_B496@6yu1WxxD6rLlQ%uuFzWR2skq_aw#f8qQ^4 z0Get^LVBP7^};+PIZtslzE*#sMNi+w>v(>-FwXLhI?q8F`84`mAwQ*x$4eFoHeT+0 z`Rz*Ot*5Hrze}*1$1Y9JyT8VpQ}%O%n}x3vU0`!!Sob{lzXGw^PQa?xD>iyQQaPCp@!5u%+r(hgAzjLN%#;0O z;Er_7d!;|_wil%W6!yg&D=nX=eDX_5(`@nHV>2z~tSqF_Ky?bHC&FA}^wDMiE6uJ# zC2eE_=Fs6zyfSmz6bvfuI~UwezB622eNpg15e)4s1+_puFvtMjImXtrwmKORS?vb) z>M}bdDV%uxZSzKFjXtFQ(CScI*U;W%3<-34hR0b=KsW)AM|(pOx^)K=p(y2du7~Wt zL6qN@(WnP@+?lt%kc2wPJ)VXMC`oG{yOWoO0hxO4Qc5p2dU9fjX)^7fE<+>9P@p2* zpMatD$1Ou#$3rl$!v(6S=Z~!N3ZB>fdhg6j^4_oac1)m0X8loXluP2WDFPbcb^47M z;V*}Y7#N2LQrKGd%3NAWhxfmFG0W5HiFHAu1=q z#{I#x_`bCCK$_l5Schh##yv5rP12ejlC9W2MYnpCx@Yt$!j0Dd)v*&V#?UilV$&#^ z+>ihVs#35-VD+K`2ctB!1B~rNGYbZ6AP(*1A~gKKPMOGxG8Xdd#`bMh(KKE4cluV2 z!B1pKe_l@ea`RI7WC(j`5OPRKmmpRUa>5pb`I-)pV}m zJBC6ZM1H#>^*9R*b%AHL!F;fvm!lH@Uq%7|?Q*KO_vtreQS+%ANw-Sd$j{J5Sy6kG!&1qLu;U zX$>AuQ~g{h>Qc#AD;og=_2Hgf?_7#=?7NKeYah zZTc^Eh+FQFbdEezxBQdUEq!J4+kiqE-Y8ki{KNpX&NhfmYr0;yB6SiP3Sa0(n(>Da zzG+x%M4 zVm*ipE{EmKs$Wy;Mpym24pQpGm8mwUsUa)MKS=@rJi1J2tpVdR^&PEqrJ#m2_&pzU z>V-|%ll_U{L_S^V`?g+e;iHihI!>vq0HZ5~`qRf?w$|x;S@a9L8?qI_oHX?ipz0?> zo@y}d$7l8GMQhJeh0E_B-h2K2w)^+SaJ7&H@t~zpF%I6RtwOGg!I0m_Lpv9CNTF1x zvG0e_?zG7Cs9Ri@IH^#4JMPOHrylZNc2kjDs1dH*Ty(XfMVDFY^sQ54z~Pt`B4~=3 zkECj1?d)9bB2jUM=S zc?bK0o4f=5?f4UfHeS@<4*05fmPp``CcPed4Q{Zlt^8D>n;&xN?I{?If+3Q+*78ey zCUWDI+>zturlO2m@zAjyqySA`EyWJPI zwB-MeV^gvQ6VBHj&ali@POCz9*F(U*Yd8GCE`l?mZAKQ{#1X~8j%P3X?NQlklsz{w z9uUDrYm*cZO41lgJ^qdy>m&HRwT_9ES&VJWX2qh+X#=r`2voMiPh*QlD??gt`lF>f z$3|v0I3i~a28p4b_77Mu42ufH%ZV;d^FV!;@OWB!&#p!$c4CNAFy>6z#FgF4@)OU6 zZ$h-MbrKprNjDFSA;;sQ{pK!-*Bck&^QBN2uVgpqaqfrrM{N#N=32$k-)5&{(McDq zwo;fb>HIe1(C!P44R^0ZRH;$)9i>1H=i$#ffnG2N1`}h9hfEbbW%`(n7OcvLv{886%e4zui3R_g2%KB2Q>$icyFHs7XE#r0s| z>pqeoSRJ`Dvm2jCpYSq9g1N1dMOAOzXH-09)WAIip@D?y}o zlTEf?m~#>GoH^20D)*~u*xf{hF(jNw7CoOY7djS2ARZL|$M86QiKkDV*RbA&m=Nn$ z%IZfo=`CvBw|tF$O+BCa`4X?e8k&UVQBW{rNR`mK`;%Vo(x1}JU)Ss{T4mwpCVdHl z#}sMv+K*3fjs*%Xy!*3Nl2oC}{I4z)o7Z#xR%SA3E>Usv7Ij=64BGd()iT z{hV$&ghLNMwU;&DqeGwKb3I8rp^-8J1__TElKrJPYA>&q6>Ik5?C#?+hZ5YJ7cc3| z=f)(IPTHuBk(9uH>;|%x{B6GfuH;i3r?eGdPIZ#?K3jF)lJnX~D!G7tkXrw&9eo%! z5}Rp4#X7#QBT^@im)@|gywPA=8CY1%srYN^(`-q?)xJj&JqE>cRBh^DG(RyXl8!~< zY_@>U%=mDi6P*<%2sSEcJE;NXyj6|%-Q_j@O2EaKFzyjd*(q1Z+Xk}g4^^EOClwvH z1_wI7YfOzv6`h{AO@v3X={U1`Auyas+zA`F%26WkYN5z~F6EOuSd8?v2+Q zRzYVTUS6Z<&qa?Y?KBF-Eeycdt++cHYwy)N?(gPEq`tv4e>8P^&B5E@!G1fv>C(LB zFg3e-95QV~r`{R%GO+-ghk92~PqHdQ7V(+{hxho{u(1!h{UV!Rv)KP+!*9Ot1)uNB z4x7yIn?r=Qu07A1W}{}etWwZ7c>$3;WEM}?D;12-^5GUSZ+0xs`1g_xuoLZYlDCA* z!%N(iakr;#q|i^E1j#8J7}C{gHtG&;)oz=owt^h9cS|vv?jZ3S4HzLlMly3UT}tv0 zUpIRAwq&7+HTXyg43R+csJ9&dJQ3a6i?LopDuPa(_~0ILK{h5_XRt!`d!f$09Ex~o zg&lM=8B&J``J};0b4{}q%wj0?`7`ILSF6veEz#WfSF|~ru(OxKQ@oc|XM93t{hsGd zZcb6?8_Uwtj~1WXOFqGvG_}`2QoR!~=M+cjAF!zrOluiM_FV?7pfZ`cnWP9)vpEGe zu2@0kgz7t|`D5dD>GT&~P#mViej{HSN=OeCXxVh5+W%3K9U7)|=|ci^aOYlBFC53) zRudo@7k559q3@NS$73nN80W64QmZb-RAOI!YQskR9KQX5@k!xcNKwZx<>?`dRyE&*^4ls@nnzDP@m^c`@aTi# zfh_YqZpqO4Pqxn>Ikq|0CG2nA&vAn;4*g_r$K$+7e~ZUK%SOhr>Nj`DJl2Rdn8xn> z9l6e6cW2+LZo!)ESS5eQKbsX ze>9~`pd3-$&<^=7Rqm%!hj{bkNEPP90Q(?{_U_F0v4mUhgE4ZyUVUUeHJp$GSE64P zJblFX1F5jN){6b{@Ad)^wu6+uSVvwrANHxBq>kqPr`eI7Q|8og6Mq^480=k>7xfy0 z6yawdYNs=~&%_EuibXcFUlK>pbMz0ofLfH}`J#bx_fBOI z!Wf|&QO`ZnzPD%23dCe#djHrqDB?+XE>Lq#hRW;A5qq@v-oA4_u!wQ`iKdeh?7nm*`sjhT4=JT*F)hECUe_O47K1Jv - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - complete - - - - - - - - - - - - - - - { - "schema" : { - "title" : "You have received a greeting", - "type" : "object", - "required" : [ - "Response" - ], - "properties" : { - "Greeting" : { - "title" : " ", - "type" : "object", - "properties" : { - "Message" : { - "type" : "string" - } - } - }, - "Response" : { - "title" : "Your response", - "type" : "object", - "properties" : { - "Message" : { - "type" : "string", - "title" : "Your response message" - }, - "Date" : { - "type" : "string", - "format" : "date", - "title" : "Pick a date" - }, - "Time" : { - "type" : "string", - "format" : "time", - "title" : "Pick a time" - }, - "SomeBoolean" : { - "type" : "boolean", - "title" : "Check this" - } - } - } - } - }, - "uiSchema" : { - "ui:order": [ "Greeting", "Response" ], - "Greeting" : { - "Message" : { - "ui:widget" : "textarea", - "ui:readonly" : true - }, - "To" : { - "ui:readonly" : true - } - }, - "Response" : { - "Message" : { - "ui:widget" : "textarea" - } - } - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { - "schema": { - "title": "Read response", - "type": "object", - "properties": { - "Response": { - "title": "Your response", - "type": "object", - "properties": { - "Message": { - "type": "string", - "title": "Your response message" - }, - "Date": { - "type": "string", - "format": "date", - "title": "Pick a date" - }, - "Time": { - "type": "string", - "format": "time", - "title": "Pick a time" - }, - "SomeBoolean": { - "type": "boolean", - "title": "Check this" - } - } - } - } - }, - "uiSchema": { - "Message": { - "ui:widget": "textarea" - } - } - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { - "schema": { - "title": "Greeting", - "type": "object", - "required": [ - "Greeting" - ], - "properties": { - "Greeting": { - "title": "Your greeting to the World", - "type": "object", - "properties": { - "Message": { - "type": "string", - "title": "Your message" - }, - "To": { - "type": "string", - "title": "To whom?" - }, - "From": { - "type": "string", - "title": "From", - "default": "$CURRENT_USER" - } - } - } - } - }, - "uiSchema": { - "Greeting": { - "Message": {"ui:widget": "textarea"}, - "To" : {"ui:widget": "user-selector", "multiSelect" : false, "role" : "Receiver"}, - "From" : {"ui:widget": "user-selector", "multiSelect" : false, "role" : "Sender"} - } - } -} - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/test/CafienneSetup.ts b/test/CafienneSetup.ts new file mode 100644 index 0000000..2793b2d --- /dev/null +++ b/test/CafienneSetup.ts @@ -0,0 +1,11 @@ +import Config from "@cafienne/typescript-client/config"; +import MockServer from "@cafienne/typescript-client/mock/mockserver"; + +Config.Log.level = 'debug'; +Config.TestCase.log = true; +Config.CafienneService.url = 'http://test_engine_service:2027/'; +Config.TokenService.url = 'http://test_token_service:2077/token'; +Config.TokenService.issuer='http://localhost:33077' +Config.RepositoryService.repository_folder = './CaseFiles/Compiled'; +Config.TestCase.polltimeout = 10_000; +export function CreateMockServer(): MockServer { return new MockServer(12378) }; diff --git a/test/CallMeBackTest.ts b/test/CallMeBackTest.ts new file mode 100644 index 0000000..8db97f1 --- /dev/null +++ b/test/CallMeBackTest.ts @@ -0,0 +1,97 @@ +'use strict'; + +import { assertPlanItem, CaseOwner } from "@cafienne/typescript-client"; +import CaseTeam from "@cafienne/typescript-client/cmmn/team/caseteam"; +import CaseTeamUser from "@cafienne/typescript-client/cmmn/team/caseteamuser"; +import MockServer from "@cafienne/typescript-client/mock/mockserver"; +import PostMock from "@cafienne/typescript-client/mock/postmock"; +import CasePlanService from "@cafienne/typescript-client/service/case/caseplanservice"; +import CaseService from "@cafienne/typescript-client/service/case/caseservice"; +import RepositoryService from "@cafienne/typescript-client/service/case/repositoryservice"; +import assertCaseFileContent from "@cafienne/typescript-client/test/caseassertions/file"; +import State from '@cafienne/typescript-client/cmmn/state'; +import { CreateMockServer as CreateMockServer } from "./CafienneSetup"; +import TestTenant from "./testtenant"; + +// global setup +const callMeBackDefinition = 'CallmeBack.xml'; + + +const testTenant = new TestTenant(); +const tenant = testTenant.name; +const partner = testTenant.partner; +const employee = testTenant.employee; +const SuccessId = "Success"; +const NotifyBackId = "Notify"; +const ReturnsError500 = "Fail"; + +async function setupMockServer(mockServer: MockServer) { + new PostMock(mockServer, '/cmmn-wrapper', call => { + call.onJSONContent(async function (post: any) { + if (post.Task == SuccessId) + { + call.res.status(200).end(); + } + if (post.Task == NotifyBackId + ) + { + var caseInstanceId = post.CaseInstanceId; + var event = await assertPlanItem(employee, caseInstanceId, 'NotifyDone'); + await CasePlanService.raiseEvent(employee, caseInstanceId, event.id); + + call.res.status(200).end(); + } + else if (post.Task == ReturnsError500) + { + call.fail(500, ReturnsError500); + } + }) + }); + + await mockServer.start(); +} + +describe('CallMeBackTest', async function () { + var mockServer = CreateMockServer(); + const caseTeam = new CaseTeam([ + new CaseOwner(employee), + new CaseTeamUser(partner), + ]); + + + this.beforeAll(async function () { + await setupMockServer(mockServer); + await testTenant.create(); + await RepositoryService.validateAndDeploy(partner, callMeBackDefinition, tenant); + }); + this.afterAll(async function() { + await mockServer.stop(); + }); + + it('CallbackReturns200Ok', async function () { + const startCase = { tenant, definition: callMeBackDefinition, inputs:{ "task": SuccessId}, caseTeam, debug: true }; + + var caseInstance = await CaseService.startCase(employee, startCase); + console.log(caseInstance); + + await assertPlanItem(employee, caseInstance.id, "CallMeBack", 0, State.Completed); + }); + it('CallbackNotifiesCase', async function () { + const startCase = { tenant, definition: callMeBackDefinition, inputs:{ "task": NotifyBackId}, caseTeam, debug: true }; + + var caseInstance = await CaseService.startCase(employee, startCase); + console.log(caseInstance); + + await assertPlanItem(employee, caseInstance.id, "NotifyDone", 0, State.Completed); + await assertCaseFileContent(employee, caseInstance.id, "output/success", true); + }); + it('CallbackReturns500ISE', async function () { + const startCase = { tenant, definition: callMeBackDefinition, inputs:{ "task": ReturnsError500}, caseTeam, debug: true }; + + var caseInstance = await CaseService.startCase(employee, startCase); + console.log(caseInstance); + + await assertPlanItem(employee, caseInstance.id, "CallMeBack", 0, State.Completed); + await assertCaseFileContent(employee, caseInstance.id, "output/success", false); + }); +}); \ No newline at end of file diff --git a/test/HelloWorld.ts b/test/HelloWorld.ts new file mode 100644 index 0000000..e4fbd2b --- /dev/null +++ b/test/HelloWorld.ts @@ -0,0 +1,37 @@ +'use strict'; + +import { assertPlanItem } from "@cafienne/typescript-client"; +import CaseTeam from "@cafienne/typescript-client/cmmn/team/caseteam"; +import CaseTeamUser, { CaseOwner } from "@cafienne/typescript-client/cmmn/team/caseteamuser"; +import CaseService from "@cafienne/typescript-client/service/case/caseservice"; +import RepositoryService from "@cafienne/typescript-client/service/case/repositoryservice"; +import State from '@cafienne/typescript-client/cmmn/state'; +import TestTenant from "./testtenant"; + +// global setup +const helloWorldDefinition = 'HelloWorld.xml'; +const testTenant = new TestTenant(); +const tenant = testTenant.name; +const partner = testTenant.partner; +const employee = testTenant.employee; + +describe('HelloWorldTest', async function () { + const caseTeam = new CaseTeam([ + new CaseOwner(employee), + new CaseTeamUser(partner), + ]); + + this.beforeAll(async function () { + await testTenant.create(); + await RepositoryService.validateAndDeploy(partner, helloWorldDefinition, tenant); + }); + + it('CreateAndCompleteCase', async function () { + const startCase = { tenant, definition: helloWorldDefinition, inputs:{}, caseTeam, debug: true }; + + var caseInstance = await CaseService.startCase(employee, startCase); + console.log(caseInstance); + + await assertPlanItem(employee, caseInstance.id, "HelloWorld", 0, State.Completed); + }); +}); \ No newline at end of file diff --git a/test/docker/docker-compose.yml b/test/docker/docker-compose.yml new file mode 100644 index 0000000..18cbcbc --- /dev/null +++ b/test/docker/docker-compose.yml @@ -0,0 +1,99 @@ +# This docker-compose file launches the Token Generator +# +# To run, call: +# $ docker-compose up +# +version: '3.1' + +services: + test_token_service: + image: spectare/oidc-token-test-service:latest + labels: + component: idp-test-service-for-cafienne + networks: + - dev + ports: + - "33077:2077" + environment: + BIND: 0.0.0.0 + PORT: 2077 + EXPOSED_HOST: http://localhost:33077 + hostname: test_token_service + container_name: test_token_service + test_engine_service: + image: docker.io/cafienne/engine:1.1.21 + labels: + component: cafienne-engine + networks: + - dev + ports: + - "33027:2027" + hostname: test_engine_service + container_name: test_engine_service + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:2027/api-docs/swagger.json"] + start_period: 10s + interval: 10s + timeout: 2s + retries: 5 + environment: + - TestBaseUrl=http://workspace:12378 + volumes: + - ../../bin/run/cafienne/journal:/opt/cafienne/journal + - ../../bin/run/cafienne/logs:/opt/cafienne/logs + - ../../bin/run/cafienne/definitions:/opt/cafienne/definitions + - ./src/conf:/opt/cafienne/conf + - ./src/bootstrap:/opt/cafienne/bootstrap + test_ide_service: + image: docker.io/cafienne/ide:latest + labels: + component: test_ide_service + networks: + - dev + ports: + - "33081:2081" + hostname: test_ide_service + container_name: test_ide_service + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:2081/repository/list"] + start_period: 10s + interval: 10s + timeout: 2s + retries: 5 + environment: + BACKEND_API_URL: ${BACKEND_API_URL:-http://test_engine_service:2027} + volumes: + - ../../CaseFiles/Compiled:/usr/src/app/repository_deploy + - ../../CaseFiles/PreCompiled:/usr/src/app/repository + generic_ui: + image: cafienne/cafienne-ui:latest + labels: + component: generic_ui + networks: + - dev + ports: + - "33080:80" + hostname: generic_ui + container_name: generic_ui + environment: + NODE_ENV: production + OIDC_URI: http://localhost:33077 + OIDC_CLIENT_ID: generic_ui + CAFIENNE_URI: http://localhost:33027 + healthcheck: + test: ["CMD", "curl", "-sS", "-o", "/dev/null", "http://generic_ui/index.html", ] + interval: 10s + timeout: 5s + retries: 6 + depends_on: + - test_engine_service + - test_token_service + +networks: + dev: + driver: bridge + ipam: + driver: default + config: + - subnet: 172.16.238.0/24 + gateway: 172.16.238.1 \ No newline at end of file diff --git a/src/bootstrap/world.tenant.conf b/test/docker/src/bootstrap/world.tenant.conf similarity index 96% rename from src/bootstrap/world.tenant.conf rename to test/docker/src/bootstrap/world.tenant.conf index a4b5585..ee69e4f 100644 --- a/src/bootstrap/world.tenant.conf +++ b/test/docker/src/bootstrap/world.tenant.conf @@ -1,18 +1,18 @@ -name = "world" -owners = ["CgRsYW5hEgVsb2NhbA", "CgRzdXp5EgVsb2NhbA"] -users = [ { - id = "CgRzdXp5EgVsb2NhbA" - name = "suzy" - email = "suzy@example.com" - roles = ["PersonalAssistant", "Approver", "Requestor"] -}, { - id = "CgRsYW5hEgVsb2NhbA" - name = "lana" - email = "lana@example.com" - roles = ["PersonalAssistant", "Approver", "Requestor"] -}, { - id = "CgRoYW5rEgVsb2NhbA" - name = "hank" - email = "hank@example.com" - roles = ["Approver", "Requestor"] +name = "world" +owners = ["CgRsYW5hEgVsb2NhbA", "CgRzdXp5EgVsb2NhbA"] +users = [ { + id = "CgRzdXp5EgVsb2NhbA" + name = "suzy" + email = "suzy@example.com" + roles = ["PersonalAssistant", "Approver", "Requestor"] +}, { + id = "CgRsYW5hEgVsb2NhbA" + name = "lana" + email = "lana@example.com" + roles = ["PersonalAssistant", "Approver", "Requestor"] +}, { + id = "CgRoYW5rEgVsb2NhbA" + name = "hank" + email = "hank@example.com" + roles = ["Approver", "Requestor"] }] \ No newline at end of file diff --git a/src/conf/local.conf b/test/docker/src/conf/local.conf similarity index 76% rename from src/conf/local.conf rename to test/docker/src/conf/local.conf index bef883e..b6a41b0 100644 --- a/src/conf/local.conf +++ b/test/docker/src/conf/local.conf @@ -1,184 +1,191 @@ -# Default application.conf runs the Case Service with -# Cassandra as storage for events and -# Postgres as storage for the projections to enable the Case queries and -# Akka as the runtime system -# All of these can be configured through this conf file. -# In addition many settings can also be passed as environment variables - -akka { - loglevel = INFO - loggers = ["akka.event.slf4j.Slf4jLogger"] - logger-startup-timeout = 10s - - actor { - serialize-messages = on - - serializers { - cafienne_serializer = "org.cafienne.infrastructure.serialization.CafienneSerializer" - } - serialization-bindings { - "org.cafienne.infrastructure.serialization.CafienneSerializable" = cafienne_serializer - } - } - - persistence { - journal { - # Using Dennis Vriend in-mem journal - plugin = "inmemory-journal" - auto-start-journals = ["inmemory-journal"] - } - snapshot-store { - plugin = "inmemory-snapshot-store" - } - } -} - -cafienne { - # Engine wide platform settings - platform { - # Platform has owners that are allowed to create/disable/enable tenants - # This property specifies the set of user-id's that are owners - # This array may not be empty. - owners = ["admin", "CgVhZG1pbhIFbG9jYWw"] - owners = ${?CAFIENNE_PLATFORM_OWNERS} - # Default tenant will be used when a user does not provide the tenant as a parameter to - # the API call (e.g. in StartCase). When the user is member of only one tenant, - # then that tenant will be submitted along with the StartCase command. - # If the user belongs to multiple tenants, then this default-tenant option will be passed. - default-tenant = "world" - default-tenant = ${?CAFIENNE_PLATFORM_DEFAULT_TENANT} - # bootstrap-file holds a reference to a json or yaml file that has default tenant information. - # E.g., tenant name, tenant owners, tenant users can be given in this file. - # During launch of the case engine, the file will be scanned and a special CreateTenant command is sent - # into the system, thereby setting up a default tenant with owners and users. - # The bootstrap configuration will search for this file, and try to parse it into a standard akka Config - # object. - # If the bootstrap-file property is not filled, the system will search for a file that holds - # the default tenant name plus either a .conf, .json, .yml or .yaml extension. - # In case of tenant 'world', the system would search for existence in the following order: - # - 'world.conf' - # - 'world.json' - # - 'world.yml' - # - 'world.yaml' - # If none of these files are found, the bootstrap attempt will be skipped. - bootstrap-file = "bootstrap/world.tenant.conf" - } - - engine { - # Properties for sending tasks of type Mail - mail-service { - # Here you can fill any regular javax.mail properties - # All properties mentioned here are passed into the connection with the mail server - mail.host = mailcatcher - mail.smtp.port = 1025 - # Optional username/pwd to be used to connect to the mail server - authentication { - user = "" - password = "" - } - } - } - - api { - bindhost = "0.0.0.0" - bindport = 2027 - - security { - # configuration settings for OpenID Connect - oidc { - connect-url = "http://localhost:5556/dex/.well-known/openid-configuration" - connect-url = ${?CAFIENNE_OIDC_CONNECT_URL} - token-url = "http://127.0.0.1:5556/dex/token" - token-url = ${?CAFIENNE_OIDC_TOKEN_URL} - key-url = "http://idp:5556/dex/keys" - key-url = ${?CAFIENNE_OIDC_KEY_URL} - authorization-url = "http://127.0.0.1:5556/dex/auth" - authorization-url = ${?CAFIENNE_OIDC_AUTHORIZATION_URL} - issuer = "http://localhost:5556/dex" - issuer = ${?CAFIENNE_OIDC_ISSUER} - } - - ################################################################################################### - ## ## - ## Fill this setting to true to allow developers to access engine events without authentication ## - ## ## - ## WARNING - Enabling opens up the full engine in read-only mode for anyone to access ## - ## ## - ################################################################################################### - debug.events.open = true - debug.events.open = ${?CAFIENNE_DEBUG_EVENTS} - } - } - - # The case engine reads definitions as XML files from disk and/or the classpath. - # The files are cached in-memory, based on their lastModified timestamp - # (i.e., if you change a file on disk, the engine will reload it into the cache). - # By default, the engine will read from the configured location. If the definitions file cannot be found - # in this location, the engine will try to load it as a resource from the classpath, hence enabling to ship - # fixed definitions in a jar file. - definitions { - provider = "org.cafienne.cmmn.repository.file.FileBasedDefinitionProvider" - location = "./definitions" - location = ${?CAFIENNE_CMMN_DEFINITIONS_PATH} - cache { - size = 100 - } - } - - actor { - # the seconds of idle time after which a case actor is removed from akka memory - # if the case has not received new commands after the specified number of seconds, - # the case engine will ask akka to remove the case from memory to avoid memory leaks. - idle-period = 600 - - # If debug is true, then all StartCase commands by default will run in debug mode, - # unless specified otherwise in the command - debug = true - } - - query-db { - # This setting tells cafienne which journal to use for reading events. - # If this omitted, cafienne will try to guess the read journal, based on the akka settings - read-journal = "inmemory-read-journal" - - profile = "slick.jdbc.HsqldbProfile$" - db { - driver = "org.hsqldb.jdbc.JDBCDriver" - url = "jdbc:hsqldb:mem:mymemdb" - # User name to connect, update and query - user = "SA" - password = "" - # User name for migration of schema upon startup - migrateUser = "SA" - migratePwd = "" - numThreads = 10 - connectionTimeout = 5000 - validationTimeout = 5000 - } - } -} - -inmemory-journal { - event-adapters { - tagging = "org.cafienne.actormodel.tagging.CaseTaggingEventAdapter" - } - - event-adapter-bindings { - "org.cafienne.actormodel.event.ModelEvent" = tagging - } -} - -inmemory-read-journal { - # Absolute path to the write journal plugin configuration section to get the event adapters from - write-plugin = "inmemory-journal" - - # ask timeout on Futures - ask-timeout = "10s" - - # New events are retrieved (polled) with this interval. - refresh-interval = "100ms" - - # How many events to fetch in one query (replay) and keep buffered until they - # are delivered downstreams. - max-buffer-size = "100" -} +# Default application.conf runs the Case Service with +# Cassandra as storage for events and +# Postgres as storage for the projections to enable the Case queries and +# Akka as the runtime system +# All of these can be configured through this conf file. +# In addition many settings can also be passed as environment variables + +akka { + loglevel = INFO + loggers = ["akka.event.slf4j.Slf4jLogger"] + logger-startup-timeout = 10s + + actor { + serialize-messages = on + + serializers { + cafienne_serializer = "org.cafienne.infrastructure.serialization.CafienneSerializer" + + # offset_serializer is used to serialize offset snapshots + # offset_serializer = "org.cafienne.infrastructure.eventstore.OffsetSerializer" + } + serialization-bindings { + "org.cafienne.infrastructure.serialization.CafienneSerializable" = cafienne_serializer + + # Current offsets are WrappedOffset objects + #"org.cafienne.infrastructure.eventstore.WrappedOffset" = offset_serializer + } + } + + persistence { + journal { + # Using Dennis Vriend in-mem journal + plugin = "inmemory-journal" + auto-start-journals = ["inmemory-journal"] + } + snapshot-store { + plugin = "inmemory-snapshot-store" + } + } +} + +cafienne { + # Engine wide platform settings + platform { + # Platform has owners that are allowed to create/disable/enable tenants + # This property specifies the set of user-id's that are owners + # This array may not be empty. + owners = ["admin", "admin@example.com", "CgVhZG1pbhIFbG9jYWw"] + #owners = ${?CAFIENNE_PLATFORM_OWNERS} + # Default tenant will be used when a user does not provide the tenant as a parameter to + # the API call (e.g. in StartCase). When the user is member of only one tenant, + # then that tenant will be submitted along with the StartCase command. + # If the user belongs to multiple tenants, then this default-tenant option will be passed. + default-tenant = "world" + default-tenant = ${?CAFIENNE_PLATFORM_DEFAULT_TENANT} + # bootstrap-file holds a reference to a json or yaml file that has default tenant information. + # E.g., tenant name, tenant owners, tenant users can be given in this file. + # During launch of the case engine, the file will be scanned and a special CreateTenant command is sent + # into the system, thereby setting up a default tenant with owners and users. + # The bootstrap configuration will search for this file, and try to parse it into a standard akka Config + # object. + # If the bootstrap-file property is not filled, the system will search for a file that holds + # the default tenant name plus either a .conf, .json, .yml or .yaml extension. + # In case of tenant 'world', the system would search for existence in the following order: + # - 'world.conf' + # - 'world.json' + # - 'world.yml' + # - 'world.yaml' + # If none of these files are found, the bootstrap attempt will be skipped. + bootstrap-file = "bootstrap/world.tenant.conf" + } + + api { + bindhost = "0.0.0.0" + bindport = 2027 + + security { + # configuration settings for OpenID Connect with test Auth server + oidc { + connect-url = "http://test_token_service:2077/.well-known/openid-configuration" + token-url = "http://test_token_service:2077/token" + key-url = "http://test_token_service:2077/keys" + authorization-url = "http://localhost:33077/auth" + issuer = "http://localhost:33077" + } + + # oidc { + # connect-url = "http://localhost:5556/dex/.well-known/openid-configuration" + # connect-url = ${?CAFIENNE_OIDC_CONNECT_URL} + # token-url = "http://127.0.0.1:5556/dex/token" + # token-url = ${?CAFIENNE_OIDC_TOKEN_URL} + # key-url = "http://idp:5556/dex/keys" + # key-url = ${?CAFIENNE_OIDC_KEY_URL} + # authorization-url = "http://127.0.0.1:5556/dex/auth" + # authorization-url = ${?CAFIENNE_OIDC_AUTHORIZATION_URL} + # issuer = "http://localhost:5556/dex" + # issuer = ${?CAFIENNE_OIDC_ISSUER} + # } + + ################################################################################################### + ## ## + ## Fill this setting to true to allow developers to access engine events without authentication ## + ## ## + ## WARNING - Enabling opens up the full engine in read-only mode for anyone to access ## + ## ## + ################################################################################################### + debug.events.open = true + debug.events.open = ${?CAFIENNE_DEBUG_EVENTS} + } + } + + # The case engine reads definitions as XML files from disk and/or the classpath. + # The files are cached in-memory, based on their lastModified timestamp + # (i.e., if you change a file on disk, the engine will reload it into the cache). + # By default, the engine will read from the configured location. If the definitions file cannot be found + # in this location, the engine will try to load it as a resource from the classpath, hence enabling to ship + # fixed definitions in a jar file. + definitions { + provider = "org.cafienne.cmmn.repository.file.FileBasedDefinitionProvider" + location = "./definitions" + location = ${?CAFIENNE_CMMN_DEFINITIONS_PATH} + cache { + size = 100 + } + } + + actor { + # the seconds of idle time after which a case actor is removed from akka memory + # if the case has not received new commands after the specified number of seconds, + # the case engine will ask akka to remove the case from memory to avoid memory leaks. + idle-period = 600 + + # If debug is true, then all StartCase commands by default will run in debug mode, + # unless specified otherwise in the command + debug = false + } + + timer-service { + # The number of seconds that the TimerService should wait to persist it's snapshot + # after a timer has occurred or has been canceled. + # Note: for setting timers always immediately snapshots are stored + persist-delay = 60 + } + + + query-db { + # This setting tells cafienne which journal to use for reading events. + # If this omitted, cafienne will try to guess the read journal, based on the akka settings + read-journal = "inmemory-read-journal" + + profile = "slick.jdbc.HsqldbProfile$" + db { + driver = "org.hsqldb.jdbcDriver" + url = "jdbc:hsqldb:mem:mymemdb" + # User name to connect, update and query + user = "SA" + password = "" + # User name for migration of schema upon startup + migrateUser = "SA" + migratePwd = "" + numThreads = 10 + connectionTimeout = 5000 + validationTimeout = 5000 + } + } +} + +inmemory-journal { + event-adapters { + tagging = "org.cafienne.actormodel.tagging.CaseTaggingEventAdapter" + } + + event-adapter-bindings { + "org.cafienne.actormodel.event.ModelEvent" = tagging + } +} + +inmemory-read-journal { + # Absolute path to the write journal plugin configuration section to get the event adapters from + write-plugin = "inmemory-journal" + + # ask timeout on Futures + ask-timeout = "10s" + + # New events are retrieved (polled) with this interval. + refresh-interval = "100ms" + + # How many events to fetch in one query (replay) and keep buffered until they + # are delivered downstreams. + max-buffer-size = "100" +} \ No newline at end of file diff --git a/src/conf/logback.xml b/test/docker/src/conf/logback.xml similarity index 97% rename from src/conf/logback.xml rename to test/docker/src/conf/logback.xml index 056bfb3..991389c 100644 --- a/src/conf/logback.xml +++ b/test/docker/src/conf/logback.xml @@ -1,42 +1,42 @@ - - - - %date|%-5level %logger{36} - %msg%n - - - - - logs/application.log - - - logs/application-log-%d{yyyy-MM-dd}.gz - - 10 - - - %date{yyyy-MM-dd HH:mm:ss.SSS ZZZZ} [%level] from %logger in %thread - %message%n%xException - - - - - - - - - - - - - - - - - - - - - - - - - + + + + %date|%-5level %logger{36} - %msg%n + + + + + logs/application.log + + + logs/application-log-%d{yyyy-MM-dd}.gz + + 10 + + + %date{yyyy-MM-dd HH:mm:ss.SSS ZZZZ} [%level] from %logger in %thread - %message%n%xException + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/support/ts-node-register.js b/test/support/ts-node-register.js new file mode 100644 index 0000000..02678c2 --- /dev/null +++ b/test/support/ts-node-register.js @@ -0,0 +1,4 @@ +const tsNode = require('ts-node'); +tsNode.register({ + files: true, +}); \ No newline at end of file diff --git a/test/testtenant.ts b/test/testtenant.ts new file mode 100644 index 0000000..983da9c --- /dev/null +++ b/test/testtenant.ts @@ -0,0 +1,32 @@ +'use strict'; + +import { TenantOwner } from "@cafienne/typescript-client"; +import PlatformService from "@cafienne/typescript-client/service/platform/platformservice"; +import Tenant from "@cafienne/typescript-client/tenant/tenant"; +import TenantUser from "@cafienne/typescript-client/tenant/tenantuser"; +import User from "@cafienne/typescript-client/user"; + +const rolePartner = 'Partner'; +const roleEmployee = 'Employee'; + +export default class TestTenant { + partner = new TenantOwner('partner-pete', [rolePartner], 'Pete', 'pete@all.com'); + employee = new TenantUser('employee-eddy', [roleEmployee], 'Eddy', 'no email address'); + + tenant: Tenant = new Tenant(this.name, [this.partner, this.employee]); + + constructor( + public readonly name: string = 'Test-Tenant', + public platformAdmin: User = new User('admin')) { + } + + /** + * Creates the tenant, and logs in for sender user and receiver user. + */ + async create() { + await this.platformAdmin.login(); + await PlatformService.createTenant(this.platformAdmin, this.tenant); + await this.partner.login(); + await this.employee.login(); + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..2177da3 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "module": "commonjs", + "noEmitOnError": true, + "sourceMap": true, + "target": "ES6", + "lib": [ "ES6" ], + "allowJs": false, + "esModuleInterop": true + }, + "exclude": [ + "node_modules" + ] +}