From 4c1b095ea0cad0e67ac6957428c346e48f79bccc Mon Sep 17 00:00:00 2001 From: Ric Featherstone Date: Mon, 6 Nov 2023 10:14:04 +0000 Subject: [PATCH] feat: manage scenarios --- .dockerignore | 2 + .gitignore | 3 + ansible/update-known-hosts.yaml | 8 - controlplane/commands/ansible.go | 6 +- controlplane/simulator.go | 5 +- docs/terraform-aws-sso.md | 2 +- go.mod | 2 + go.sum | 4 + internal/cli/image.go | 3 +- internal/cli/infra.go | 6 +- internal/cli/storage.go | 3 +- .../devious-developer-data-dump/tasks.yaml | 14 + .../devious-developer-data-dump.yaml | 14 + .../build-a-backdoor/files/challenge.txt | 31 + .../cease-and-desist/files/challenge.txt | 20 + .../ci-runner-ng-breakout/files/challenge.txt | 5 + .../roles/cluster-network/defaults/main.yaml | 2 + .../roles/cluster-network/tasks/calico.yaml | 15 + .../roles/cluster-network/tasks/weave.yaml | 14 + .../files/challenge.txt | 24 + .../commandeer-container/files/challenge.txt | 25 + .../configstore/update-notifier-pnpm.json | 4 + .../.config/glitch-package-manager | 1 + .../files/_git-repo-chatbot/.env | 1 + .../files/_git-repo-chatbot/bot.js | 67 + .../files/_git-repo-chatbot/features/chat.js | 15 + .../_git-repo-chatbot/features/sample_echo.js | 16 + .../features/sample_hears.js | 22 + .../features/websocket_features.js | 31 + .../files/_git-repo-chatbot/package-lock.json | 5930 +++++++++++++++++ .../files/_git-repo-chatbot/package.json | 18 + .../files/_git-repo-chatbot/public/client.js | 490 ++ .../_git-repo-chatbot/public/css/embed.css | 23 + .../public/css/embed.css.map | 1 + .../_git-repo-chatbot/public/css/styles.css | 345 + .../public/css/styles.css.map | 1 + .../files/_git-repo-chatbot/public/index.html | 63 + .../files/_git-repo-chatbot/readme.md | 12 + .../files/_git-repo-chatbot/sass/_botkit.scss | 133 + .../files/_git-repo-chatbot/sass/_chat.scss | 228 + .../files/_git-repo-chatbot/sass/_home.scss | 24 + .../files/_git-repo-chatbot/sass/embed.scss | 30 + .../files/_git-repo-chatbot/sass/styles.scss | 8 + .../files/_git-repo-chatbot/shrinkwrap.yaml | 1890 ++++++ .../.github/workflows/build.yaml | 47 + .../CONTRIBUTING.md | 16 + .../_git-repo-orders-processor/Dockerfile | 12 + .../files/_git-repo-orders-processor/LICENSE | 201 + .../_git-repo-orders-processor/MAINTAINERS | 3 + .../_git-repo-orders-processor/README.md | 14 + .../_git-repo-orders-processor/cronjob.yaml | 29 + .../process-orders.py | 57 + .../requirements.txt | 3 + .../.github/workflows/build.yaml | 21 + .../files/_git-repo-test-ci/Dockerfile | 5 + .../files/challenge.txt | 16 + .../files/favicon.svg | 1 + .../files/home.tmpl | 16 + .../files/logo.png | Bin 0 -> 31763 bytes .../files/logo.svg | 1 + .../tasks/main.yaml | 170 + .../templates/manifests/00-ns.yaml | 30 + .../templates/manifests/01-init-storage.yaml | 50 + .../templates/manifests/03-gitea-deploy.yaml | 895 +++ .../templates/manifests/04-zot.yaml | 156 + .../manifests/05-ingress-deploy.yaml | 411 ++ .../manifests/06-ingress-config.yaml | 37 + .../templates/manifests/07-db-storage.yaml | 38 + .../templates/manifests/08-creds.yaml | 8 + .../templates/manifests/08-runner-rbac.yaml | 53 + .../templates/manifests/09-jumpbox.yaml | 102 + .../templates/scripts/00-master.sh | 6 + .../templates/scripts/01-nodes-every.sh | 14 + .../templates/scripts/01-worker-1.sh | 6 + .../templates/scripts/02-bastion.sh | 22 + .../templates/scripts/02-local.sh | 8 + .../templates/scripts/03-master.sh | 42 + .../templates/scripts/03-worker-2.sh | 40 + .../templates/scripts/04-master.sh | 420 ++ .../templates/scripts/05-local.sh | 84 + .../templates/scripts/05-local_1.sh | 24 + .../templates/scripts/05-local_2.sh | 14 + .../templates/scripts/05-local_3.sh | 35 + .../templates/scripts/05-local_4.sh | 32 + .../roles/identity-theft/files/challenge.txt | 20 + .../pss-misconfiguration/files/challenge.txt | 5 + .../roles/seven-seas/files/challenge.txt | 24 + .../roles/starting-point/defaults/main.yaml | 3 + .../roles/starting-point/tasks/challenge.yaml | 16 + scenarios/roles/starting-point/tasks/pod.yaml | 23 + .../starting-point/tasks/scripts-dir.yaml | 7 + .../templates/pod-starting-point | 8 + scenarios/scenarios.yaml | 55 + .../modules/cluster/templates/ansible.cfg | 2 +- .../cluster/templates/cloud-config.yaml | 3 +- .../workspaces/simulator/admin_config.tf | 2 + .../workspaces/simulator/ansible-playbooks.tf | 19 + terraform/workspaces/simulator/main.tf | 12 +- .../workspaces/simulator/player_config.tf | 2 +- 99 files changed, 12869 insertions(+), 32 deletions(-) delete mode 100644 ansible/update-known-hosts.yaml create mode 100644 scenarios/config/devious-developer-data-dump/tasks.yaml create mode 100644 scenarios/playbooks/devious-developer-data-dump.yaml create mode 100644 scenarios/roles/build-a-backdoor/files/challenge.txt create mode 100644 scenarios/roles/cease-and-desist/files/challenge.txt create mode 100644 scenarios/roles/ci-runner-ng-breakout/files/challenge.txt create mode 100644 scenarios/roles/cluster-network/defaults/main.yaml create mode 100644 scenarios/roles/cluster-network/tasks/calico.yaml create mode 100644 scenarios/roles/cluster-network/tasks/weave.yaml create mode 100644 scenarios/roles/coastline-cluster-attack/files/challenge.txt create mode 100644 scenarios/roles/commandeer-container/files/challenge.txt create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/.config/configstore/update-notifier-pnpm.json create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/.config/glitch-package-manager create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/.env create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/bot.js create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/chat.js create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/sample_echo.js create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/sample_hears.js create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/websocket_features.js create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/package-lock.json create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/package.json create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/client.js create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/embed.css create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/embed.css.map create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/styles.css create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/styles.css.map create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/index.html create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/readme.md create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/_botkit.scss create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/_chat.scss create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/_home.scss create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/embed.scss create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/styles.scss create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/shrinkwrap.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/.github/workflows/build.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/CONTRIBUTING.md create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/Dockerfile create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/LICENSE create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/MAINTAINERS create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/README.md create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/cronjob.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/process-orders.py create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/requirements.txt create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-test-ci/.github/workflows/build.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/files/_git-repo-test-ci/Dockerfile create mode 100644 scenarios/roles/devious-developer-data-dump/files/challenge.txt create mode 100644 scenarios/roles/devious-developer-data-dump/files/favicon.svg create mode 100644 scenarios/roles/devious-developer-data-dump/files/home.tmpl create mode 100644 scenarios/roles/devious-developer-data-dump/files/logo.png create mode 100644 scenarios/roles/devious-developer-data-dump/files/logo.svg create mode 100644 scenarios/roles/devious-developer-data-dump/tasks/main.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/templates/manifests/00-ns.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/templates/manifests/01-init-storage.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/templates/manifests/03-gitea-deploy.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/templates/manifests/04-zot.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/templates/manifests/05-ingress-deploy.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/templates/manifests/06-ingress-config.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/templates/manifests/07-db-storage.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/templates/manifests/08-creds.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/templates/manifests/08-runner-rbac.yaml create mode 100644 scenarios/roles/devious-developer-data-dump/templates/manifests/09-jumpbox.yaml create mode 100755 scenarios/roles/devious-developer-data-dump/templates/scripts/00-master.sh create mode 100755 scenarios/roles/devious-developer-data-dump/templates/scripts/01-nodes-every.sh create mode 100755 scenarios/roles/devious-developer-data-dump/templates/scripts/01-worker-1.sh create mode 100755 scenarios/roles/devious-developer-data-dump/templates/scripts/02-bastion.sh create mode 100755 scenarios/roles/devious-developer-data-dump/templates/scripts/02-local.sh create mode 100755 scenarios/roles/devious-developer-data-dump/templates/scripts/03-master.sh create mode 100755 scenarios/roles/devious-developer-data-dump/templates/scripts/03-worker-2.sh create mode 100755 scenarios/roles/devious-developer-data-dump/templates/scripts/04-master.sh create mode 100755 scenarios/roles/devious-developer-data-dump/templates/scripts/05-local.sh create mode 100755 scenarios/roles/devious-developer-data-dump/templates/scripts/05-local_1.sh create mode 100755 scenarios/roles/devious-developer-data-dump/templates/scripts/05-local_2.sh create mode 100755 scenarios/roles/devious-developer-data-dump/templates/scripts/05-local_3.sh create mode 100755 scenarios/roles/devious-developer-data-dump/templates/scripts/05-local_4.sh create mode 100644 scenarios/roles/identity-theft/files/challenge.txt create mode 100644 scenarios/roles/pss-misconfiguration/files/challenge.txt create mode 100644 scenarios/roles/seven-seas/files/challenge.txt create mode 100644 scenarios/roles/starting-point/defaults/main.yaml create mode 100644 scenarios/roles/starting-point/tasks/challenge.yaml create mode 100644 scenarios/roles/starting-point/tasks/pod.yaml create mode 100644 scenarios/roles/starting-point/tasks/scripts-dir.yaml create mode 100644 scenarios/roles/starting-point/templates/pod-starting-point create mode 100644 scenarios/scenarios.yaml rename ansible/init-cluster.yaml => terraform/workspaces/simulator/ansible-playbooks.tf (78%) diff --git a/.dockerignore b/.dockerignore index 1e1a78cc..519f89e8 100644 --- a/.dockerignore +++ b/.dockerignore @@ -5,6 +5,8 @@ bin/ config/ docs/ internal/ +packer/.cache/ +packer/github.com/ simulation-scripts/ terraform/workspaces/simulator/.terraform/ .dockerignore diff --git a/.gitignore b/.gitignore index 584fcefa..0a2710e4 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,7 @@ config/* !config/.gitkeep bin/ +packer/.cache/ +packer/github.com/ +simulation-scripts/ terraform/workspaces/simulator/.terraform/ diff --git a/ansible/update-known-hosts.yaml b/ansible/update-known-hosts.yaml deleted file mode 100644 index 571aff25..00000000 --- a/ansible/update-known-hosts.yaml +++ /dev/null @@ -1,8 +0,0 @@ ---- - -- hosts: all - gather_facts: no - become: no - tasks: - - ansible.builtin.wait_for_connection: - - ansible.builtin.ping: diff --git a/controlplane/commands/ansible.go b/controlplane/commands/ansible.go index e42c0a4d..b1b788a5 100644 --- a/controlplane/commands/ansible.go +++ b/controlplane/commands/ansible.go @@ -9,15 +9,15 @@ const ( AnsiblePlaybook Executable = "ansible-playbook" ) -func AnsiblePlaybookCommand(workingDir, playbook string, extraVars ...string) Runnable { +func AnsiblePlaybookCommand(workingDir, playbookDir, playbook string, extraVars ...string) Runnable { args := []string{ - fmt.Sprintf("%s/%s.yaml", workingDir, playbook), + fmt.Sprintf("%s/%s.yaml", playbookDir, playbook), } if len(extraVars) > 0 { args = append(args, "--extra-vars", - fmt.Sprintf("\"%s\"", strings.Join(extraVars, " ")), + fmt.Sprintf("%s", strings.Join(extraVars, " ")), ) } diff --git a/controlplane/simulator.go b/controlplane/simulator.go index 76379601..c11b3628 100644 --- a/controlplane/simulator.go +++ b/controlplane/simulator.go @@ -71,6 +71,7 @@ func (s simulator) BuildImage(ctx context.Context, name string) error { return commands.PackerBuildCommand(PackerTemplateDir, string(name)).Run(ctx) } +// TODO: add state path and config bucket and path to support Kubesim func (s simulator) CreateInfrastructure(ctx context.Context, bucket, key, name string) error { slog.Debug("simulator create infrastructure", "bucket", bucket, "key", key, "name", name) @@ -96,13 +97,13 @@ func (s simulator) DestroyInfrastructure(ctx context.Context, bucket, key, name func (s simulator) InstallScenario(ctx context.Context, name string) error { slog.Debug("simulator install", "scenario", name) - return commands.AnsiblePlaybookCommand(AdminConfigDir, name).Run(ctx) + return commands.AnsiblePlaybookCommand(AdminConfigDir, AnsiblePlaybookDir, name).Run(ctx) } func (s simulator) UninstallScenario(ctx context.Context, name string) error { slog.Debug("simulator uninstall", "scenario", name) - return commands.AnsiblePlaybookCommand(name, "state=absent").Run(ctx) + return commands.AnsiblePlaybookCommand(AdminConfigDir, AnsiblePlaybookDir, name, "state=absent").Run(ctx) } func backendConfig(bucket, key string) []string { diff --git a/docs/terraform-aws-sso.md b/docs/terraform-aws-sso.md index 9d1547e5..d517bb29 100644 --- a/docs/terraform-aws-sso.md +++ b/docs/terraform-aws-sso.md @@ -27,5 +27,5 @@ aws sso login --profile simulator source <(aws configure export-credentials --profile simulator --format env) ``` -Be careful with timeouts, as this does not last as long as regular SSO credentials, so source the environment variables +Be careful with timeouts, as this does not last as long as the SSO credentials, so source the environment variables before you run a Terraform or Packer command diff --git a/go.mod b/go.mod index c1b6ee20..d5b0c3e5 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/aws/aws-sdk-go-v2/config v1.19.0 github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2 github.com/docker/docker v24.0.6+incompatible + github.com/olekukonko/tablewriter v0.0.5 github.com/opencontainers/image-spec v1.0.2 github.com/spf13/cobra v1.7.0 gopkg.in/yaml.v2 v2.2.8 @@ -38,6 +39,7 @@ require ( github.com/google/go-cmp v0.5.9 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kr/pretty v0.3.1 // indirect + github.com/mattn/go-runewidth v0.0.9 // indirect github.com/moby/term v0.5.0 // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect diff --git a/go.sum b/go.sum index 2f520ed9..a4c9aac8 100644 --- a/go.sum +++ b/go.sum @@ -68,10 +68,14 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= diff --git a/internal/cli/image.go b/internal/cli/image.go index 857af08b..bf9dc99b 100644 --- a/internal/cli/image.go +++ b/internal/cli/image.go @@ -23,8 +23,6 @@ var imageBuildCmd = &cobra.Command{ Short: "Build the packer image", Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - runner := container.New(cfg) - ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() @@ -37,6 +35,7 @@ var imageBuildCmd = &cobra.Command{ fmt.Sprintf("%s.pkr.hcl", name), } + runner := container.New(cfg) err := runner.Run(ctx, command) cobra.CheckErr(err) }, diff --git a/internal/cli/infra.go b/internal/cli/infra.go index ff5a6cef..f127fb7c 100644 --- a/internal/cli/infra.go +++ b/internal/cli/infra.go @@ -20,8 +20,6 @@ var infraCreateCmd = &cobra.Command{ Use: "create", Short: "Create simulator infrastructure", Run: func(cmd *cobra.Command, args []string) { - runner := container.New(cfg) - ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() @@ -34,6 +32,7 @@ var infraCreateCmd = &cobra.Command{ cfg.Name, } + runner := container.New(cfg) err := runner.Run(ctx, command) cobra.CheckErr(err) }, @@ -43,8 +42,6 @@ var infraDestroyCmd = &cobra.Command{ Use: "destroy", Short: "Destroy simulator infrastructure", Run: func(cmd *cobra.Command, args []string) { - runner := container.New(cfg) - ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() @@ -57,6 +54,7 @@ var infraDestroyCmd = &cobra.Command{ cfg.Name, } + runner := container.New(cfg) err := runner.Run(ctx, command) cobra.CheckErr(err) }, diff --git a/internal/cli/storage.go b/internal/cli/storage.go index 10c6e1c0..5a4540f8 100644 --- a/internal/cli/storage.go +++ b/internal/cli/storage.go @@ -18,8 +18,6 @@ var bucketCmd = &cobra.Command{ var createBucketCmd = &cobra.Command{ Use: "create", Run: func(cmd *cobra.Command, args []string) { - runner := container.New(cfg) - ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() @@ -30,6 +28,7 @@ var createBucketCmd = &cobra.Command{ cfg.Bucket, } + runner := container.New(cfg) err := runner.Run(ctx, command) cobra.CheckErr(err) }, diff --git a/scenarios/config/devious-developer-data-dump/tasks.yaml b/scenarios/config/devious-developer-data-dump/tasks.yaml new file mode 100644 index 00000000..48f4ee05 --- /dev/null +++ b/scenarios/config/devious-developer-data-dump/tasks.yaml @@ -0,0 +1,14 @@ +category: KubeCon +difficulty: KubeCon +name: cicd +kind: cp.simulator/scenario:1.0.0 +objective: Get postgres password. +tasks: + "1": + hints: + sortOrder: 1 + startingPoint: + mode: pod + podName: jumpbox + podNamespace: dmz + summary: x diff --git a/scenarios/playbooks/devious-developer-data-dump.yaml b/scenarios/playbooks/devious-developer-data-dump.yaml new file mode 100644 index 00000000..ca01e385 --- /dev/null +++ b/scenarios/playbooks/devious-developer-data-dump.yaml @@ -0,0 +1,14 @@ +--- + +- name: Devious Developer Data Dump + hosts: all + become: yes + vars: + state: present + master_ip: "{{ hostvars['master-1']['ansible_facts']['default_ipv4']['address'] }}" + master_hostname: "{{ hostvars['master-1']['ansible_facts']['hostname'] }}" + node1_ip: "{{ hostvars['node-1']['ansible_facts']['default_ipv4']['address'] }}" + node1_hostname: "{{ hostvars['node-1']['ansible_facts']['hostname'] }}" + node2_hostname: "{{ hostvars['node-2']['ansible_facts']['hostname'] }}" + roles: + - devious-developer-data-dump diff --git a/scenarios/roles/build-a-backdoor/files/challenge.txt b/scenarios/roles/build-a-backdoor/files/challenge.txt new file mode 100644 index 00000000..4c355aca --- /dev/null +++ b/scenarios/roles/build-a-backdoor/files/challenge.txt @@ -0,0 +1,31 @@ + |\ + | \ + | \ + | \ + ____________|____\ + _________-----_____ | | + _____------ __ ----_ | | + ___---- ___------ \ | _____ _____ | + ----________ ---- \ | | | | | | + -----__ | _____) | | | | | | + __- / \ | |_____| |_____| | + _______----- ___-- \ /)\ | | + ------_______ ---____ \__/ / | _____ _____()| + -----__ \ -- _ /\ | | | | | | + --__--__ \_____/ \_/\ | | | | | | + ----| / | | | | | | | + | |___________| | | | | | | + | | ((_(_)| )_) | | | | | | + | \_((_(_)|/(_) | | | | | | + \ ( | |_____| |_____| | + \_____________) |__________________| + +Captain Hλ$ħ𝔍Ⱥ¢k has discovered an authentication bypass in a remote operations management port for SaaS management solution + +Unfortunately Introspective Insight SecOps team have applied multiple security controls to restrict access to the service + +As an insider, the Dread Pirate wants you to allow remote access to the operations management port for the exploit to fire + +Remember you must be stealthy and ensure the current website continues to be publicly accessible + +If successful, Captain Hλ$ħ𝔍Ⱥ¢k will drop you a secret payment for your malicious actions. Good Luck! diff --git a/scenarios/roles/cease-and-desist/files/challenge.txt b/scenarios/roles/cease-and-desist/files/challenge.txt new file mode 100644 index 00000000..7dadb79d --- /dev/null +++ b/scenarios/roles/cease-and-desist/files/challenge.txt @@ -0,0 +1,20 @@ + + _______________________ + =(__ ___ __ _)= + | | + | | + | Cease and Desist! | + | | + | | + | Reform-Kube | + | | + | | + | | + |__ ___ __ ___| + =(_______________________)= + +Production is Down! Your organization is using reform-kube, an OS Kubernetes management project. + +Unfortunately, reform-kube has changed their licensing model and is no longer open source. + +Login to the licensing server and see if you can resolve the issue to get Production up and running. diff --git a/scenarios/roles/ci-runner-ng-breakout/files/challenge.txt b/scenarios/roles/ci-runner-ng-breakout/files/challenge.txt new file mode 100644 index 00000000..f2bb2951 --- /dev/null +++ b/scenarios/roles/ci-runner-ng-breakout/files/challenge.txt @@ -0,0 +1,5 @@ +During penetration testing of a client kubernetes cluster, a vulnerability in a pod has been noticed. + +The pod is part of the CI/CD build infrastructure and you are concerned that a compromised runner may lead to compromsied VMs. + +Verify the vulnerability by breaking out of the CI runner pod. diff --git a/scenarios/roles/cluster-network/defaults/main.yaml b/scenarios/roles/cluster-network/defaults/main.yaml new file mode 100644 index 00000000..1a801082 --- /dev/null +++ b/scenarios/roles/cluster-network/defaults/main.yaml @@ -0,0 +1,2 @@ +calico_version: 3.26.3 +weave_version: 2.8.1 diff --git a/scenarios/roles/cluster-network/tasks/calico.yaml b/scenarios/roles/cluster-network/tasks/calico.yaml new file mode 100644 index 00000000..faa8e0b7 --- /dev/null +++ b/scenarios/roles/cluster-network/tasks/calico.yaml @@ -0,0 +1,15 @@ +- name: Download calico manifests + ansible.builtin.get_url: + url: "https://raw.githubusercontent.com/projectcalico/calico/v{{ calico_version }}/manifests/calico.yaml" + dest: ~/calico.yaml + mode: '0664' + become: no + when: "state == 'present' and 'bastion' in inventory_hostname" + +- name: Install calico + kubernetes.core.k8s: + src: ~/calico.yaml + state: "{{ state }}" + force: "{% if state == 'absent' %}yes{% else %}no{% endif %}" + become: no + when: "'bastion' in inventory_hostname" diff --git a/scenarios/roles/cluster-network/tasks/weave.yaml b/scenarios/roles/cluster-network/tasks/weave.yaml new file mode 100644 index 00000000..f9ad9a39 --- /dev/null +++ b/scenarios/roles/cluster-network/tasks/weave.yaml @@ -0,0 +1,14 @@ +- name: Download weave manifests + ansible.builtin.get_url: + url: "https://github.com/weaveworks/weave/releases/download/v{{ weave_version }}/weave-daemonset-k8s.yaml" + dest: ~/weave-daemonset-k8s.yaml + mode: '0664' + become: no + when: "state == 'present' and 'bastion' in inventory_hostname" + +- name: Install weave daemonset + kubernetes.core.k8s: + src: ~/weave-daemonset-k8s.yaml + state: "{{ state }}" + become: no + when: "'bastion' in inventory_hostname" diff --git a/scenarios/roles/coastline-cluster-attack/files/challenge.txt b/scenarios/roles/coastline-cluster-attack/files/challenge.txt new file mode 100644 index 00000000..20f89646 --- /dev/null +++ b/scenarios/roles/coastline-cluster-attack/files/challenge.txt @@ -0,0 +1,24 @@ + ___ + .-' `'. + / \ + | ; + | | ___.--, + _.._ |0) ~ (0) | _.---'`__.-( (_. + __.--'`_.. '.__.\ '--. \_.-' ,.--'` `""` + ( ,.--'` ',__ /./; ;, '.__.'` __ + _`) ) .---.__.' / | |\ \__..--"" """--.,_ + `---' .'.''-._.-'`_./ /\ '. \ _.-~~~````~~~-._`-.__.' + | | .' _.-' | | \ \ '. `~---` + \ \/ .' \ \ '. '-._) + \/ / \ \ `=.__`~-. + / /\ `) ) / / `"".`\ + , _.-'.'\ \ / / ( ( / / + `--~` ) ) .-'.' '.'. | ( + (/` ( (` ) ) '-; + ` '-; (-' + +Dread Pirate Captain Hλ$ħ𝔍Ⱥ¢k is looking to recruit you to his motley crew. + +Hλ$ħ𝔍Ⱥ¢k has obtained access to Coastline Data's jumpbox and wants you to obtain full cluster compromise. + +Will you fail the initiation or will your short-lived stay in the motley crew become permanent? diff --git a/scenarios/roles/commandeer-container/files/challenge.txt b/scenarios/roles/commandeer-container/files/challenge.txt new file mode 100644 index 00000000..798a5737 --- /dev/null +++ b/scenarios/roles/commandeer-container/files/challenge.txt @@ -0,0 +1,25 @@ + _.--. + _.-'_:-'|| + _.-'_.-::::'|| + _.-:'_.-::::::' || + .'`-.-:::::::' || + /.'`;|:::::::' ||_ + || ||::::::' _.;._'-._ + || ||:::::' _.-!oo @.!-._'-. + \'. ||:::::.-!()oo @!()@.-'_.| + '.'-;|:.-'.&$@.& ()$%-'o.'\U|| + `>'-.!@%()@'@_%-'_.-o _.|'|| + ||-._'-.@.-'_.-' _.-o |'|| + ||=[ '-._.-\U/.-' o |'|| + || '-.]=|| |'| o |'|| + || || |'| _| '; + || || |'| _.-'_.-' + |'-._ || |'|_.-'_.-' + '-._'-.|| |' `_.-' + '-.||_/.-' + +Welcome to Captain Hλ$ħ𝔍Ⱥ¢k's Booty Camp! + +There is treasure to be had to those who can smuggle aboard and find the map. + +It's time to show Dread Pirate what you've learnt about Kubernetes. diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/.config/configstore/update-notifier-pnpm.json b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/.config/configstore/update-notifier-pnpm.json new file mode 100644 index 00000000..da6c3a72 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/.config/configstore/update-notifier-pnpm.json @@ -0,0 +1,4 @@ +{ + "optOut": false, + "lastUpdateCheck": 1680632678616 +} \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/.config/glitch-package-manager b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/.config/glitch-package-manager new file mode 100644 index 00000000..adcdaede --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/.config/glitch-package-manager @@ -0,0 +1 @@ +pnpm diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/.env b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/.env new file mode 100644 index 00000000..0439b02a --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/.env @@ -0,0 +1 @@ +MONGO_URI= \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/bot.js b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/bot.js new file mode 100644 index 00000000..0d9cdffc --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/bot.js @@ -0,0 +1,67 @@ +// __ __ ___ ___ +// |__) / \ | |__/ | | +// |__) \__/ | | \ | | + +// This is the main file for the botkit-starter-web bot. + +// Import Botkit's core features +const { Botkit } = require('botkit'); +const { BotkitCMSHelper } = require('botkit-plugin-cms'); + +// Import a platform-specific adapter for web. + +const { WebAdapter } = require('botbuilder-adapter-web'); + +const { MongoDbStorage } = require('botbuilder-storage-mongodb'); + +// Load process.env values from .env file +require('dotenv').config(); + +let storage = null; +if (process.env.MONGO_URI) { + storage = mongoStorage = new MongoDbStorage({ + url : process.env.MONGO_URI, + }); +} + + +const adapter = new WebAdapter({}); + + +const controller = new Botkit({ + debug: true, + webhook_uri: '/api/messages', + + adapter: adapter, + + storage +}); + +if (process.env.cms_uri) { + controller.usePlugin(new BotkitCMSHelper({ + cms_uri: process.env.cms_uri, + token: process.env.cms_token, + })); +} + +// Once the bot has booted up its internal services, you can use them to do stuff. +controller.ready(() => { + + // load traditional developer-created local custom feature modules + controller.loadModules(__dirname + '/features'); + + /* catch-all that uses the CMS to trigger dialogs */ + if (controller.plugins.cms) { + controller.on('message,direct_message', async (bot, message) => { + let results = false; + results = await controller.plugins.cms.testTrigger(bot, message); + + if (results !== false) { + // do not continue middleware! + return false; + } + }); + } + +}); + diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/chat.js b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/chat.js new file mode 100644 index 00000000..17357726 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/chat.js @@ -0,0 +1,15 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const express = require('express'); +const path = require('path'); + +module.exports = function(controller) { + + // make public/index.html available as localhost/index.html + // by making the /public folder a static/public asset + controller.publicFolder('/', path.join(__dirname,'..','public')); + + console.log('Chat with me: http://localhost:' + (process.env.PORT || 3000)); +} \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/sample_echo.js b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/sample_echo.js new file mode 100644 index 00000000..14e81c71 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/sample_echo.js @@ -0,0 +1,16 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ + +module.exports = function(controller) { + + controller.hears('sample','message', async(bot, message) => { + await bot.reply(message, 'I heard a sample message.'); + }); + + controller.on('message', async(bot, message) => { + await bot.reply(message, `Echo: ${ message.text }`); + }); + +} \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/sample_hears.js b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/sample_hears.js new file mode 100644 index 00000000..33bf6a93 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/sample_hears.js @@ -0,0 +1,22 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +module.exports = function(controller) { + + // use a function to match a condition in the message + controller.hears(async(message) => message.text && message.text.toLowerCase() === 'foo', ['message'], async (bot, message) => { + await bot.reply(message, 'I heard "foo" via a function test'); + }); + + // use a regular expression to match the text of the message + controller.hears(new RegExp(/^\d+$/), ['message','direct_message'], async function(bot, message) { + await bot.reply(message,{ text: 'I heard a number using a regular expression.' }); + }); + + // match any one of set of mixed patterns like a string, a regular expression + controller.hears(['allcaps', new RegExp(/^[A-Z\s]+$/)], ['message','direct_message'], async function(bot, message) { + await bot.reply(message,{ text: 'I HEARD ALL CAPS!' }); + }); + +} \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/websocket_features.js b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/websocket_features.js new file mode 100644 index 00000000..aef91a6c --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/features/websocket_features.js @@ -0,0 +1,31 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +module.exports = function(controller) { + + if (controller.adapter.name === 'Web Adapter') { + + console.log('Loading sample web features...'); + + controller.hears(new RegExp('quick'), 'message', async (bot, message) => { + + await bot.reply(message,{ + text: 'Here are some quick replies', + quick_replies: [ + { + title: 'Foo', + payload: 'foo', + }, + { + title: 'Bar', + payload: 'bar', + } + ] + }); + }); + + + } + +} \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/package-lock.json b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/package-lock.json new file mode 100644 index 00000000..7ba81a4d --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/package-lock.json @@ -0,0 +1,5930 @@ +{ + "name": "botkit-starter-web", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "botbuilder": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botbuilder/-/botbuilder-4.11.0.tgz", + "integrity": "sha512-amNKc8f9M5lGlWn3e3QTYcNFJhGAC+fWU2wV/PQG6Tn7TRBh4tMcxw3tS6WZbgPDHj1KSSe+/Ih4LOLYfYJHTQ==", + "requires": { + "@azure/ms-rest-js": "1.9.0", + "@types/node": "^10.17.27", + "axios": "^0.19.0", + "botbuilder-core": "4.11.0", + "botframework-connector": "4.11.0", + "botframework-streaming": "4.11.0", + "filenamify": "^4.1.0", + "fs-extra": "^7.0.1", + "moment-timezone": "^0.5.28" + }, + "dependencies": { + "@azure/ms-rest-js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-1.9.0.tgz", + "integrity": "sha512-cB4Z2Mg7eBmet1rfbf0QSO1XbhfknRW7B+mX3IHJq0KGHaGJvCPoVTgdsJdCkazEMK1jtANFNEDDzSQacxyzbA==", + "requires": { + "@types/tunnel": "0.0.0", + "axios": "^0.19.0", + "form-data": "^2.3.2", + "tough-cookie": "^2.4.3", + "tslib": "^1.9.2", + "tunnel": "0.0.6", + "uuid": "^3.2.1", + "xml2js": "^0.4.19" + } + }, + "@types/jsonwebtoken": { + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.8.tgz", + "integrity": "sha512-XENN3YzEB8D6TiUww0O8SRznzy1v+77lH7UmuN54xq/IHIsyWjWOzZuFFTtoiRuaE782uAoRwBe/wwow+vQXZw==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "10.17.49", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.49.tgz", + "integrity": "sha512-PGaJNs5IZz5XgzwJvL/1zRfZB7iaJ5BydZ8/Picm+lUNYoNO9iVTQkVy5eUh0dZDrx3rBOIs3GCbCRmMuYyqwg==" + }, + "@types/tunnel": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.0.tgz", + "integrity": "sha512-FGDp0iBRiBdPjOgjJmn1NH0KDLN+Z8fRmo+9J7XGBhubq1DPrGrbmG4UTlGzrpbCpesMqD0sWkzi27EYkOMHyg==", + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz", + "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==", + "requires": { + "@types/node": "*" + } + }, + "adal-node": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/adal-node/-/adal-node-0.2.1.tgz", + "integrity": "sha512-C/oasZuTy0NIqh5wPWjG/09XaG+zS7elC8upf1ZVExt9lSRncme4Ejbx8CKYk+wsGgj609y84txtRAXQVvqApg==", + "requires": { + "@types/node": "^8.0.47", + "async": "^2.6.3", + "date-utils": "*", + "jws": "3.x.x", + "request": "^2.88.0", + "underscore": ">= 1.3.1", + "uuid": "^3.1.0", + "xmldom": ">= 0.1.x", + "xpath.js": "~1.1.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + } + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } + }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "botbuilder-core": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botbuilder-core/-/botbuilder-core-4.11.0.tgz", + "integrity": "sha512-fKFCNsbNG8ISWUG0r63VDwmjOOjgt6TBqB6nmMb9BVVhMMhhosB0wWZCjvrzFqrUuHwaZkeEEaoJLpCRK0Etww==", + "requires": { + "assert": "^1.4.1", + "botframework-connector": "4.11.0", + "botframework-schema": "4.11.0" + } + }, + "botframework-connector": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botframework-connector/-/botframework-connector-4.11.0.tgz", + "integrity": "sha512-8Hopo/FZwMwmI5vIFwWKzHxO0pKCWN5c/ggMF3pdSqbsl2B3YcaxKBWdmwbDzIksxSGu6dV0Z91JapD/LJdgeQ==", + "requires": { + "@azure/ms-rest-js": "1.9.0", + "@types/jsonwebtoken": "7.2.8", + "adal-node": "0.2.1", + "base64url": "^3.0.0", + "botframework-schema": "4.11.0", + "cross-fetch": "^3.0.5", + "jsonwebtoken": "8.0.1", + "rsa-pem-from-mod-exp": "^0.8.4" + } + }, + "botframework-schema": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botframework-schema/-/botframework-schema-4.11.0.tgz", + "integrity": "sha512-K/VQ66jFTws2UmJRP3nlKMi4ZQM1xS8yGhh+lA0MoLrYJBgpzCoi9P2isbAub9QQotzQnTv5bK8NiJTwcdt+hQ==" + }, + "botframework-streaming": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botframework-streaming/-/botframework-streaming-4.11.0.tgz", + "integrity": "sha512-sJjC01TwMbJKx3yUN0J4AAzwggQ3+G096Kb0/oF3TmxwqibPWcNFH0feHmg5FpWVJn7q5tuZ8vnkKtdfsVnh/g==", + "requires": { + "@types/ws": "^6.0.3", + "uuid": "^3.4.0", + "ws": "^7.1.2" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cross-fetch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", + "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", + "requires": { + "node-fetch": "2.6.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-utils": { + "version": "1.2.21", + "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz", + "integrity": "sha1-YfsWzcEnSzyayq/+n8ad+HIKK2Q=" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" + }, + "filenamify": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.2.0.tgz", + "integrity": "sha512-pkgE+4p7N1n7QieOopmn3TqJaefjdWXwEkj2XLZJLKfOgcQKkn11ahvGNgTD8mLggexLiDFQxeTs14xVU22XPA==", + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonwebtoken": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.0.1.tgz", + "integrity": "sha1-UNrvjQqMfeLNBrwQE7dbBMzz8M8=", + "requires": { + "jws": "^3.1.4", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "moment-timezone": { + "version": "0.5.32", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.32.tgz", + "integrity": "sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + } + } + }, + "rsa-pem-from-mod-exp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/rsa-pem-from-mod-exp/-/rsa-pem-from-mod-exp-0.8.4.tgz", + "integrity": "sha1-NipCxtMEBW1JOz8SvOq7LGV2ptQ=" + }, + "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==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "underscore": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz", + "integrity": "sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "ws": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", + "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xmldom": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.4.0.tgz", + "integrity": "sha512-2E93k08T30Ugs+34HBSTQLVtpi6mCddaY8uO+pMNk1pqSjV5vElzn4mmh6KLxN3hki8rNcHSYzILoh3TEWORvA==" + }, + "xpath.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", + "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } + }, + "botbuilder-adapter-web": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/botbuilder-adapter-web/-/botbuilder-adapter-web-1.0.9.tgz", + "integrity": "sha512-JXixqXndu+Z3rPVrfgPKvNgVlkoHH62B5qn2r2X6tuKUybMiamkA/vmXLOwscvFV96iZRDfUVW/XIgPxNKy+lA==", + "requires": { + "botbuilder": "^4.10.1", + "botkit": "^4.10.0", + "debug": "^4.1.0", + "url": "^0.11.0", + "ws": "^7.3.1" + }, + "dependencies": { + "@azure/ms-rest-js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-1.9.0.tgz", + "integrity": "sha512-cB4Z2Mg7eBmet1rfbf0QSO1XbhfknRW7B+mX3IHJq0KGHaGJvCPoVTgdsJdCkazEMK1jtANFNEDDzSQacxyzbA==", + "requires": { + "@types/tunnel": "0.0.0", + "axios": "^0.19.0", + "form-data": "^2.3.2", + "tough-cookie": "^2.4.3", + "tslib": "^1.9.2", + "tunnel": "0.0.6", + "uuid": "^3.2.1", + "xml2js": "^0.4.19" + } + }, + "@microsoft/recognizers-text": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text/-/recognizers-text-1.1.4.tgz", + "integrity": "sha512-hlSVXcaX5i8JcjuUJpVxmy2Z/GxvFXarF0KVySCFop57wNEnrLWMHe4I4DjP866G19VyIKRw+vPA32pkGhZgTg==" + }, + "@microsoft/recognizers-text-choice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-choice/-/recognizers-text-choice-1.1.4.tgz", + "integrity": "sha512-4CddwFe4RVhZeJgW65ocBrEdeukBMghK8pgI0K0Qy2eA5ysPZQpeZ7BGSDz5QMQei5LPY+QaAQ3CHU+ORHoO7A==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "grapheme-splitter": "^1.0.2" + } + }, + "@microsoft/recognizers-text-date-time": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-date-time/-/recognizers-text-date-time-1.1.4.tgz", + "integrity": "sha512-leMnjN+KYNwNvRD5T4G0ORUzkjlek/BBZDvQIjAujtyrd/pkViUnuouWIPkFT/dbSOxXML8et54CSk2KfHiWIA==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "@microsoft/recognizers-text-number": "~1.1.4", + "@microsoft/recognizers-text-number-with-unit": "~1.1.4", + "lodash.isequal": "^4.5.0", + "lodash.tonumber": "^4.0.3" + } + }, + "@microsoft/recognizers-text-number": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number/-/recognizers-text-number-1.1.4.tgz", + "integrity": "sha512-6EmlR+HR+eJBIX7sQby1vs6LJB64wxLowHaGpIU9OCXFvZ5Nb0QT8qh10rC40v3Mtrz4DpScXfSXr9tWkIO5MQ==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "bignumber.js": "^7.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.sortby": "^4.7.0", + "lodash.trimend": "^4.5.1" + } + }, + "@microsoft/recognizers-text-number-with-unit": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number-with-unit/-/recognizers-text-number-with-unit-1.1.4.tgz", + "integrity": "sha512-zl+CfmfWK0x/x+iSgaBAevKTYO0F4+z7SYHAHztaaaGuX8FERw2jmUjSgVetm5KA3EveyCx0XYGU1mRNY8p7Eg==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "@microsoft/recognizers-text-number": "~1.1.4", + "lodash.escaperegexp": "^4.1.2", + "lodash.last": "^3.0.0", + "lodash.max": "^4.0.1" + } + }, + "@microsoft/recognizers-text-sequence": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-sequence/-/recognizers-text-sequence-1.1.4.tgz", + "integrity": "sha512-rb5j8/aE7HSOdIxaVfCGFrj0wWPpSq0CuykFg/A/iJNPP+FnAU71bgP5HexrwQcpCsDinauisX7u0DKIChrHRA==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "grapheme-splitter": "^1.0.2" + } + }, + "@microsoft/recognizers-text-suite": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-suite/-/recognizers-text-suite-1.1.4.tgz", + "integrity": "sha512-hNIaR4M2G0nNeI9WZxt9C0KYh/1vhjeKzX5Ds8XDdT0pxF7zwCSo19WNcPjrVK6aCOeZTw/ULofsAjdu9gSkcA==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "@microsoft/recognizers-text-choice": "~1.1.4", + "@microsoft/recognizers-text-date-time": "~1.1.4", + "@microsoft/recognizers-text-number": "~1.1.4", + "@microsoft/recognizers-text-number-with-unit": "~1.1.4", + "@microsoft/recognizers-text-sequence": "~1.1.4" + } + }, + "@types/jsonwebtoken": { + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.8.tgz", + "integrity": "sha512-XENN3YzEB8D6TiUww0O8SRznzy1v+77lH7UmuN54xq/IHIsyWjWOzZuFFTtoiRuaE782uAoRwBe/wwow+vQXZw==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "10.17.49", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.49.tgz", + "integrity": "sha512-PGaJNs5IZz5XgzwJvL/1zRfZB7iaJ5BydZ8/Picm+lUNYoNO9iVTQkVy5eUh0dZDrx3rBOIs3GCbCRmMuYyqwg==" + }, + "@types/tunnel": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.0.tgz", + "integrity": "sha512-FGDp0iBRiBdPjOgjJmn1NH0KDLN+Z8fRmo+9J7XGBhubq1DPrGrbmG4UTlGzrpbCpesMqD0sWkzi27EYkOMHyg==", + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz", + "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==", + "requires": { + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "adal-node": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/adal-node/-/adal-node-0.2.1.tgz", + "integrity": "sha512-C/oasZuTy0NIqh5wPWjG/09XaG+zS7elC8upf1ZVExt9lSRncme4Ejbx8CKYk+wsGgj609y84txtRAXQVvqApg==", + "requires": { + "@types/node": "^8.0.47", + "async": "^2.6.3", + "date-utils": "*", + "jws": "3.x.x", + "request": "^2.88.0", + "underscore": ">= 1.3.1", + "uuid": "^3.1.0", + "xmldom": ">= 0.1.x", + "xpath.js": "~1.1.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + } + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } + }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bignumber.js": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", + "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + } + } + }, + "botbuilder": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botbuilder/-/botbuilder-4.11.0.tgz", + "integrity": "sha512-amNKc8f9M5lGlWn3e3QTYcNFJhGAC+fWU2wV/PQG6Tn7TRBh4tMcxw3tS6WZbgPDHj1KSSe+/Ih4LOLYfYJHTQ==", + "requires": { + "@azure/ms-rest-js": "1.9.0", + "@types/node": "^10.17.27", + "axios": "^0.19.0", + "botbuilder-core": "4.11.0", + "botframework-connector": "4.11.0", + "botframework-streaming": "4.11.0", + "filenamify": "^4.1.0", + "fs-extra": "^7.0.1", + "moment-timezone": "^0.5.28" + } + }, + "botbuilder-core": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botbuilder-core/-/botbuilder-core-4.11.0.tgz", + "integrity": "sha512-fKFCNsbNG8ISWUG0r63VDwmjOOjgt6TBqB6nmMb9BVVhMMhhosB0wWZCjvrzFqrUuHwaZkeEEaoJLpCRK0Etww==", + "requires": { + "assert": "^1.4.1", + "botframework-connector": "4.11.0", + "botframework-schema": "4.11.0" + } + }, + "botbuilder-dialogs": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botbuilder-dialogs/-/botbuilder-dialogs-4.11.0.tgz", + "integrity": "sha512-KQA5kaV4/Lgk2x8XyH4IwvHRxDSGFtuiLKTSGCL0BMlqMi6lJkuwahdFUiVG0mU8CWPFj0pO88U9ujuZAvoTxQ==", + "requires": { + "@microsoft/recognizers-text-choice": "1.1.4", + "@microsoft/recognizers-text-date-time": "1.1.4", + "@microsoft/recognizers-text-number": "1.1.4", + "@microsoft/recognizers-text-suite": "1.1.4", + "@types/node": "^10.17.27", + "botbuilder-core": "4.11.0", + "globalize": "^1.4.2" + } + }, + "botframework-connector": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botframework-connector/-/botframework-connector-4.11.0.tgz", + "integrity": "sha512-8Hopo/FZwMwmI5vIFwWKzHxO0pKCWN5c/ggMF3pdSqbsl2B3YcaxKBWdmwbDzIksxSGu6dV0Z91JapD/LJdgeQ==", + "requires": { + "@azure/ms-rest-js": "1.9.0", + "@types/jsonwebtoken": "7.2.8", + "adal-node": "0.2.1", + "base64url": "^3.0.0", + "botframework-schema": "4.11.0", + "cross-fetch": "^3.0.5", + "jsonwebtoken": "8.0.1", + "rsa-pem-from-mod-exp": "^0.8.4" + } + }, + "botframework-schema": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botframework-schema/-/botframework-schema-4.11.0.tgz", + "integrity": "sha512-K/VQ66jFTws2UmJRP3nlKMi4ZQM1xS8yGhh+lA0MoLrYJBgpzCoi9P2isbAub9QQotzQnTv5bK8NiJTwcdt+hQ==" + }, + "botframework-streaming": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botframework-streaming/-/botframework-streaming-4.11.0.tgz", + "integrity": "sha512-sJjC01TwMbJKx3yUN0J4AAzwggQ3+G096Kb0/oF3TmxwqibPWcNFH0feHmg5FpWVJn7q5tuZ8vnkKtdfsVnh/g==", + "requires": { + "@types/ws": "^6.0.3", + "uuid": "^3.4.0", + "ws": "^7.1.2" + } + }, + "botkit": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/botkit/-/botkit-4.10.0.tgz", + "integrity": "sha512-0++POhvSAy1KwjKLF6euxZ3sTXRk53/M1JBcLHwNRJ195EK97MvKdwocOoSe8MpXW2rFhcv3GZObEBBncNZq/Q==", + "requires": { + "body-parser": "^1.19.0", + "botbuilder": "^4.10.1", + "botbuilder-core": "^4.10.1", + "botbuilder-dialogs": "^4.10.1", + "botframework-connector": "^4.10.1", + "debug": "^4.1.0", + "express": "^4.17.1", + "mustache": "^4.0.1", + "path": "^0.12.7", + "ware": "^1.3.0" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "cldrjs": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.5.tgz", + "integrity": "sha512-KDwzwbmLIPfCgd8JERVDpQKrUUM1U4KpFJJg2IROv89rF172lLufoJnqJ/Wea6fXL5bO6WjuLMzY8V52UWPvkA==" + }, + "co": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cross-fetch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", + "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", + "requires": { + "node-fetch": "2.6.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-utils": { + "version": "1.2.21", + "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz", + "integrity": "sha1-YfsWzcEnSzyayq/+n8ad+HIKK2Q=" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" + }, + "filenamify": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.2.0.tgz", + "integrity": "sha512-pkgE+4p7N1n7QieOopmn3TqJaefjdWXwEkj2XLZJLKfOgcQKkn11ahvGNgTD8mLggexLiDFQxeTs14xVU22XPA==", + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "globalize": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.6.0.tgz", + "integrity": "sha512-MTuAU3Tnbtga8PvxbpSPdQNIs6K5UdATWIuarWJK2Z3e1DghXpxb/GmShSVagzHqCOYgZr7N/Hi7D1mrHG30jQ==", + "requires": { + "cldrjs": "^0.5.4" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "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" + } + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "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-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonwebtoken": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.0.1.tgz", + "integrity": "sha1-UNrvjQqMfeLNBrwQE7dbBMzz8M8=", + "requires": { + "jws": "^3.1.4", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.last": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash.last/-/lodash.last-3.0.0.tgz", + "integrity": "sha1-JC9mMRLdTG5jcoxgo8kJ0b2tvUw=" + }, + "lodash.max": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.max/-/lodash.max-4.0.1.tgz", + "integrity": "sha1-hzVWbGGLNan3YFILSHrnllivE2o=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "lodash.tonumber": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz", + "integrity": "sha1-C5azGzVnJ5Prf1pj7nkfG56QJdk=" + }, + "lodash.trimend": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.trimend/-/lodash.trimend-4.5.1.tgz", + "integrity": "sha1-EoBENyhrmMrYmWt5QU4RMAEUCC8=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "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.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "moment-timezone": { + "version": "0.5.32", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.32.tgz", + "integrity": "sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mustache": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.1.0.tgz", + "integrity": "sha512-0FsgP/WVq4mKyjolIyX+Z9Bd+3WS8GOwoUTyKXT5cTYMGeauNTi2HPCwERqseC1IHAy0Z7MDZnJBfjabd4O8GQ==" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + } + } + }, + "rsa-pem-from-mod-exp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/rsa-pem-from-mod-exp/-/rsa-pem-from-mod-exp-0.8.4.tgz", + "integrity": "sha1-NipCxtMEBW1JOz8SvOq7LGV2ptQ=" + }, + "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==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "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" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "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" + } + }, + "underscore": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz", + "integrity": "sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + } + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "ware": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", + "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", + "requires": { + "wrap-fn": "^0.1.0" + } + }, + "wrap-fn": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", + "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", + "requires": { + "co": "3.1.0" + } + }, + "ws": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", + "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xmldom": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.4.0.tgz", + "integrity": "sha512-2E93k08T30Ugs+34HBSTQLVtpi6mCddaY8uO+pMNk1pqSjV5vElzn4mmh6KLxN3hki8rNcHSYzILoh3TEWORvA==" + }, + "xpath.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", + "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } + }, + "botbuilder-storage-mongodb": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/botbuilder-storage-mongodb/-/botbuilder-storage-mongodb-0.9.5.tgz", + "integrity": "sha512-2BjzwSfQQP45yD5C3nZm4aIYn+7KZTpwQwQRYXt2g0oOYfoA4CLhbjGBbyjguR4Fp129aTJ+UOPA1C062w0lDQ==", + "requires": { + "@types/mongodb": "^3.1.19", + "botbuilder": "^4.2.0", + "mongodb": "^3.1.11", + "request": "^2.88.0" + }, + "dependencies": { + "@azure/ms-rest-js": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-1.2.6.tgz", + "integrity": "sha512-8cmDpxsQjVdveJwYKtNnkJorxEORLYJu9UHaUvLZA6yHExzDeISHAcSVWE0J05+VkJtqheVHF17M+2ro18Cdnw==", + "requires": { + "axios": "^0.18.0", + "form-data": "^2.3.2", + "tough-cookie": "^2.4.3", + "tslib": "^1.9.2", + "uuid": "^3.2.1", + "xml2js": "^0.4.19" + } + }, + "@types/bson": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.0.tgz", + "integrity": "sha512-pq/rqJwJWkbS10crsG5bgnrisL8pML79KlMKQMoQwLUjlPAkrUHMvHJ3oGwE7WHR61Lv/nadMwXVAD2b+fpD8Q==", + "requires": { + "@types/node": "*" + } + }, + "@types/filenamify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/filenamify/-/filenamify-2.0.2.tgz", + "integrity": "sha512-/sO8rlEFYLZGjoDCIy1BmSdo+xNQbtJIgyrElZrzALolPUhBHvY/vQVGKSw4RSkREtuAv3eb6M7mDXvhpFxYbw==", + "requires": { + "filenamify": "*" + } + }, + "@types/jsonwebtoken": { + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.8.tgz", + "integrity": "sha512-XENN3YzEB8D6TiUww0O8SRznzy1v+77lH7UmuN54xq/IHIsyWjWOzZuFFTtoiRuaE782uAoRwBe/wwow+vQXZw==", + "requires": { + "@types/node": "*" + } + }, + "@types/mongodb": { + "version": "3.1.26", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.1.26.tgz", + "integrity": "sha512-i7+l95IbqnGLRW+AJ6F2nzqosLUgU022lDuoHhbQquMV7tgek0vNUg9RwC2Fn7ImBSQSFdCWeU394ciPEwSeaQ==", + "requires": { + "@types/bson": "*", + "@types/node": "*" + } + }, + "@types/node": { + "version": "11.13.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.9.tgz", + "integrity": "sha512-NJ4yuEVw5podZbINp3tEqUIImMSAEHaCXRiWCf3KC32l6hIKf0iPJEh2uZdT0fELfRYk310yLmMXqy2leZQUbg==" + }, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "axios": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", + "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "requires": { + "follow-redirects": "^1.3.0", + "is-buffer": "^1.1.5" + } + }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "botbuilder": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/botbuilder/-/botbuilder-4.4.0.tgz", + "integrity": "sha512-M3CIDjAwkOKjcxas7EahZujEIdVPc1BWS+l52DD9WNc8OL9cRMMnYVxNOCmT50CoyJ9MSEYYLJi0X3B3TVhOvQ==", + "requires": { + "@types/filenamify": "^2.0.1", + "@types/node": "^10.12.18", + "botbuilder-core": "^4.4.0", + "botframework-connector": "^4.4.0", + "filenamify": "^2.0.0", + "fs-extra": "^7.0.1" + }, + "dependencies": { + "@types/node": { + "version": "10.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.6.tgz", + "integrity": "sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg==" + } + } + }, + "botbuilder-core": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/botbuilder-core/-/botbuilder-core-4.4.0.tgz", + "integrity": "sha512-j2UdMhPTci1Go+Onr0jIN0PGn3TmWbQTyp+5qN+ffwc03MWcPiemV8d/+k8m8ewn59Q1h3u0aEQ4JiKR6egGQA==", + "requires": { + "assert": "^1.4.1", + "botframework-schema": "^4.4.0" + } + }, + "botframework-connector": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/botframework-connector/-/botframework-connector-4.4.0.tgz", + "integrity": "sha512-BXI6wyQE9aqpfWkGNBmD9/M7rk+fXIMII+1iKu1FD9bsxSiJvuvq1wz5pCmzhRjfB3hjg8114V3tZHvMPFEErg==", + "requires": { + "@azure/ms-rest-js": "1.2.6", + "@types/jsonwebtoken": "7.2.8", + "@types/node": "^10.12.18", + "base64url": "^3.0.0", + "botframework-schema": "^4.4.0", + "form-data": "^2.3.3", + "jsonwebtoken": "8.0.1", + "nock": "^10.0.3", + "node-fetch": "^2.2.1", + "rsa-pem-from-mod-exp": "^0.8.4" + }, + "dependencies": { + "@types/node": { + "version": "10.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.6.tgz", + "integrity": "sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg==" + } + } + }, + "botframework-schema": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/botframework-schema/-/botframework-schema-4.4.0.tgz", + "integrity": "sha512-3BWQEbArzHkw49BCdyNxqmSnLzkrL396Q0c+VcdabT3t75wV+dc4bwzSBuLfG0KW+fBjhSR4BXM8IQfnIZU0Vg==" + }, + "bson": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz", + "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==" + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" + }, + "filenamify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, + "follow-redirects": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "requires": { + "debug": "^3.2.6" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonwebtoken": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.0.1.tgz", + "integrity": "sha1-UNrvjQqMfeLNBrwQE7dbBMzz8M8=", + "requires": { + "jws": "^3.1.4", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "requires": { + "mime-db": "1.40.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mongodb": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.2.3.tgz", + "integrity": "sha512-jw8UyPsq4QleZ9z+t/pIVy3L++51vKdaJ2Q/XXeYxk/3cnKioAH8H6f5tkkDivrQL4PUgUOHe9uZzkpRFH1XtQ==", + "requires": { + "mongodb-core": "^3.2.3", + "safe-buffer": "^5.1.2" + } + }, + "mongodb-core": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.3.tgz", + "integrity": "sha512-UyI0rmvPPkjOJV8XGWa9VCTq7R4hBVipimhnAXeSXnuAPjuTqbyfA5Ec9RcYJ1Hhu+ISnc8bJ1KfGZd4ZkYARQ==", + "requires": { + "bson": "^1.1.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "nock": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/nock/-/nock-10.0.6.tgz", + "integrity": "sha512-b47OWj1qf/LqSQYnmokNWM8D88KvUl2y7jT0567NB3ZBAZFz2bWp2PC81Xn7u8F2/vJxzkzNZybnemeFa7AZ2w==", + "requires": { + "chai": "^4.1.2", + "debug": "^4.1.0", + "deep-equal": "^1.0.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.5", + "mkdirp": "^0.5.0", + "propagate": "^1.0.0", + "qs": "^6.5.1", + "semver": "^5.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "node-fetch": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.5.0.tgz", + "integrity": "sha512-YuZKluhWGJwCcUu4RlZstdAxr8bFfOVHakc1mplwHkk8J+tqM1Y5yraYvIUpeX8aY7+crCwiELJq7Vl0o0LWXw==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "propagate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-1.0.0.tgz", + "integrity": "sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk=" + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "rsa-pem-from-mod-exp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/rsa-pem-from-mod-exp/-/rsa-pem-from-mod-exp-0.8.4.tgz", + "integrity": "sha1-NipCxtMEBW1JOz8SvOq7LGV2ptQ=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + } + } + }, + "botkit": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/botkit/-/botkit-4.10.0.tgz", + "integrity": "sha512-0++POhvSAy1KwjKLF6euxZ3sTXRk53/M1JBcLHwNRJ195EK97MvKdwocOoSe8MpXW2rFhcv3GZObEBBncNZq/Q==", + "requires": { + "body-parser": "^1.19.0", + "botbuilder": "^4.10.1", + "botbuilder-core": "^4.10.1", + "botbuilder-dialogs": "^4.10.1", + "botframework-connector": "^4.10.1", + "debug": "^4.1.0", + "express": "^4.17.1", + "mustache": "^4.0.1", + "path": "^0.12.7", + "ware": "^1.3.0" + }, + "dependencies": { + "@azure/ms-rest-js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-1.9.0.tgz", + "integrity": "sha512-cB4Z2Mg7eBmet1rfbf0QSO1XbhfknRW7B+mX3IHJq0KGHaGJvCPoVTgdsJdCkazEMK1jtANFNEDDzSQacxyzbA==", + "requires": { + "@types/tunnel": "0.0.0", + "axios": "^0.19.0", + "form-data": "^2.3.2", + "tough-cookie": "^2.4.3", + "tslib": "^1.9.2", + "tunnel": "0.0.6", + "uuid": "^3.2.1", + "xml2js": "^0.4.19" + } + }, + "@microsoft/recognizers-text": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text/-/recognizers-text-1.1.4.tgz", + "integrity": "sha512-hlSVXcaX5i8JcjuUJpVxmy2Z/GxvFXarF0KVySCFop57wNEnrLWMHe4I4DjP866G19VyIKRw+vPA32pkGhZgTg==" + }, + "@microsoft/recognizers-text-choice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-choice/-/recognizers-text-choice-1.1.4.tgz", + "integrity": "sha512-4CddwFe4RVhZeJgW65ocBrEdeukBMghK8pgI0K0Qy2eA5ysPZQpeZ7BGSDz5QMQei5LPY+QaAQ3CHU+ORHoO7A==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "grapheme-splitter": "^1.0.2" + } + }, + "@microsoft/recognizers-text-date-time": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-date-time/-/recognizers-text-date-time-1.1.4.tgz", + "integrity": "sha512-leMnjN+KYNwNvRD5T4G0ORUzkjlek/BBZDvQIjAujtyrd/pkViUnuouWIPkFT/dbSOxXML8et54CSk2KfHiWIA==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "@microsoft/recognizers-text-number": "~1.1.4", + "@microsoft/recognizers-text-number-with-unit": "~1.1.4", + "lodash.isequal": "^4.5.0", + "lodash.tonumber": "^4.0.3" + } + }, + "@microsoft/recognizers-text-number": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number/-/recognizers-text-number-1.1.4.tgz", + "integrity": "sha512-6EmlR+HR+eJBIX7sQby1vs6LJB64wxLowHaGpIU9OCXFvZ5Nb0QT8qh10rC40v3Mtrz4DpScXfSXr9tWkIO5MQ==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "bignumber.js": "^7.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.sortby": "^4.7.0", + "lodash.trimend": "^4.5.1" + } + }, + "@microsoft/recognizers-text-number-with-unit": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number-with-unit/-/recognizers-text-number-with-unit-1.1.4.tgz", + "integrity": "sha512-zl+CfmfWK0x/x+iSgaBAevKTYO0F4+z7SYHAHztaaaGuX8FERw2jmUjSgVetm5KA3EveyCx0XYGU1mRNY8p7Eg==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "@microsoft/recognizers-text-number": "~1.1.4", + "lodash.escaperegexp": "^4.1.2", + "lodash.last": "^3.0.0", + "lodash.max": "^4.0.1" + } + }, + "@microsoft/recognizers-text-sequence": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-sequence/-/recognizers-text-sequence-1.1.4.tgz", + "integrity": "sha512-rb5j8/aE7HSOdIxaVfCGFrj0wWPpSq0CuykFg/A/iJNPP+FnAU71bgP5HexrwQcpCsDinauisX7u0DKIChrHRA==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "grapheme-splitter": "^1.0.2" + } + }, + "@microsoft/recognizers-text-suite": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-suite/-/recognizers-text-suite-1.1.4.tgz", + "integrity": "sha512-hNIaR4M2G0nNeI9WZxt9C0KYh/1vhjeKzX5Ds8XDdT0pxF7zwCSo19WNcPjrVK6aCOeZTw/ULofsAjdu9gSkcA==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "@microsoft/recognizers-text-choice": "~1.1.4", + "@microsoft/recognizers-text-date-time": "~1.1.4", + "@microsoft/recognizers-text-number": "~1.1.4", + "@microsoft/recognizers-text-number-with-unit": "~1.1.4", + "@microsoft/recognizers-text-sequence": "~1.1.4" + } + }, + "@types/jsonwebtoken": { + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.8.tgz", + "integrity": "sha512-XENN3YzEB8D6TiUww0O8SRznzy1v+77lH7UmuN54xq/IHIsyWjWOzZuFFTtoiRuaE782uAoRwBe/wwow+vQXZw==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "10.17.49", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.49.tgz", + "integrity": "sha512-PGaJNs5IZz5XgzwJvL/1zRfZB7iaJ5BydZ8/Picm+lUNYoNO9iVTQkVy5eUh0dZDrx3rBOIs3GCbCRmMuYyqwg==" + }, + "@types/tunnel": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.0.tgz", + "integrity": "sha512-FGDp0iBRiBdPjOgjJmn1NH0KDLN+Z8fRmo+9J7XGBhubq1DPrGrbmG4UTlGzrpbCpesMqD0sWkzi27EYkOMHyg==", + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz", + "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==", + "requires": { + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "adal-node": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/adal-node/-/adal-node-0.2.1.tgz", + "integrity": "sha512-C/oasZuTy0NIqh5wPWjG/09XaG+zS7elC8upf1ZVExt9lSRncme4Ejbx8CKYk+wsGgj609y84txtRAXQVvqApg==", + "requires": { + "@types/node": "^8.0.47", + "async": "^2.6.3", + "date-utils": "*", + "jws": "3.x.x", + "request": "^2.88.0", + "underscore": ">= 1.3.1", + "uuid": "^3.1.0", + "xmldom": ">= 0.1.x", + "xpath.js": "~1.1.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + } + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } + }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bignumber.js": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", + "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "botbuilder": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botbuilder/-/botbuilder-4.11.0.tgz", + "integrity": "sha512-amNKc8f9M5lGlWn3e3QTYcNFJhGAC+fWU2wV/PQG6Tn7TRBh4tMcxw3tS6WZbgPDHj1KSSe+/Ih4LOLYfYJHTQ==", + "requires": { + "@azure/ms-rest-js": "1.9.0", + "@types/node": "^10.17.27", + "axios": "^0.19.0", + "botbuilder-core": "4.11.0", + "botframework-connector": "4.11.0", + "botframework-streaming": "4.11.0", + "filenamify": "^4.1.0", + "fs-extra": "^7.0.1", + "moment-timezone": "^0.5.28" + } + }, + "botbuilder-core": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botbuilder-core/-/botbuilder-core-4.11.0.tgz", + "integrity": "sha512-fKFCNsbNG8ISWUG0r63VDwmjOOjgt6TBqB6nmMb9BVVhMMhhosB0wWZCjvrzFqrUuHwaZkeEEaoJLpCRK0Etww==", + "requires": { + "assert": "^1.4.1", + "botframework-connector": "4.11.0", + "botframework-schema": "4.11.0" + } + }, + "botbuilder-dialogs": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botbuilder-dialogs/-/botbuilder-dialogs-4.11.0.tgz", + "integrity": "sha512-KQA5kaV4/Lgk2x8XyH4IwvHRxDSGFtuiLKTSGCL0BMlqMi6lJkuwahdFUiVG0mU8CWPFj0pO88U9ujuZAvoTxQ==", + "requires": { + "@microsoft/recognizers-text-choice": "1.1.4", + "@microsoft/recognizers-text-date-time": "1.1.4", + "@microsoft/recognizers-text-number": "1.1.4", + "@microsoft/recognizers-text-suite": "1.1.4", + "@types/node": "^10.17.27", + "botbuilder-core": "4.11.0", + "globalize": "^1.4.2" + } + }, + "botframework-connector": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botframework-connector/-/botframework-connector-4.11.0.tgz", + "integrity": "sha512-8Hopo/FZwMwmI5vIFwWKzHxO0pKCWN5c/ggMF3pdSqbsl2B3YcaxKBWdmwbDzIksxSGu6dV0Z91JapD/LJdgeQ==", + "requires": { + "@azure/ms-rest-js": "1.9.0", + "@types/jsonwebtoken": "7.2.8", + "adal-node": "0.2.1", + "base64url": "^3.0.0", + "botframework-schema": "4.11.0", + "cross-fetch": "^3.0.5", + "jsonwebtoken": "8.0.1", + "rsa-pem-from-mod-exp": "^0.8.4" + } + }, + "botframework-schema": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botframework-schema/-/botframework-schema-4.11.0.tgz", + "integrity": "sha512-K/VQ66jFTws2UmJRP3nlKMi4ZQM1xS8yGhh+lA0MoLrYJBgpzCoi9P2isbAub9QQotzQnTv5bK8NiJTwcdt+hQ==" + }, + "botframework-streaming": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botframework-streaming/-/botframework-streaming-4.11.0.tgz", + "integrity": "sha512-sJjC01TwMbJKx3yUN0J4AAzwggQ3+G096Kb0/oF3TmxwqibPWcNFH0feHmg5FpWVJn7q5tuZ8vnkKtdfsVnh/g==", + "requires": { + "@types/ws": "^6.0.3", + "uuid": "^3.4.0", + "ws": "^7.1.2" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "cldrjs": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.5.tgz", + "integrity": "sha512-KDwzwbmLIPfCgd8JERVDpQKrUUM1U4KpFJJg2IROv89rF172lLufoJnqJ/Wea6fXL5bO6WjuLMzY8V52UWPvkA==" + }, + "co": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cross-fetch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", + "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", + "requires": { + "node-fetch": "2.6.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-utils": { + "version": "1.2.21", + "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz", + "integrity": "sha1-YfsWzcEnSzyayq/+n8ad+HIKK2Q=" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" + }, + "filenamify": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.2.0.tgz", + "integrity": "sha512-pkgE+4p7N1n7QieOopmn3TqJaefjdWXwEkj2XLZJLKfOgcQKkn11ahvGNgTD8mLggexLiDFQxeTs14xVU22XPA==", + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "globalize": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.6.0.tgz", + "integrity": "sha512-MTuAU3Tnbtga8PvxbpSPdQNIs6K5UdATWIuarWJK2Z3e1DghXpxb/GmShSVagzHqCOYgZr7N/Hi7D1mrHG30jQ==", + "requires": { + "cldrjs": "^0.5.4" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "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" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "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-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonwebtoken": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.0.1.tgz", + "integrity": "sha1-UNrvjQqMfeLNBrwQE7dbBMzz8M8=", + "requires": { + "jws": "^3.1.4", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.last": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash.last/-/lodash.last-3.0.0.tgz", + "integrity": "sha1-JC9mMRLdTG5jcoxgo8kJ0b2tvUw=" + }, + "lodash.max": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.max/-/lodash.max-4.0.1.tgz", + "integrity": "sha1-hzVWbGGLNan3YFILSHrnllivE2o=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "lodash.tonumber": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz", + "integrity": "sha1-C5azGzVnJ5Prf1pj7nkfG56QJdk=" + }, + "lodash.trimend": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.trimend/-/lodash.trimend-4.5.1.tgz", + "integrity": "sha1-EoBENyhrmMrYmWt5QU4RMAEUCC8=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "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.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "moment-timezone": { + "version": "0.5.32", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.32.tgz", + "integrity": "sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mustache": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.1.0.tgz", + "integrity": "sha512-0FsgP/WVq4mKyjolIyX+Z9Bd+3WS8GOwoUTyKXT5cTYMGeauNTi2HPCwERqseC1IHAy0Z7MDZnJBfjabd4O8GQ==" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + } + } + }, + "rsa-pem-from-mod-exp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/rsa-pem-from-mod-exp/-/rsa-pem-from-mod-exp-0.8.4.tgz", + "integrity": "sha1-NipCxtMEBW1JOz8SvOq7LGV2ptQ=" + }, + "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==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "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" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "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" + } + }, + "underscore": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz", + "integrity": "sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "ware": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", + "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", + "requires": { + "wrap-fn": "^0.1.0" + } + }, + "wrap-fn": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", + "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", + "requires": { + "co": "3.1.0" + } + }, + "ws": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", + "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xmldom": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.4.0.tgz", + "integrity": "sha512-2E93k08T30Ugs+34HBSTQLVtpi6mCddaY8uO+pMNk1pqSjV5vElzn4mmh6KLxN3hki8rNcHSYzILoh3TEWORvA==" + }, + "xpath.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", + "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } + }, + "botkit-plugin-cms": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/botkit-plugin-cms/-/botkit-plugin-cms-1.0.3.tgz", + "integrity": "sha512-nI/UkD3zQBYufLXpkjKNRrcF5UUpGNMz3SZCNcw20N7kmMw5OZstnU3Y1IRKMMC0aUBAprde0St+fQjaIcLEAA==", + "requires": { + "botkit": "^4.6.0", + "debug": "^4.1.0" + }, + "dependencies": { + "@azure/ms-rest-js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-1.9.0.tgz", + "integrity": "sha512-cB4Z2Mg7eBmet1rfbf0QSO1XbhfknRW7B+mX3IHJq0KGHaGJvCPoVTgdsJdCkazEMK1jtANFNEDDzSQacxyzbA==", + "requires": { + "@types/tunnel": "0.0.0", + "axios": "^0.19.0", + "form-data": "^2.3.2", + "tough-cookie": "^2.4.3", + "tslib": "^1.9.2", + "tunnel": "0.0.6", + "uuid": "^3.2.1", + "xml2js": "^0.4.19" + } + }, + "@microsoft/recognizers-text": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text/-/recognizers-text-1.1.4.tgz", + "integrity": "sha512-hlSVXcaX5i8JcjuUJpVxmy2Z/GxvFXarF0KVySCFop57wNEnrLWMHe4I4DjP866G19VyIKRw+vPA32pkGhZgTg==" + }, + "@microsoft/recognizers-text-choice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-choice/-/recognizers-text-choice-1.1.4.tgz", + "integrity": "sha512-4CddwFe4RVhZeJgW65ocBrEdeukBMghK8pgI0K0Qy2eA5ysPZQpeZ7BGSDz5QMQei5LPY+QaAQ3CHU+ORHoO7A==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "grapheme-splitter": "^1.0.2" + } + }, + "@microsoft/recognizers-text-date-time": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-date-time/-/recognizers-text-date-time-1.1.4.tgz", + "integrity": "sha512-leMnjN+KYNwNvRD5T4G0ORUzkjlek/BBZDvQIjAujtyrd/pkViUnuouWIPkFT/dbSOxXML8et54CSk2KfHiWIA==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "@microsoft/recognizers-text-number": "~1.1.4", + "@microsoft/recognizers-text-number-with-unit": "~1.1.4", + "lodash.isequal": "^4.5.0", + "lodash.tonumber": "^4.0.3" + } + }, + "@microsoft/recognizers-text-number": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number/-/recognizers-text-number-1.1.4.tgz", + "integrity": "sha512-6EmlR+HR+eJBIX7sQby1vs6LJB64wxLowHaGpIU9OCXFvZ5Nb0QT8qh10rC40v3Mtrz4DpScXfSXr9tWkIO5MQ==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "bignumber.js": "^7.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.sortby": "^4.7.0", + "lodash.trimend": "^4.5.1" + } + }, + "@microsoft/recognizers-text-number-with-unit": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-number-with-unit/-/recognizers-text-number-with-unit-1.1.4.tgz", + "integrity": "sha512-zl+CfmfWK0x/x+iSgaBAevKTYO0F4+z7SYHAHztaaaGuX8FERw2jmUjSgVetm5KA3EveyCx0XYGU1mRNY8p7Eg==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "@microsoft/recognizers-text-number": "~1.1.4", + "lodash.escaperegexp": "^4.1.2", + "lodash.last": "^3.0.0", + "lodash.max": "^4.0.1" + } + }, + "@microsoft/recognizers-text-sequence": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-sequence/-/recognizers-text-sequence-1.1.4.tgz", + "integrity": "sha512-rb5j8/aE7HSOdIxaVfCGFrj0wWPpSq0CuykFg/A/iJNPP+FnAU71bgP5HexrwQcpCsDinauisX7u0DKIChrHRA==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "grapheme-splitter": "^1.0.2" + } + }, + "@microsoft/recognizers-text-suite": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text-suite/-/recognizers-text-suite-1.1.4.tgz", + "integrity": "sha512-hNIaR4M2G0nNeI9WZxt9C0KYh/1vhjeKzX5Ds8XDdT0pxF7zwCSo19WNcPjrVK6aCOeZTw/ULofsAjdu9gSkcA==", + "requires": { + "@microsoft/recognizers-text": "~1.1.4", + "@microsoft/recognizers-text-choice": "~1.1.4", + "@microsoft/recognizers-text-date-time": "~1.1.4", + "@microsoft/recognizers-text-number": "~1.1.4", + "@microsoft/recognizers-text-number-with-unit": "~1.1.4", + "@microsoft/recognizers-text-sequence": "~1.1.4" + } + }, + "@types/jsonwebtoken": { + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-7.2.8.tgz", + "integrity": "sha512-XENN3YzEB8D6TiUww0O8SRznzy1v+77lH7UmuN54xq/IHIsyWjWOzZuFFTtoiRuaE782uAoRwBe/wwow+vQXZw==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "10.17.49", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.49.tgz", + "integrity": "sha512-PGaJNs5IZz5XgzwJvL/1zRfZB7iaJ5BydZ8/Picm+lUNYoNO9iVTQkVy5eUh0dZDrx3rBOIs3GCbCRmMuYyqwg==" + }, + "@types/tunnel": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.0.tgz", + "integrity": "sha512-FGDp0iBRiBdPjOgjJmn1NH0KDLN+Z8fRmo+9J7XGBhubq1DPrGrbmG4UTlGzrpbCpesMqD0sWkzi27EYkOMHyg==", + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz", + "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==", + "requires": { + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "adal-node": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/adal-node/-/adal-node-0.2.1.tgz", + "integrity": "sha512-C/oasZuTy0NIqh5wPWjG/09XaG+zS7elC8upf1ZVExt9lSRncme4Ejbx8CKYk+wsGgj609y84txtRAXQVvqApg==", + "requires": { + "@types/node": "^8.0.47", + "async": "^2.6.3", + "date-utils": "*", + "jws": "3.x.x", + "request": "^2.88.0", + "underscore": ">= 1.3.1", + "uuid": "^3.1.0", + "xmldom": ">= 0.1.x", + "xpath.js": "~1.1.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + } + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } + }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bignumber.js": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", + "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "botbuilder": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botbuilder/-/botbuilder-4.11.0.tgz", + "integrity": "sha512-amNKc8f9M5lGlWn3e3QTYcNFJhGAC+fWU2wV/PQG6Tn7TRBh4tMcxw3tS6WZbgPDHj1KSSe+/Ih4LOLYfYJHTQ==", + "requires": { + "@azure/ms-rest-js": "1.9.0", + "@types/node": "^10.17.27", + "axios": "^0.19.0", + "botbuilder-core": "4.11.0", + "botframework-connector": "4.11.0", + "botframework-streaming": "4.11.0", + "filenamify": "^4.1.0", + "fs-extra": "^7.0.1", + "moment-timezone": "^0.5.28" + } + }, + "botbuilder-core": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botbuilder-core/-/botbuilder-core-4.11.0.tgz", + "integrity": "sha512-fKFCNsbNG8ISWUG0r63VDwmjOOjgt6TBqB6nmMb9BVVhMMhhosB0wWZCjvrzFqrUuHwaZkeEEaoJLpCRK0Etww==", + "requires": { + "assert": "^1.4.1", + "botframework-connector": "4.11.0", + "botframework-schema": "4.11.0" + } + }, + "botbuilder-dialogs": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botbuilder-dialogs/-/botbuilder-dialogs-4.11.0.tgz", + "integrity": "sha512-KQA5kaV4/Lgk2x8XyH4IwvHRxDSGFtuiLKTSGCL0BMlqMi6lJkuwahdFUiVG0mU8CWPFj0pO88U9ujuZAvoTxQ==", + "requires": { + "@microsoft/recognizers-text-choice": "1.1.4", + "@microsoft/recognizers-text-date-time": "1.1.4", + "@microsoft/recognizers-text-number": "1.1.4", + "@microsoft/recognizers-text-suite": "1.1.4", + "@types/node": "^10.17.27", + "botbuilder-core": "4.11.0", + "globalize": "^1.4.2" + } + }, + "botframework-connector": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botframework-connector/-/botframework-connector-4.11.0.tgz", + "integrity": "sha512-8Hopo/FZwMwmI5vIFwWKzHxO0pKCWN5c/ggMF3pdSqbsl2B3YcaxKBWdmwbDzIksxSGu6dV0Z91JapD/LJdgeQ==", + "requires": { + "@azure/ms-rest-js": "1.9.0", + "@types/jsonwebtoken": "7.2.8", + "adal-node": "0.2.1", + "base64url": "^3.0.0", + "botframework-schema": "4.11.0", + "cross-fetch": "^3.0.5", + "jsonwebtoken": "8.0.1", + "rsa-pem-from-mod-exp": "^0.8.4" + } + }, + "botframework-schema": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botframework-schema/-/botframework-schema-4.11.0.tgz", + "integrity": "sha512-K/VQ66jFTws2UmJRP3nlKMi4ZQM1xS8yGhh+lA0MoLrYJBgpzCoi9P2isbAub9QQotzQnTv5bK8NiJTwcdt+hQ==" + }, + "botframework-streaming": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/botframework-streaming/-/botframework-streaming-4.11.0.tgz", + "integrity": "sha512-sJjC01TwMbJKx3yUN0J4AAzwggQ3+G096Kb0/oF3TmxwqibPWcNFH0feHmg5FpWVJn7q5tuZ8vnkKtdfsVnh/g==", + "requires": { + "@types/ws": "^6.0.3", + "uuid": "^3.4.0", + "ws": "^7.1.2" + } + }, + "botkit": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/botkit/-/botkit-4.10.0.tgz", + "integrity": "sha512-0++POhvSAy1KwjKLF6euxZ3sTXRk53/M1JBcLHwNRJ195EK97MvKdwocOoSe8MpXW2rFhcv3GZObEBBncNZq/Q==", + "requires": { + "body-parser": "^1.19.0", + "botbuilder": "^4.10.1", + "botbuilder-core": "^4.10.1", + "botbuilder-dialogs": "^4.10.1", + "botframework-connector": "^4.10.1", + "debug": "^4.1.0", + "express": "^4.17.1", + "mustache": "^4.0.1", + "path": "^0.12.7", + "ware": "^1.3.0" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "cldrjs": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.5.tgz", + "integrity": "sha512-KDwzwbmLIPfCgd8JERVDpQKrUUM1U4KpFJJg2IROv89rF172lLufoJnqJ/Wea6fXL5bO6WjuLMzY8V52UWPvkA==" + }, + "co": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cross-fetch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", + "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", + "requires": { + "node-fetch": "2.6.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-utils": { + "version": "1.2.21", + "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz", + "integrity": "sha1-YfsWzcEnSzyayq/+n8ad+HIKK2Q=" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" + }, + "filenamify": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.2.0.tgz", + "integrity": "sha512-pkgE+4p7N1n7QieOopmn3TqJaefjdWXwEkj2XLZJLKfOgcQKkn11ahvGNgTD8mLggexLiDFQxeTs14xVU22XPA==", + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "globalize": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.6.0.tgz", + "integrity": "sha512-MTuAU3Tnbtga8PvxbpSPdQNIs6K5UdATWIuarWJK2Z3e1DghXpxb/GmShSVagzHqCOYgZr7N/Hi7D1mrHG30jQ==", + "requires": { + "cldrjs": "^0.5.4" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "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" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "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-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonwebtoken": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.0.1.tgz", + "integrity": "sha1-UNrvjQqMfeLNBrwQE7dbBMzz8M8=", + "requires": { + "jws": "^3.1.4", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.last": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash.last/-/lodash.last-3.0.0.tgz", + "integrity": "sha1-JC9mMRLdTG5jcoxgo8kJ0b2tvUw=" + }, + "lodash.max": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.max/-/lodash.max-4.0.1.tgz", + "integrity": "sha1-hzVWbGGLNan3YFILSHrnllivE2o=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "lodash.tonumber": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz", + "integrity": "sha1-C5azGzVnJ5Prf1pj7nkfG56QJdk=" + }, + "lodash.trimend": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.trimend/-/lodash.trimend-4.5.1.tgz", + "integrity": "sha1-EoBENyhrmMrYmWt5QU4RMAEUCC8=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "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.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "moment-timezone": { + "version": "0.5.32", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.32.tgz", + "integrity": "sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mustache": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.1.0.tgz", + "integrity": "sha512-0FsgP/WVq4mKyjolIyX+Z9Bd+3WS8GOwoUTyKXT5cTYMGeauNTi2HPCwERqseC1IHAy0Z7MDZnJBfjabd4O8GQ==" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + } + } + }, + "rsa-pem-from-mod-exp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/rsa-pem-from-mod-exp/-/rsa-pem-from-mod-exp-0.8.4.tgz", + "integrity": "sha1-NipCxtMEBW1JOz8SvOq7LGV2ptQ=" + }, + "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==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "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" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "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" + } + }, + "underscore": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz", + "integrity": "sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "ware": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", + "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", + "requires": { + "wrap-fn": "^0.1.0" + } + }, + "wrap-fn": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", + "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", + "requires": { + "co": "3.1.0" + } + }, + "ws": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", + "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xmldom": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.4.0.tgz", + "integrity": "sha512-2E93k08T30Ugs+34HBSTQLVtpi6mCddaY8uO+pMNk1pqSjV5vElzn4mmh6KLxN3hki8rNcHSYzILoh3TEWORvA==" + }, + "xpath.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", + "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } + }, + "dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==" + } + } +} diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/package.json b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/package.json new file mode 100644 index 00000000..17078350 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/package.json @@ -0,0 +1,18 @@ +{ + "name": "botkit-starter-web", + "version": "1.0.0", + "description": "", + "main": "bot.js", + "scripts": { + "start": "node bot.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "dependencies": { + "botbuilder-adapter-web": "^1.0.4", + "botbuilder-storage-mongodb": "^0.9.5", + "botkit": "^4.5.0", + "botkit-plugin-cms": "^1.0.2", + "dotenv": "^7.0.0", + "botbuilder": "^4.10.0" + } +} diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/client.js b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/client.js new file mode 100644 index 00000000..1f96efa2 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/client.js @@ -0,0 +1,490 @@ +/** + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +var converter = new showdown.Converter(); +converter.setOption('openLinksInNewWindow', true); + +var Botkit = { + config: { + ws_url: (location.protocol === 'https:' ? 'wss' : 'ws') + '://' + location.host, + reconnect_timeout: 3000, + max_reconnect: 5, + enable_history: false, + }, + options: { + use_sockets: true, + }, + reconnect_count: 0, + guid: null, + current_user: null, + on: function (event, handler) { + this.message_window.addEventListener(event, function (evt) { + handler(evt.detail); + }); + }, + trigger: function (event, details) { + var event = new CustomEvent(event, { + detail: details + }); + this.message_window.dispatchEvent(event); + }, + request: function (url, body) { + var that = this; + return new Promise(function (resolve, reject) { + var xmlhttp = new XMLHttpRequest(); + + xmlhttp.onreadystatechange = function () { + if (xmlhttp.readyState == XMLHttpRequest.DONE) { + if (xmlhttp.status == 200) { + var response = xmlhttp.responseText; + if (response !='') { + var message = null; + try { + message = JSON.parse(response); + } catch (err) { + reject(err); + return; + } + resolve(message); + } else { + resolve([]); + } + } else { + reject(new Error('status_' + xmlhttp.status)); + } + } + }; + + xmlhttp.open("POST", url, true); + xmlhttp.setRequestHeader("Content-Type", "application/json"); + xmlhttp.send(JSON.stringify(body)); + }); + + }, + send: function (text, e) { + var that = this; + if (e) e.preventDefault(); + if (!text) { + return; + } + var message = { + type: 'outgoing', + text: text + }; + + this.clearReplies(); + that.renderMessage(message); + + that.deliverMessage({ + type: 'message', + text: text, + user: this.guid, + channel: this.options.use_sockets ? 'websocket' : 'webhook' + }); + + this.input.value = ''; + + this.trigger('sent', message); + + return false; + }, + deliverMessage: function (message) { + if (this.options.use_sockets) { + this.socket.send(JSON.stringify(message)); + } else { + this.webhook(message); + } + }, + getHistory: function (guid) { + var that = this; + if (that.guid) { + that.request('/botkit/history', { + user: that.guid + }).then(function (history) { + if (history.success) { + that.trigger('history_loaded', history.history); + } else { + that.trigger('history_error', new Error(history.error)); + } + }).catch(function (err) { + that.trigger('history_error', err); + }); + } + }, + webhook: function (message) { + var that = this; + + that.request('/api/messages', message).then(function (messages) { + messages.forEach((message) => { + that.trigger(message.type, message); + }); + }).catch(function (err) { + that.trigger('webhook_error', err); + }); + + }, + connect: function (user) { + + var that = this; + + if (user && user.id) { + Botkit.setCookie('botkit_guid', user.id, 1); + + user.timezone_offset = new Date().getTimezoneOffset(); + that.current_user = user; + console.log('CONNECT WITH USER', user); + } + + // connect to the chat server! + if (that.options.use_sockets) { + that.connectWebsocket(that.config.ws_url); + } else { + that.connectWebhook(); + } + + }, + connectWebhook: function () { + var that = this; + if (Botkit.getCookie('botkit_guid')) { + that.guid = Botkit.getCookie('botkit_guid'); + connectEvent = 'welcome_back'; + } else { + that.guid = that.generate_guid(); + Botkit.setCookie('botkit_guid', that.guid, 1); + } + + if (this.options.enable_history) { + that.getHistory(); + } + + // connect immediately + that.trigger('connected', {}); + that.webhook({ + type: connectEvent, + user: that.guid, + channel: 'webhook', + }); + + }, + connectWebsocket: function (ws_url) { + var that = this; + // Create WebSocket connection. + that.socket = new WebSocket(ws_url); + + var connectEvent = 'hello'; + if (Botkit.getCookie('botkit_guid')) { + that.guid = Botkit.getCookie('botkit_guid'); + connectEvent = 'welcome_back'; + } else { + that.guid = that.generate_guid(); + Botkit.setCookie('botkit_guid', that.guid, 1); + } + + if (this.options.enable_history) { + that.getHistory(); + } + + // Connection opened + that.socket.addEventListener('open', function (event) { + console.log('CONNECTED TO SOCKET'); + that.reconnect_count = 0; + that.trigger('connected', event); + that.deliverMessage({ + type: connectEvent, + user: that.guid, + channel: 'socket', + user_profile: that.current_user ? that.current_user : null, + }); + }); + + that.socket.addEventListener('error', function (event) { + console.error('ERROR', event); + }); + + that.socket.addEventListener('close', function (event) { + console.log('SOCKET CLOSED!'); + that.trigger('disconnected', event); + if (that.reconnect_count < that.config.max_reconnect) { + setTimeout(function () { + console.log('RECONNECTING ATTEMPT ', ++that.reconnect_count); + that.connectWebsocket(that.config.ws_url); + }, that.config.reconnect_timeout); + } else { + that.message_window.className = 'offline'; + } + }); + + // Listen for messages + that.socket.addEventListener('message', function (event) { + var message = null; + try { + message = JSON.parse(event.data); + } catch (err) { + that.trigger('socket_error', err); + return; + } + + that.trigger(message.type, message); + }); + }, + clearReplies: function () { + this.replies.innerHTML = ''; + }, + quickReply: function (payload) { + this.send(payload); + }, + focus: function () { + this.input.focus(); + }, + renderMessage: function (message) { + var that = this; + if (!that.next_line) { + that.next_line = document.createElement('div'); + that.message_list.appendChild(that.next_line); + } + if (message.text) { + message.html = converter.makeHtml(message.text); + } + + that.next_line.innerHTML = that.message_template({ + message: message + }); + if (!message.isTyping) { + delete (that.next_line); + } + }, + triggerScript: function (script, thread) { + this.deliverMessage({ + type: 'trigger', + user: this.guid, + channel: 'socket', + script: script, + thread: thread + }); + }, + identifyUser: function (user) { + + user.timezone_offset = new Date().getTimezoneOffset(); + + this.guid = user.id; + Botkit.setCookie('botkit_guid', user.id, 1); + + this.current_user = user; + + this.deliverMessage({ + type: 'identify', + user: this.guid, + channel: 'socket', + user_profile: user, + }); + }, + receiveCommand: function (event) { + switch (event.data.name) { + case 'trigger': + // tell Botkit to trigger a specific script/thread + console.log('TRIGGER', event.data.script, event.data.thread); + Botkit.triggerScript(event.data.script, event.data.thread); + break; + case 'identify': + // link this account info to this user + console.log('IDENTIFY', event.data.user); + Botkit.identifyUser(event.data.user); + break; + case 'connect': + // link this account info to this user + Botkit.connect(event.data.user); + break; + default: + console.log('UNKNOWN COMMAND', event.data); + } + }, + sendEvent: function (event) { + + if (this.parent_window) { + this.parent_window.postMessage(event, '*'); + } + + }, + setCookie: function (cname, cvalue, exdays) { + var d = new Date(); + d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); + var expires = "expires=" + d.toUTCString(); + document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; + }, + getCookie: function (cname) { + var name = cname + "="; + var decodedCookie = decodeURIComponent(document.cookie); + var ca = decodedCookie.split(';'); + for (var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) == ' ') { + c = c.substring(1); + } + if (c.indexOf(name) == 0) { + return c.substring(name.length, c.length); + } + } + return ""; + }, + generate_guid: function () { + function s4() { + return Math.floor((1 + Math.random()) * 0x10000) + .toString(16) + .substring(1); + } + return s4() + s4() + '-' + s4() + '-' + s4() + '-' + + s4() + '-' + s4() + s4() + s4(); + }, + boot: function (user) { + + console.log('Booting up'); + + var that = this; + + + that.message_window = document.getElementById("message_window"); + + that.message_list = document.getElementById("message_list"); + + var source = document.getElementById('message_template').innerHTML; + that.message_template = Handlebars.compile(source); + + that.replies = document.getElementById('message_replies'); + + that.input = document.getElementById('messenger_input'); + + that.focus(); + + that.on('connected', function () { + that.message_window.className = 'connected'; + that.input.disabled = false; + that.sendEvent({ + name: 'connected' + }); + }) + + that.on('disconnected', function () { + that.message_window.className = 'disconnected'; + that.input.disabled = true; + }); + + that.on('webhook_error', function (err) { + + alert('Error sending message!'); + console.error('Webhook Error', err); + + }); + + that.on('typing', function () { + that.clearReplies(); + that.renderMessage({ + isTyping: true + }); + }); + + that.on('sent', function () { + // do something after sending + }); + + that.on('message', function (message) { + + console.log('RECEIVED MESSAGE', message); + that.renderMessage(message); + + }); + + that.on('message', function (message) { + if (message.goto_link) { + window.location = message.goto_link; + } + }); + + + that.on('message', function (message) { + that.clearReplies(); + if (message.quick_replies) { + + var list = document.createElement('ul'); + + var elements = []; + for (var r = 0; r < message.quick_replies.length; r++) { + (function (reply) { + + var li = document.createElement('li'); + var el = document.createElement('a'); + el.innerHTML = reply.title; + el.href = '#'; + + el.onclick = function () { + that.quickReply(reply.payload); + } + + li.appendChild(el); + list.appendChild(li); + elements.push(li); + + })(message.quick_replies[r]); + } + + that.replies.appendChild(list); + + // uncomment this code if you want your quick replies to scroll horizontally instead of stacking + // var width = 0; + // // resize this element so it will scroll horizontally + // for (var e = 0; e < elements.length; e++) { + // width = width + elements[e].offsetWidth + 18; + // } + // list.style.width = width + 'px'; + + if (message.disable_input) { + that.input.disabled = true; + } else { + that.input.disabled = false; + } + } else { + that.input.disabled = false; + } + }); + + that.on('history_loaded', function (history) { + if (history) { + for (var m = 0; m < history.length; m++) { + that.renderMessage({ + text: history[m].text, + type: history[m].type == 'message_received' ? 'outgoing' : 'incoming', // set appropriate CSS class + }); + } + } + }); + + + if (window.self !== window.top) { + // this is embedded in an iframe. + // send a message to the master frame to tell it that the chat client is ready + // do NOT automatically connect... rather wait for the connect command. + that.parent_window = window.parent; + window.addEventListener("message", that.receiveCommand, false); + that.sendEvent({ + type: 'event', + name: 'booted' + }); + console.log('Messenger booted in embedded mode'); + + } else { + + console.log('Messenger booted in stand-alone mode'); + // this is a stand-alone client. connect immediately. + that.connect(user); + } + + return that; + } +}; + + +(function () { + // your page initialization code here + // the DOM will be available here + Botkit.boot(); +})(); \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/embed.css b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/embed.css new file mode 100644 index 00000000..20a4e119 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/embed.css @@ -0,0 +1,23 @@ +#embedded_messenger { + position: fixed; + z-index: 1000; + bottom: -400px; + right: 2rem; + height: 434px; + transition: 0.5s ease-in-out bottom; +} +#embedded_messenger.active { + bottom: 0; +} +#embedded_messenger iframe { + height: 400px; + width: 100%; + border: 0; +} +#embedded_messenger #message_header { + background: #000; + padding: 0.5rem 1rem; + color: #FFF; +} + +/*# sourceMappingURL=embed.css.map */ diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/embed.css.map b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/embed.css.map new file mode 100644 index 00000000..0781fd67 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/embed.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../sass/embed.scss"],"names":[],"mappings":"AAEA;EAEE;EACA;EAEA;EACA;EAEA;EACA;;AAEA;EACE;;AAGF;EACE,QAlBK;EAmBL;EACA;;AAGF;EACE;EACA;EACA","file":"embed.css"} \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/styles.css b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/styles.css new file mode 100644 index 00000000..9319bd5a --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/styles.css @@ -0,0 +1,345 @@ +/* shared botkit ui styles */ +* { + box-sizing: border-box; +} + +body, +html { + margin: 0; + padding: 0; + font-size: 18px; + background-color: #FFF; + font-family: "helvetica", sans-serif; +} + +.wrapper { + position: relative; + max-width: 1000px; + margin: 0 auto; +} +.wrapper:after { + content: ""; + display: table; + clear: both; +} + +.box { + border: 2px solid #CCC; + padding: 1rem calc(1rem - 2px); + margin-bottom: 1rem; +} +.box:after { + content: ""; + display: table; + clear: both; +} +.box h1, +.box h2, +.box h3 { + margin-top: 0; +} + +footer { + text-align: center; +} + +.hero { + text-align: center; + padding: 2rem; +} +.hero h1 { + font-size: 4rem; + margin: 0; +} + +a { + color: #a795ef; +} + +.copyurl { + width: 100%; + font-size: 1.25rem; +} + +div.input label { + font-weight: bold; + font-size: smaller; +} + +.addon { + display: flex; + border: 1px solid #999; + border-radius: 6px; + padding: 5px; + background: #F0F0F0; +} +.addon input, +.addon textarea { + flex-grow: 1; + border: 0; + background: transparent; +} +.addon button { + flex-grow: 0; + background: transparent; + border: 1px solid #999; + border-radius: 6px; + font-weight: bold; +} +.addon button.textarea { + align-self: flex-start; + padding: 0.5rem; +} +.addon button:hover { + background: #FFF; + color: #a795ef; +} + +div.hr { + border: 1px dashed #ccc; + width: 10%; + margin: 4rem auto; + height: 1px; +} + +a.button { + border: 2px solid #a795ef; + font-weight: bold; + margin: 0; + border-radius: 3px; + display: inline-block; + padding: 0.5rem 2rem; + text-align: center; + text-decoration: none; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.2); + background-color: #FFF; + transition: box-shadow 0.1s linear; +} +a.button:hover { + box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.1); +} + +/* chat client */ +#message_window { + background: #FFFFFF; + border-left: 1px solid #CCC; + border-right: 1px solid #CCC; + /*height: 500px; + width: 320px;*/ + height: 100%; + width: 100%; + /*margin: 2rem auto;*/ + display: flex; + flex-direction: column; + font-family: "helvetica", sans-serif; +} +#message_window .disconnected { + background: #FFFFCC; + padding: 0.25rem; +} +#message_window.connected .disconnected { + display: none; +} +#message_window .offline { + display: none; +} +#message_window.offline .disconnected { + display: none; +} +#message_window.offline .offline { + background: #FF0000; + color: #FFF; + padding: 0.25rem; + display: block; +} +#message_window .powered_by { + flex-shrink: 0; + text-align: center; + border-bottom: 1px solid #CCC; + font-size: 14px; + padding: 0.25rem; + color: #666; +} +#message_window .powered_by a { + text-decoration: none; + color: #666; +} +#message_window .powered_by img { + position: relative; + top: 2px; +} +#message_window section { + flex-grow: 1; + flex-direction: column-reverse; + display: flex; + overflow-y: auto; +} +#message_window section div div { + margin: 0.25rem; + clear: both; +} +#message_window footer { + border-top: 1px solid #CCC; + padding: 0.25rem; +} +#message_window footer input[type=text] { + flex-grow: 1; + font-size: 1.25rem; + outline: none; + border: none; +} +#message_window footer button { + width: 50px; + background: none; + border: 0; + cursor: pointer; + color: blue; + font-weight: bold; +} +#message_window form { + display: flex; + margin: 0; + padding: 0.25rem; +} +#message_window #message_template { + display: none; +} +#message_window .message { + font-size: 14px; + padding: 0.5rem; + background: #F0F0F0; + color: #333; + border-radius: 5px; + width: auto; + display: inline-block; + max-width: 75%; +} +#message_window .file_attachment { + background: #F0F0F0; + color: #333; + border-radius: 5px; + display: inline-block; + max-width: 75%; +} +#message_window .file_attachment img { + max-width: 100%; + display: block; +} +#message_window .button_message { + margin: 1rem 0; + border-radius: 4px; + border-color: orange; + border-style: solid; + color: orange; + border-width: 1px; + padding: 0.25rem 1rem; + text-decoration: none; + text-align: center; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.25); + display: block; +} +#message_window .message p { + margin-top: 0; + margin-bottom: 0.5rem; +} +#message_window .message p:last-child { + margin-bottom: 0; +} +#message_window .message.outgoing { + float: right; + background: #a795ef; + color: white; +} +#message_window #message_replies { + text-align: center; + overflow-x: auto; + flex-shrink: 0; + -webkit-overflow-scrolling: touch; + /* Lets it scroll lazy */ +} +#message_window #message_replies ul { + list-style-type: none; + margin: 0px auto; + padding: 0; +} +#message_window #message_replies ul li { + display: inline-block; + margin: 0.5rem; + margin-left: 0; +} +#message_window #message_replies a { + text-decoration: none; + display: block; + border: 1px solid #a795ef; + color: #a795ef; + border-radius: 16px; + padding: 0.25rem 1rem; + font-size: 14px; + cursor: pointer; +} +#message_window #message_replies a:hover { + background: #a795ef; + color: #FFF; +} + +/* typing indicator CSS based on code by Joseph Fusco -> https://codepen.io/fusco/pen/XbpaYv */ +.typing-indicator { + display: table; + margin: 0 auto; + position: relative; +} +.typing-indicator span { + height: 5px; + width: 5px; + float: left; + margin: 0 1px; + background-color: #333; + display: block; + border-radius: 50%; + opacity: 0.4; +} +.typing-indicator span:nth-of-type(1) { + animation: 1s blink infinite 0.3333s; +} +.typing-indicator span:nth-of-type(2) { + animation: 1s blink infinite 0.6666s; +} +.typing-indicator span:nth-of-type(3) { + animation: 1s blink infinite 0.9999s; +} + +@keyframes blink { + 50% { + opacity: 1; + } +} +/* special styles for homepage */ +#home { + position: relative; + max-width: 650px; + margin: auto; +} +#home:after { + content: ""; + display: table; + clear: both; +} + +#homepage_bot { + width: 400px; + height: 450px; + float: left; + border: 5px solid #333; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); +} +#homepage_bot iframe { + border: 0; + height: 100%; + width: 100%; +} + +#welcome { + margin-left: 440px; +} + +/*# sourceMappingURL=styles.css.map */ diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/styles.css.map b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/styles.css.map new file mode 100644 index 00000000..ccc1291d --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/css/styles.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../sass/styles.scss","../../sass/_botkit.scss","../../sass/_chat.scss","../../sass/_home.scss"],"names":[],"mappings":"AAAA;ACSA;EACI;;;AAGJ;AAAA;EAEI;EACA;EACA;EACA;EACA;;;AAGJ;EAEI;EACA;EACA;;AAxBA;EACI;EACA;EACA;;;AAwBR;EAEI;EACA;EACA;;AA/BA;EACI;EACA;EACA;;AA8BJ;AAAA;AAAA;EAGI;;;AAIR;EACI;;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;;;AAKR;EACI,OA1DY;;;AA6DhB;EACI;EACA;;;AAIA;EACI;EACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEI;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA,OArGI;;;AA0GhB;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAEA;EAEI;;;AD/HR;AEIA;EACI,YAPS;EAQT;EACA;AAEA;AAAA;EAEA;EACA;AACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAEJ;EACI;;AAEJ;EACI;;AAIF;EACE;;AAEF;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EAEA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAIL;EACG;EACA;EACA;EACA;;AAED;EACG;EACA;;AAIN;EACI;EACA;;AACA;EACI;EACA;EACA;EACA;;AAEJ;EACG;EACA;EACA;EACA;EACA;EACA;;AAIP;EACI;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA,YA1GmB;EA2GnB,OA1Ga;EA2Gb;EACA;EACA;EACA;;AAIJ;EAEE,YArHqB;EAsHrB,OArHe;EAsHf;EACA;EACA;;AAEA;EACE;EACA;;AAKF;EACE;EACA;EACA,cAvIS;EAwIT;EACA,OAzIS;EA0IT;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;;AAGJ;EACI;;AAGJ;EACI;EAEA,YD/JU;ECgKV,OA3Je;;AA+JnB;EACI;EACA;EACA;EACA;AAAmC;;AAEnC;EACI;EACA;EACA;;AACA;EACI;EACA;EACA;;AAIR;EACG;EACA;EACA;EACA,ODzLO;EC0LP;EACA;EACA;EACA;;AAEA;EACE,YDhMK;ECiML;;;AAQX;AACA;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA,kBAhNe;EAiNf;EACA;EACA;;AAEE;EACE;;AADF;EACE;;AADF;EACE;;;AAMR;EACE;IACE;;;AF3NJ;AGNA;EAEI;EACA;EACA;;AFFA;EACI;EACA;EACA;;;AEER;EACI;EACA;EACA;EACA;EAOA;;AALA;EACI;EACA;EACA;;;AAKR;EACI","file":"styles.css"} \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/index.html b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/index.html new file mode 100644 index 00000000..8987fb0f --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/public/index.html @@ -0,0 +1,63 @@ + + + Botkit Anywhere + + + + + + +
+ +
+
+ Disconnected... reconnecting! +
+
+ Offline! Reload to reconnect. +
+
+ Powered by Botkit Logo Botkit +
+
+
+
+
+ {{#if message.isTyping}} +
+ + + +
+ {{/if}} + {{{message.html}}} + + {{#if message.open_link}} + {{#if message.link_title}}{{message.link_title}}{{else}}{{message.open_link}}{{/if}} + {{/if}} +
+ {{#message.files}} +
+ {{#if image}} + {{{url}}} + {{else}} + {{{url}}} + {{/if}} +
+ {{/message.files}} +
+
+
+
+
+
+
+ + +
+
+
+
+ + + \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/readme.md b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/readme.md new file mode 100644 index 00000000..40a5786f --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/readme.md @@ -0,0 +1,12 @@ +# Rescue-Drop ChatBot + +This is a template for creating a Web ChatBot for RescueDrop. + +This is based off the Botkit starter kit for web, created with the [Yeoman generator](https://github.com/howdyai/botkit/tree/master/packages/generator-botkit#readme) + +## Features + +* Interact with customers for quick enquires about current order status +* Receive orders from customers and automatically process it with existing credit card details +* Provide the availability of an item and whether there are lower cost alternatives + diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/_botkit.scss b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/_botkit.scss new file mode 100644 index 00000000..205ce7d0 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/_botkit.scss @@ -0,0 +1,133 @@ +$botkit_purple: #a795ef; +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +* { + box-sizing: border-box; +} + +body, +html { + margin: 0; + padding: 0; + font-size: 18px; + background-color: #FFF; + font-family: 'helvetica', sans-serif; +} + +.wrapper { + @include clearfix; + position: relative; + max-width: 1000px; + margin: 0 auto; +} + +.box { + @include clearfix; + border: 2px solid #CCC; + padding: 1rem calc(1rem - 2px); + margin-bottom: 1rem; + + h1, + h2, + h3 { + margin-top: 0; + } +} + +footer { + text-align: center; +} + +.hero { + text-align: center; + padding: 2rem; + + h1 { + font-size: 4rem; + margin: 0; + + } +} + +a { + color: $botkit_purple; +} + +.copyurl { + width: 100%; + font-size: 1.25rem; +} + +div.input { + label { + font-weight: bold; + font-size: smaller; + } +} + +.addon { + display: flex; + border: 1px solid #999; + border-radius: 6px; + padding: 5px; + background: #F0F0F0; + + input, + textarea { + flex-grow: 1; + border: 0; + background: transparent; + } + + button { + flex-grow: 0; + background: transparent; + border: 1px solid #999; + border-radius: 6px; + font-weight: bold; + + &.textarea { + align-self: flex-start; + padding: 0.5rem; + } + + &:hover { + background: #FFF; + color: $botkit_purple; + } + } +} + +div.hr { + border: 1px dashed #ccc; + width: 10%; + margin: 4rem auto; + height: 1px; +} + +a.button { + border: 2px solid $botkit_purple; + font-weight: bold; + // font-size: 4rem; + margin: 0; + border-radius: 3px; + display: inline-block; + padding: 0.5rem 2rem; + text-align: center; + text-decoration: none; + // color: #FFF; + box-shadow: 5px 5px 5px rgba(0,0,0,0.2); + background-color: #FFF; + transition: box-shadow 0.1s linear; + + &:hover { + // background-color: rgba($botkit_purple, 0.1); + box-shadow: 1px 1px 5px rgba(0,0,0,0.1); + } +} diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/_chat.scss b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/_chat.scss new file mode 100644 index 00000000..c7fd3724 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/_chat.scss @@ -0,0 +1,228 @@ +$action_color: orange; +$background: #FFFFFF; +$bot_message_background: #F0F0F0; +$bot_message_text: #333; +$human_message_background: $botkit_purple; +$human_message_text: white; + +#message_window { + background: $background; + border-left: 1px solid #CCC; + border-right: 1px solid #CCC; + + /*height: 500px; + width: 320px;*/ + height: 100%; + width: 100%; + /*margin: 2rem auto;*/ + display: flex; + flex-direction: column; + font-family: 'helvetica', sans-serif; + + .disconnected { + background: #FFFFCC; + padding: 0.25rem; + } + &.connected .disconnected { + display: none; + } + .offline { + display: none; + } + &.offline { + + .disconnected { + display: none; + } + .offline { + background: #FF0000; + color: #FFF; + padding: 0.25rem; + display: block; + } + } + + .powered_by { + flex-shrink: 0; + text-align: center; + + border-bottom: 1px solid #CCC; + font-size: 14px; + padding: 0.25rem; + color: #666; + + a { + text-decoration: none; + color: #666; + } + + img { + position: relative; + top: 2px; + } + } + + section { + flex-grow: 1; + flex-direction: column-reverse; + display: flex; + overflow-y: auto; + + div div { + margin: 0.25rem; + clear: both; + } + } + + footer { + border-top: 1px solid #CCC; + padding: 0.25rem; + input[type="text"] { + flex-grow: 1; + font-size: 1.25rem; + outline: none; + border: none; + } + button { + width: 50px; + background: none; + border: 0; + cursor: pointer; + color: blue; + font-weight: bold; + } + } + + form { + display: flex; + margin: 0; + padding: 0.25rem; + } + + #message_template { + display: none; + } + + .message { + font-size: 14px; + padding: 0.5rem; + background: $bot_message_background; + color: $bot_message_text; + border-radius: 5px; + width: auto; + display: inline-block; + max-width: 75%; + + } + + .file_attachment { + + background: $bot_message_background; + color: $bot_message_text; + border-radius: 5px; + display: inline-block; + max-width: 75%; + + img { + max-width: 100%; + display: block; + } + + } + + .button_message { + margin: 1rem 0; + border-radius: 4px; + border-color: $action_color; + border-style: solid; + color: $action_color; + border-width: 1px; + padding: 0.25rem 1rem; + text-decoration: none; + text-align: center; + box-shadow: 1px 1px 2px rgba(0,0,0,0.25); + display: block; + } + + + .message p { + margin-top: 0; + margin-bottom: 0.5rem; + } + + .message p:last-child { + margin-bottom: 0; + } + + .message.outgoing { + float: right; + + background: $human_message_background; + color: $human_message_text; + + } + + #message_replies { + text-align: center; + overflow-x: auto; + flex-shrink: 0; + -webkit-overflow-scrolling: touch; /* Lets it scroll lazy */ + + ul { + list-style-type: none; + margin: 0px auto; + padding: 0; + li { + display: inline-block; + margin: 0.5rem; + margin-left: 0; + } + } + + a { + text-decoration: none; + display: block; + border: 1px solid $botkit_purple; + color: $botkit_purple; + border-radius: 16px; + padding: 0.25rem 1rem; + font-size: 14px; + cursor: pointer; + + &:hover { + background: $botkit_purple; + color: #FFF; + } + } + } +} + + + +/* typing indicator CSS based on code by Joseph Fusco -> https://codepen.io/fusco/pen/XbpaYv */ +.typing-indicator { + display: table; + margin: 0 auto; + position: relative; + span { + height: 5px; + width: 5px; + float: left; + margin: 0 1px; + background-color: $bot_message_text; + display: block; + border-radius: 50%; + opacity: 0.4; + @for $i from 1 through 3 { + &:nth-of-type(#{$i}) { + animation: 1s blink infinite ($i * .3333s); + } + } + } +} + +@keyframes blink { + 50% { + opacity: 1; + } +} diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/_home.scss b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/_home.scss new file mode 100644 index 00000000..854d3950 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/_home.scss @@ -0,0 +1,24 @@ +#home { + @include clearfix; + position: relative; + max-width: 650px; + margin: auto; +} + +#homepage_bot { + width: 400px; + height: 450px; + float: left; + border: 5px solid #333; + + iframe { + border: 0; + height: 100%; + width: 100%; + } + box-shadow: 5px 5px 5px rgba(0,0,0,0.5); +} + +#welcome { + margin-left: 440px; +} diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/embed.scss b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/embed.scss new file mode 100644 index 00000000..55552370 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/embed.scss @@ -0,0 +1,30 @@ +$height: 400px; + +#embedded_messenger { + + position: fixed; + z-index: 1000; + + bottom: -$height; + right: 2rem; + + height: $height + 34; + transition: 0.5s ease-in-out bottom; + + &.active { + bottom: 0; + } + + iframe { + height: $height; + width: 100%; + border: 0; + } + + #message_header { + background: #000; + padding: 0.5rem 1rem; + color: #FFF; + } + +} diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/styles.scss b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/styles.scss new file mode 100644 index 00000000..db8fd763 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/sass/styles.scss @@ -0,0 +1,8 @@ +/* shared botkit ui styles */ +@import "_botkit"; + +/* chat client */ +@import "_chat"; + +/* special styles for homepage */ +@import "_home"; diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/shrinkwrap.yaml b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/shrinkwrap.yaml new file mode 100644 index 00000000..569e5575 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-chatbot/shrinkwrap.yaml @@ -0,0 +1,1890 @@ +dependencies: + botbuilder: 4.10.0 + botbuilder-adapter-web: 1.0.4 + botbuilder-storage-mongodb: 0.9.5 + botkit: 4.5.0 + botkit-plugin-cms: 1.0.2 + dotenv: 7.0.0 +packages: + /@azure/ms-rest-js/1.2.6: + dependencies: + axios: 0.18.1 + form-data: 2.5.0 + tough-cookie: 2.5.0 + tslib: 1.10.0 + uuid: 3.3.2 + xml2js: 0.4.19 + dev: false + resolution: + integrity: sha512-8cmDpxsQjVdveJwYKtNnkJorxEORLYJu9UHaUvLZA6yHExzDeISHAcSVWE0J05+VkJtqheVHF17M+2ro18Cdnw== + /@azure/ms-rest-js/1.8.15: + dependencies: + '@types/tunnel': 0.0.0 + axios: 0.19.2 + form-data: 2.5.1 + tough-cookie: 2.5.0 + tslib: 1.13.0 + tunnel: 0.0.6 + uuid: 3.4.0 + xml2js: 0.4.23 + dev: false + resolution: + integrity: sha512-kIB71V3DcrA4iysBbOsYcxd4WWlOE7OFtCUYNfflPODM0lbIR23A236QeTn5iAeYwcHmMjR/TAKp5KQQh/WqoQ== + /@microsoft/recognizers-text-choice/1.1.2: + dependencies: + '@microsoft/recognizers-text': 1.1.4 + grapheme-splitter: 1.0.4 + dev: false + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-4hFdqxusM0YrOXYM2RVYPl2rLjItSh6VkRiACjWB95GKC/DBGjJRYQpTxhzuZAsJSkDMinu/aLf8DvQtwUaLtA== + /@microsoft/recognizers-text-choice/1.1.4: + dependencies: + '@microsoft/recognizers-text': 1.1.4 + grapheme-splitter: 1.0.4 + dev: false + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-4CddwFe4RVhZeJgW65ocBrEdeukBMghK8pgI0K0Qy2eA5ysPZQpeZ7BGSDz5QMQei5LPY+QaAQ3CHU+ORHoO7A== + /@microsoft/recognizers-text-date-time/1.1.2: + dependencies: + '@microsoft/recognizers-text': 1.1.4 + '@microsoft/recognizers-text-number': 1.1.4 + '@microsoft/recognizers-text-number-with-unit': 1.1.4 + lodash.isequal: 4.5.0 + lodash.tonumber: 4.0.3 + dev: false + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-tsdsl2Z3OMFhfWicFQSS4sbk/c0pVTIXhCglDXm/cfSNuQgNgy2NFFRquiQ6MkVwiIk2I7k76TnkoDZt7PD4Dg== + /@microsoft/recognizers-text-date-time/1.1.4: + dependencies: + '@microsoft/recognizers-text': 1.1.4 + '@microsoft/recognizers-text-number': 1.1.4 + '@microsoft/recognizers-text-number-with-unit': 1.1.4 + lodash.isequal: 4.5.0 + lodash.tonumber: 4.0.3 + dev: false + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-leMnjN+KYNwNvRD5T4G0ORUzkjlek/BBZDvQIjAujtyrd/pkViUnuouWIPkFT/dbSOxXML8et54CSk2KfHiWIA== + /@microsoft/recognizers-text-number-with-unit/1.1.4: + dependencies: + '@microsoft/recognizers-text': 1.1.4 + '@microsoft/recognizers-text-number': 1.1.4 + lodash.escaperegexp: 4.1.2 + lodash.last: 3.0.0 + lodash.max: 4.0.1 + dev: false + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-zl+CfmfWK0x/x+iSgaBAevKTYO0F4+z7SYHAHztaaaGuX8FERw2jmUjSgVetm5KA3EveyCx0XYGU1mRNY8p7Eg== + /@microsoft/recognizers-text-number/1.1.2: + dependencies: + '@microsoft/recognizers-text': 1.1.4 + bignumber.js: 7.2.1 + lodash.escaperegexp: 4.1.2 + lodash.sortby: 4.7.0 + lodash.trimend: 4.5.1 + dev: false + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-GESjSF42dllym83diyd6pmlzFwdzidewoq/qSQz89lSoTx9HdJQHjbXxwdBp7w4Ax/Jroo2lcAedM3B7alZhYQ== + /@microsoft/recognizers-text-number/1.1.4: + dependencies: + '@microsoft/recognizers-text': 1.1.4 + bignumber.js: 7.2.1 + lodash.escaperegexp: 4.1.2 + lodash.sortby: 4.7.0 + lodash.trimend: 4.5.1 + dev: false + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-6EmlR+HR+eJBIX7sQby1vs6LJB64wxLowHaGpIU9OCXFvZ5Nb0QT8qh10rC40v3Mtrz4DpScXfSXr9tWkIO5MQ== + /@microsoft/recognizers-text-sequence/1.1.4: + dependencies: + '@microsoft/recognizers-text': 1.1.4 + grapheme-splitter: 1.0.4 + dev: false + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-rb5j8/aE7HSOdIxaVfCGFrj0wWPpSq0CuykFg/A/iJNPP+FnAU71bgP5HexrwQcpCsDinauisX7u0DKIChrHRA== + /@microsoft/recognizers-text-suite/1.1.2: + dependencies: + '@microsoft/recognizers-text': 1.1.4 + '@microsoft/recognizers-text-choice': 1.1.4 + '@microsoft/recognizers-text-date-time': 1.1.4 + '@microsoft/recognizers-text-number': 1.1.4 + '@microsoft/recognizers-text-number-with-unit': 1.1.4 + '@microsoft/recognizers-text-sequence': 1.1.4 + dev: false + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-w3WCsKa//64jE1fGPFlV02rRg9+b3oDp+K5/skPAn4KDr80LjXxD1ulIgiJ2Ll/2OoBl8ociCiCjYA7zS3LpdQ== + /@microsoft/recognizers-text/1.1.4: + dev: false + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-hlSVXcaX5i8JcjuUJpVxmy2Z/GxvFXarF0KVySCFop57wNEnrLWMHe4I4DjP866G19VyIKRw+vPA32pkGhZgTg== + /@types/bson/4.0.0: + dependencies: + '@types/node': 11.13.9 + dev: false + resolution: + integrity: sha512-pq/rqJwJWkbS10crsG5bgnrisL8pML79KlMKQMoQwLUjlPAkrUHMvHJ3oGwE7WHR61Lv/nadMwXVAD2b+fpD8Q== + /@types/filenamify/2.0.2: + dependencies: + filenamify: 4.0.0 + deprecated: 'This is a stub types definition. filenamify provides its own type definitions, so you do not need this installed.' + dev: false + resolution: + integrity: sha512-/sO8rlEFYLZGjoDCIy1BmSdo+xNQbtJIgyrElZrzALolPUhBHvY/vQVGKSw4RSkREtuAv3eb6M7mDXvhpFxYbw== + /@types/jsonwebtoken/7.2.8: + dependencies: + '@types/node': 12.6.8 + dev: false + resolution: + integrity: sha512-XENN3YzEB8D6TiUww0O8SRznzy1v+77lH7UmuN54xq/IHIsyWjWOzZuFFTtoiRuaE782uAoRwBe/wwow+vQXZw== + /@types/mongodb/3.1.26: + dependencies: + '@types/bson': 4.0.0 + '@types/node': 11.13.9 + dev: false + resolution: + integrity: sha512-i7+l95IbqnGLRW+AJ6F2nzqosLUgU022lDuoHhbQquMV7tgek0vNUg9RwC2Fn7ImBSQSFdCWeU394ciPEwSeaQ== + /@types/node/10.14.13: + dev: false + resolution: + integrity: sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ== + /@types/node/10.14.6: + dev: false + resolution: + integrity: sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg== + /@types/node/10.17.28: + dev: false + resolution: + integrity: sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ== + /@types/node/11.13.9: + dev: false + resolution: + integrity: sha512-NJ4yuEVw5podZbINp3tEqUIImMSAEHaCXRiWCf3KC32l6hIKf0iPJEh2uZdT0fELfRYk310yLmMXqy2leZQUbg== + /@types/node/12.6.8: + dev: false + resolution: + integrity: sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== + /@types/node/14.6.0: + dev: false + resolution: + integrity: sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA== + /@types/node/8.10.62: + dev: false + resolution: + integrity: sha512-76fupxOYVxk36kb7O/6KtrAPZ9jnSK3+qisAX4tQMEuGNdlvl7ycwatlHqjoE6jHfVtXFM3pCrCixZOidc5cuw== + /@types/tunnel/0.0.0: + dependencies: + '@types/node': 14.6.0 + dev: false + resolution: + integrity: sha512-FGDp0iBRiBdPjOgjJmn1NH0KDLN+Z8fRmo+9J7XGBhubq1DPrGrbmG4UTlGzrpbCpesMqD0sWkzi27EYkOMHyg== + /@types/ws/6.0.4: + dependencies: + '@types/node': 14.6.0 + dev: false + resolution: + integrity: sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg== + /accepts/1.3.7: + dependencies: + mime-types: 2.1.24 + negotiator: 0.6.2 + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + /adal-node/0.2.1: + dependencies: + '@types/node': 8.10.62 + async: 2.6.3 + date-utils: 1.2.21 + jws: 3.2.2 + request: 2.88.2 + underscore: 1.10.2 + uuid: 3.4.0 + xmldom: 0.3.0 + xpath.js: 1.1.0 + dev: false + engines: + node: '>= 0.6.15' + resolution: + integrity: sha512-C/oasZuTy0NIqh5wPWjG/09XaG+zS7elC8upf1ZVExt9lSRncme4Ejbx8CKYk+wsGgj609y84txtRAXQVvqApg== + /ajv/6.10.0: + dependencies: + fast-deep-equal: 2.0.1 + fast-json-stable-stringify: 2.0.0 + json-schema-traverse: 0.4.1 + uri-js: 4.2.2 + dev: false + resolution: + integrity: sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== + /ajv/6.12.4: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.2.2 + dev: false + resolution: + integrity: sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== + /array-flatten/1.1.1: + dev: false + resolution: + integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + /asn1/0.2.4: + dependencies: + safer-buffer: 2.1.2 + dev: false + resolution: + integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + /assert-plus/1.0.0: + dev: false + engines: + node: '>=0.8' + resolution: + integrity: sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + /assert/1.4.1: + dependencies: + util: 0.10.3 + dev: false + resolution: + integrity: sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= + /assert/1.5.0: + dependencies: + object-assign: 4.1.1 + util: 0.10.3 + dev: false + resolution: + integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + /assertion-error/1.1.0: + dev: false + resolution: + integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + /async-limiter/1.0.0: + dev: false + resolution: + integrity: sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + /async/2.6.3: + dependencies: + lodash: 4.17.15 + dev: false + resolution: + integrity: sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + /asynckit/0.4.0: + dev: false + resolution: + integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k= + /aws-sign2/0.7.0: + dev: false + resolution: + integrity: sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + /aws4/1.10.1: + dev: false + resolution: + integrity: sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== + /aws4/1.8.0: + dev: false + resolution: + integrity: sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + /axios/0.18.1: + dependencies: + follow-redirects: 1.5.10 + is-buffer: 2.0.3 + dev: false + resolution: + integrity: sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== + /axios/0.19.2: + dependencies: + follow-redirects: 1.5.10 + dev: false + resolution: + integrity: sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + /base64url/3.0.1: + dev: false + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== + /bcrypt-pbkdf/1.0.2: + dependencies: + tweetnacl: 0.14.5 + dev: false + resolution: + integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + /bignumber.js/7.2.1: + dev: false + resolution: + integrity: sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== + /body-parser/1.19.0: + dependencies: + bytes: 3.1.0 + content-type: 1.0.4 + debug: 2.6.9 + depd: 1.1.2 + http-errors: 1.7.2 + iconv-lite: 0.4.24 + on-finished: 2.3.0 + qs: 6.7.0 + raw-body: 2.4.0 + type-is: 1.6.18 + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + /botbuilder-adapter-web/1.0.4: + dependencies: + botbuilder: 4.5.2 + botkit: 4.5.0 + debug: 4.1.1 + url: 0.11.0 + ws: 7.1.1 + dev: false + resolution: + integrity: sha512-9PNFjl/EITHKzUumbAlNUMOuYlk1ytQSYSKAUeb60cKyRwMvBpf83plNPZl3SMwn8LJy7mwURiy9a2AUkQiU4w== + /botbuilder-core/4.10.0: + dependencies: + assert: 1.5.0 + botframework-schema: 4.10.0 + dev: false + resolution: + integrity: sha512-pRj3STTivYiwpXazMNKyYSo8RfoFiPNvbwKeoVoeTfMveugbljHvWyydbDe9D0yM5iJGm8SkN4r8rIa1aDO8iQ== + /botbuilder-core/4.4.0: + dependencies: + assert: 1.4.1 + botframework-schema: 4.4.0 + dev: false + resolution: + integrity: sha512-j2UdMhPTci1Go+Onr0jIN0PGn3TmWbQTyp+5qN+ffwc03MWcPiemV8d/+k8m8ewn59Q1h3u0aEQ4JiKR6egGQA== + /botbuilder-core/4.5.2: + dependencies: + assert: 1.5.0 + botframework-schema: 4.5.2 + dev: false + resolution: + integrity: sha512-L7CDVNFlyU/iOKo+3ZLQL2BM+xwwbG/OFXtdgZwekq0iTmnqOWJLhPl/rZ/VRR3XeP6Bxq+WAI6TDzNJUA78xQ== + /botbuilder-dialogs/4.5.2: + dependencies: + '@microsoft/recognizers-text-choice': 1.1.2 + '@microsoft/recognizers-text-date-time': 1.1.2 + '@microsoft/recognizers-text-number': 1.1.2 + '@microsoft/recognizers-text-suite': 1.1.2 + '@types/node': 10.14.13 + botbuilder-core: 4.5.2 + dev: false + resolution: + integrity: sha512-b4tFiUrHQwk1TvdEDzIC+LpYOAfjnuTNTd60s38mkAb5YQvIaYTRtUi3Q07CG8mBZR8oeVvieS85vALvjyRp5Q== + /botbuilder-storage-mongodb/0.9.5: + dependencies: + '@types/mongodb': 3.1.26 + botbuilder: 4.4.0 + mongodb: 3.2.3 + request: 2.88.0 + dev: false + resolution: + integrity: sha512-2BjzwSfQQP45yD5C3nZm4aIYn+7KZTpwQwQRYXt2g0oOYfoA4CLhbjGBbyjguR4Fp129aTJ+UOPA1C062w0lDQ== + /botbuilder/4.10.0: + dependencies: + '@azure/ms-rest-js': 1.8.15 + '@types/node': 10.17.28 + axios: 0.19.2 + botbuilder-core: 4.10.0 + botframework-connector: 4.10.0 + botframework-streaming: 4.10.0 + filenamify: 4.1.0 + fs-extra: 7.0.1 + moment-timezone: 0.5.31 + dev: false + resolution: + integrity: sha512-A80shB/vmAS6omhqZ8tY6IkBvzVzvCTEE6PeRm07uhrnDRdqAEklxXqkAxzko/oCNQ1/WUljtf92R0fpi4WQiw== + /botbuilder/4.4.0: + dependencies: + '@types/filenamify': 2.0.2 + '@types/node': 10.14.6 + botbuilder-core: 4.4.0 + botframework-connector: 4.4.0 + filenamify: 2.1.0 + fs-extra: 7.0.1 + dev: false + resolution: + integrity: sha512-M3CIDjAwkOKjcxas7EahZujEIdVPc1BWS+l52DD9WNc8OL9cRMMnYVxNOCmT50CoyJ9MSEYYLJi0X3B3TVhOvQ== + /botbuilder/4.5.2: + dependencies: + '@types/node': 10.14.13 + botbuilder-core: 4.5.2 + botframework-connector: 4.5.2 + filenamify: 4.1.0 + fs-extra: 7.0.1 + dev: false + resolution: + integrity: sha512-8EDWgjJKTiQob6fPY/Dv2nY5jYV1svKnJ9FOOySkBXVLlXrO431iPJbCNnHCVuRbon479asuZZxuxnNAOuHE9Q== + /botframework-connector/4.10.0: + dependencies: + '@azure/ms-rest-js': 1.8.15 + '@types/jsonwebtoken': 7.2.8 + '@types/node': 10.17.28 + adal-node: 0.2.1 + base64url: 3.0.1 + botframework-schema: 4.10.0 + form-data: 2.5.1 + jsonwebtoken: 8.0.1 + node-fetch: 2.6.0 + rsa-pem-from-mod-exp: 0.8.4 + dev: false + resolution: + integrity: sha512-xjqeBo4bp1hLtYAjCawj4byRSRhtn6eM1U+bphKn9GVey813/sROEGhACrqjAJ4wXSVjW04/caWj/qDUNCN2Vg== + /botframework-connector/4.4.0: + dependencies: + '@azure/ms-rest-js': 1.2.6 + '@types/jsonwebtoken': 7.2.8 + '@types/node': 10.14.6 + base64url: 3.0.1 + botframework-schema: 4.4.0 + form-data: 2.3.3 + jsonwebtoken: 8.0.1 + nock: 10.0.6 + node-fetch: 2.5.0 + rsa-pem-from-mod-exp: 0.8.4 + dev: false + resolution: + integrity: sha512-BXI6wyQE9aqpfWkGNBmD9/M7rk+fXIMII+1iKu1FD9bsxSiJvuvq1wz5pCmzhRjfB3hjg8114V3tZHvMPFEErg== + /botframework-connector/4.5.2: + dependencies: + '@azure/ms-rest-js': 1.2.6 + '@types/jsonwebtoken': 7.2.8 + '@types/node': 10.14.13 + base64url: 3.0.1 + botframework-schema: 4.5.2 + form-data: 2.5.0 + jsonwebtoken: 8.0.1 + nock: 10.0.6 + node-fetch: 2.6.0 + rsa-pem-from-mod-exp: 0.8.4 + dev: false + resolution: + integrity: sha512-RJzBI98bDOHb3MvdvcCFmFw1JHElfwhIoC/de6jwX8wekKHlhtLU3jtefm5K3ZSuB9L9hQNSLgtao305rvzuAQ== + /botframework-schema/4.10.0: + dev: false + resolution: + integrity: sha512-Llix9JsmeRDL2vHKPdtOoZ1Na69TR5uqAInTpkuudYexEu5Q0zb8L97stWpxEDLNsMdkT/FyZJKCXnFpaNK9ug== + /botframework-schema/4.4.0: + dev: false + resolution: + integrity: sha512-3BWQEbArzHkw49BCdyNxqmSnLzkrL396Q0c+VcdabT3t75wV+dc4bwzSBuLfG0KW+fBjhSR4BXM8IQfnIZU0Vg== + /botframework-schema/4.5.2: + dev: false + resolution: + integrity: sha512-u4Q2/EAOiO+g0kj/mznyZ6cBDPBId4SzYEeshpIRW0O8zabgkm/fnAuvh77ahuVEynj0KtKBxEOu3a5imptdjA== + /botframework-streaming/4.10.0: + dependencies: + '@types/ws': 6.0.4 + uuid: 3.4.0 + ws: 7.3.1 + dev: false + resolution: + integrity: sha512-+fpEqL/3JbCRE7+/mJVI3U1L4jeL76V0YQkOnfzJ5eW0tK0En2rix5potkpYRev/N2lg8WriP5Qeyz2yJz9uew== + /botkit-plugin-cms/1.0.2: + dependencies: + botkit: 4.5.0 + debug: 4.1.1 + dev: false + resolution: + integrity: sha512-dKmuJ1pzN+zDuI2QTobmAYCKRcHNL+HPQMbIRnzdcuw5zXPb+11FjE3f9M/OOzVUXaH3Czdp58pHfhbZBURy6A== + /botkit/4.5.0: + dependencies: + body-parser: 1.19.0 + botbuilder: 4.5.2 + botbuilder-dialogs: 4.5.2 + botframework-connector: 4.5.2 + debug: 4.1.1 + express: 4.17.1 + hbs: 4.0.4 + mustache: 3.0.1 + path: 0.12.7 + request: 2.88.0 + ware: 1.3.0 + dev: false + resolution: + integrity: sha512-hlsJfUPbfGNTHK5pkgVMrkoLvP1HX9CHm0lJighQeLhR4q+W9ns4U67P2VxT2vgaV2CYRhZUTmDGhzhdZvLFTA== + /bson/1.1.1: + dev: false + engines: + node: '>=0.6.19' + resolution: + integrity: sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg== + /buffer-equal-constant-time/1.0.1: + dev: false + resolution: + integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + /bytes/3.1.0: + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + /caseless/0.12.0: + dev: false + resolution: + integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + /chai/4.2.0: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 3.0.1 + get-func-name: 2.0.0 + pathval: 1.1.0 + type-detect: 4.0.8 + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== + /check-error/1.0.2: + dev: false + resolution: + integrity: sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + /co/3.1.0: + dev: false + resolution: + integrity: sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g= + /combined-stream/1.0.7: + dependencies: + delayed-stream: 1.0.0 + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + /combined-stream/1.0.8: + dependencies: + delayed-stream: 1.0.0 + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + /commander/2.20.0: + dev: false + optional: true + resolution: + integrity: sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + /content-disposition/0.5.3: + dependencies: + safe-buffer: 5.1.2 + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + /content-type/1.0.4: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + /cookie-signature/1.0.6: + dev: false + resolution: + integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + /cookie/0.4.0: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + /core-util-is/1.0.2: + dev: false + resolution: + integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + /dashdash/1.14.1: + dependencies: + assert-plus: 1.0.0 + dev: false + engines: + node: '>=0.10' + resolution: + integrity: sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + /date-utils/1.2.21: + dev: false + engines: + node: '>0.4.0' + resolution: + integrity: sha1-YfsWzcEnSzyayq/+n8ad+HIKK2Q= + /debug/2.6.9: + dependencies: + ms: 2.0.0 + dev: false + resolution: + integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + /debug/3.1.0: + dependencies: + ms: 2.0.0 + dev: false + resolution: + integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + /debug/4.1.1: + dependencies: + ms: 2.1.2 + dev: false + resolution: + integrity: sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + /deep-eql/3.0.1: + dependencies: + type-detect: 4.0.8 + dev: false + engines: + node: '>=0.12' + resolution: + integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + /deep-equal/1.0.1: + dev: false + resolution: + integrity: sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= + /delayed-stream/1.0.0: + dev: false + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + /depd/1.1.2: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + /destroy/1.0.4: + dev: false + resolution: + integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + /dotenv/7.0.0: + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== + /ecc-jsbn/0.1.2: + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + dev: false + resolution: + integrity: sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + /ecdsa-sig-formatter/1.0.11: + dependencies: + safe-buffer: 5.2.0 + dev: false + resolution: + integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + /ee-first/1.1.1: + dev: false + resolution: + integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + /encodeurl/1.0.2: + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + /escape-html/1.0.3: + dev: false + resolution: + integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + /escape-string-regexp/1.0.5: + dev: false + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + /etag/1.8.1: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + /express/4.17.1: + dependencies: + accepts: 1.3.7 + array-flatten: 1.1.1 + body-parser: 1.19.0 + content-disposition: 0.5.3 + content-type: 1.0.4 + cookie: 0.4.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 1.1.2 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.1.2 + fresh: 0.5.2 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.3.0 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.5 + qs: 6.7.0 + range-parser: 1.2.1 + safe-buffer: 5.1.2 + send: 0.17.1 + serve-static: 1.14.1 + setprototypeof: 1.1.1 + statuses: 1.5.0 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + dev: false + engines: + node: '>= 0.10.0' + resolution: + integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + /extend/3.0.2: + dev: false + resolution: + integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + /extsprintf/1.3.0: + dev: false + engines: + '0': node >=0.6.0 + resolution: + integrity: sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + /extsprintf/1.4.0: + dev: false + engines: + '0': node >=0.6.0 + resolution: + integrity: sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + /fast-deep-equal/2.0.1: + dev: false + resolution: + integrity: sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + /fast-deep-equal/3.1.3: + dev: false + resolution: + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + /fast-json-stable-stringify/2.0.0: + dev: false + resolution: + integrity: sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + /fast-json-stable-stringify/2.1.0: + dev: false + resolution: + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + /filename-reserved-regex/2.0.0: + dev: false + engines: + node: '>=4' + resolution: + integrity: sha1-q/c9+rc10EVECr/qLZHzieu/oik= + /filenamify/2.1.0: + dependencies: + filename-reserved-regex: 2.0.0 + strip-outer: 1.0.1 + trim-repeated: 1.0.0 + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA== + /filenamify/4.0.0: + dependencies: + filename-reserved-regex: 2.0.0 + strip-outer: 1.0.1 + trim-repeated: 1.0.0 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-orfNDs+RPrEO4RctQ6RwsMZHGH+lGxc671AZH60kHFf69NXCZtwU+l0cqs8nzyvcV47Hqq1nwRe5thi+/zRtow== + /filenamify/4.1.0: + dependencies: + filename-reserved-regex: 2.0.0 + strip-outer: 1.0.1 + trim-repeated: 1.0.0 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-KQV/uJDI9VQgN7sHH1Zbk6+42cD6mnQ2HONzkXUfPJ+K2FC8GZ1dpewbbHw0Sz8Tf5k3EVdHVayM4DoAwWlmtg== + /finalhandler/1.1.2: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + /follow-redirects/1.5.10: + dependencies: + debug: 3.1.0 + dev: false + engines: + node: '>=4.0' + resolution: + integrity: sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + /foreachasync/3.0.0: + dev: false + resolution: + integrity: sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY= + /forever-agent/0.6.1: + dev: false + resolution: + integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + /form-data/2.3.3: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.7 + mime-types: 2.1.24 + dev: false + engines: + node: '>= 0.12' + resolution: + integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + /form-data/2.5.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.24 + dev: false + engines: + node: '>= 0.12' + resolution: + integrity: sha512-WXieX3G/8side6VIqx44ablyULoGruSde5PNTxoUyo5CeyAMX6nVWUd0rgist/EuX655cjhUhTo1Fo3tRYqbcA== + /form-data/2.5.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.27 + dev: false + engines: + node: '>= 0.12' + resolution: + integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + /forwarded/0.1.2: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + /fresh/0.5.2: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + /fs-extra/7.0.1: + dependencies: + graceful-fs: 4.1.15 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: false + engines: + node: '>=6 <7 || >=8' + resolution: + integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + /get-func-name/2.0.0: + dev: false + resolution: + integrity: sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + /getpass/0.1.7: + dependencies: + assert-plus: 1.0.0 + dev: false + resolution: + integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + /graceful-fs/4.1.15: + dev: false + resolution: + integrity: sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + /grapheme-splitter/1.0.4: + dev: false + resolution: + integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + /handlebars/4.0.14: + dependencies: + async: 2.6.3 + optimist: 0.6.1 + source-map: 0.6.1 + dev: false + engines: + node: '>=0.4.7' + hasBin: true + optionalDependencies: + uglify-js: 3.6.0 + resolution: + integrity: sha512-E7tDoyAA8ilZIV3xDJgl18sX3M8xB9/fMw8+mfW4msLW8jlX97bAnWgT3pmaNXuvzIEgSBMnAHfuXsB2hdzfow== + /har-schema/2.0.0: + dev: false + engines: + node: '>=4' + resolution: + integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + /har-validator/5.1.3: + dependencies: + ajv: 6.10.0 + har-schema: 2.0.0 + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + /har-validator/5.1.5: + dependencies: + ajv: 6.12.4 + har-schema: 2.0.0 + deprecated: this library is no longer supported + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + /hbs/4.0.4: + dependencies: + handlebars: 4.0.14 + walk: 2.3.9 + dev: false + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-esVlyV/V59mKkwFai5YmPRSNIWZzhqL5YMN0++ueMxyK1cCfPa5f6JiHtapPKAIVAhQR6rpGxow0troav9WMEg== + /http-errors/1.7.2: + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.1 + statuses: 1.5.0 + toidentifier: 1.0.0 + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + /http-errors/1.7.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.1.1 + statuses: 1.5.0 + toidentifier: 1.0.0 + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + /http-signature/1.2.0: + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.1 + sshpk: 1.16.1 + dev: false + engines: + node: '>=0.8' + npm: '>=1.3.7' + resolution: + integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + /iconv-lite/0.4.24: + dependencies: + safer-buffer: 2.1.2 + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + /inherits/2.0.1: + dev: false + resolution: + integrity: sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + /inherits/2.0.3: + dev: false + resolution: + integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + /inherits/2.0.4: + dev: false + resolution: + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + /ipaddr.js/1.9.0: + dev: false + engines: + node: '>= 0.10' + resolution: + integrity: sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== + /is-buffer/2.0.3: + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== + /is-typedarray/1.0.0: + dev: false + resolution: + integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + /isstream/0.1.2: + dev: false + resolution: + integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + /jsbn/0.1.1: + dev: false + resolution: + integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + /json-schema-traverse/0.4.1: + dev: false + resolution: + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + /json-schema/0.2.3: + dev: false + resolution: + integrity: sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + /json-stringify-safe/5.0.1: + dev: false + resolution: + integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + /jsonfile/4.0.0: + dev: false + optionalDependencies: + graceful-fs: 4.1.15 + resolution: + integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + /jsonwebtoken/8.0.1: + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.2 + xtend: 4.0.2 + dev: false + engines: + node: '>=0.12' + npm: '>=1.4.28' + resolution: + integrity: sha1-UNrvjQqMfeLNBrwQE7dbBMzz8M8= + /jsprim/1.4.1: + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.2.3 + verror: 1.10.0 + dev: false + engines: + '0': node >=0.6.0 + resolution: + integrity: sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + /jwa/1.4.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.0 + dev: false + resolution: + integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + /jws/3.2.2: + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.0 + dev: false + resolution: + integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + /lodash.escaperegexp/4.1.2: + dev: false + resolution: + integrity: sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + /lodash.includes/4.3.0: + dev: false + resolution: + integrity: sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + /lodash.isboolean/3.0.3: + dev: false + resolution: + integrity: sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + /lodash.isequal/4.5.0: + dev: false + resolution: + integrity: sha1-QVxEePK8wwEgwizhDtMib30+GOA= + /lodash.isinteger/4.0.4: + dev: false + resolution: + integrity: sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + /lodash.isnumber/3.0.3: + dev: false + resolution: + integrity: sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + /lodash.isplainobject/4.0.6: + dev: false + resolution: + integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + /lodash.isstring/4.0.1: + dev: false + resolution: + integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + /lodash.last/3.0.0: + dev: false + resolution: + integrity: sha1-JC9mMRLdTG5jcoxgo8kJ0b2tvUw= + /lodash.max/4.0.1: + dev: false + resolution: + integrity: sha1-hzVWbGGLNan3YFILSHrnllivE2o= + /lodash.once/4.1.1: + dev: false + resolution: + integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + /lodash.sortby/4.7.0: + dev: false + resolution: + integrity: sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + /lodash.tonumber/4.0.3: + dev: false + resolution: + integrity: sha1-C5azGzVnJ5Prf1pj7nkfG56QJdk= + /lodash.trimend/4.5.1: + dev: false + resolution: + integrity: sha1-EoBENyhrmMrYmWt5QU4RMAEUCC8= + /lodash/4.17.15: + dev: false + resolution: + integrity: sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + /media-typer/0.3.0: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + /memory-pager/1.5.0: + dev: false + optional: true + resolution: + integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== + /merge-descriptors/1.0.1: + dev: false + resolution: + integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + /methods/1.1.2: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + /mime-db/1.40.0: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== + /mime-db/1.44.0: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + /mime-types/2.1.24: + dependencies: + mime-db: 1.40.0 + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + /mime-types/2.1.27: + dependencies: + mime-db: 1.44.0 + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + /mime/1.6.0: + dev: false + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + /minimist/0.0.10: + dev: false + resolution: + integrity: sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + /minimist/0.0.8: + dev: false + resolution: + integrity: sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + /mkdirp/0.5.1: + dependencies: + minimist: 0.0.8 + dev: false + hasBin: true + resolution: + integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + /moment-timezone/0.5.31: + dependencies: + moment: 2.27.0 + dev: false + resolution: + integrity: sha512-+GgHNg8xRhMXfEbv81iDtrVeTcWt0kWmTEY1XQK14dICTXnWJnT0dxdlPspwqF3keKMVPXwayEsk1DI0AA/jdA== + /moment/2.27.0: + dev: false + resolution: + integrity: sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== + /mongodb-core/3.2.3: + dependencies: + bson: 1.1.1 + require_optional: 1.0.1 + safe-buffer: 5.1.2 + dev: false + optionalDependencies: + saslprep: 1.0.3 + resolution: + integrity: sha512-UyI0rmvPPkjOJV8XGWa9VCTq7R4hBVipimhnAXeSXnuAPjuTqbyfA5Ec9RcYJ1Hhu+ISnc8bJ1KfGZd4ZkYARQ== + /mongodb/3.2.3: + dependencies: + mongodb-core: 3.2.3 + safe-buffer: 5.1.2 + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-jw8UyPsq4QleZ9z+t/pIVy3L++51vKdaJ2Q/XXeYxk/3cnKioAH8H6f5tkkDivrQL4PUgUOHe9uZzkpRFH1XtQ== + /ms/2.0.0: + dev: false + resolution: + integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + /ms/2.1.1: + dev: false + resolution: + integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + /ms/2.1.2: + dev: false + resolution: + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + /mustache/3.0.1: + dev: false + engines: + npm: '>=1.4.0' + hasBin: true + resolution: + integrity: sha512-jFI/4UVRsRYdUbuDTKT7KzfOp7FiD5WzYmmwNwXyUVypC0xjoTL78Fqc0jHUPIvvGD+6DQSPHIt1NE7D1ArsqA== + /negotiator/0.6.2: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + /nock/10.0.6: + dependencies: + chai: 4.2.0 + debug: 4.1.1 + deep-equal: 1.0.1 + json-stringify-safe: 5.0.1 + lodash: 4.17.15 + mkdirp: 0.5.1 + propagate: 1.0.0 + qs: 6.7.0 + semver: 5.7.0 + dev: false + engines: + node: '>= 6.0' + resolution: + integrity: sha512-b47OWj1qf/LqSQYnmokNWM8D88KvUl2y7jT0567NB3ZBAZFz2bWp2PC81Xn7u8F2/vJxzkzNZybnemeFa7AZ2w== + /node-fetch/2.5.0: + dev: false + engines: + node: 4.x || >=6.0.0 + resolution: + integrity: sha512-YuZKluhWGJwCcUu4RlZstdAxr8bFfOVHakc1mplwHkk8J+tqM1Y5yraYvIUpeX8aY7+crCwiELJq7Vl0o0LWXw== + /node-fetch/2.6.0: + dev: false + engines: + node: 4.x || >=6.0.0 + resolution: + integrity: sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + /oauth-sign/0.9.0: + dev: false + resolution: + integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + /object-assign/4.1.1: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + /on-finished/2.3.0: + dependencies: + ee-first: 1.1.1 + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + /optimist/0.6.1: + dependencies: + minimist: 0.0.10 + wordwrap: 0.0.3 + dev: false + resolution: + integrity: sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + /parseurl/1.3.3: + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + /path-to-regexp/0.1.7: + dev: false + resolution: + integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + /path/0.12.7: + dependencies: + process: 0.11.10 + util: 0.10.4 + dev: false + resolution: + integrity: sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8= + /pathval/1.1.0: + dev: false + resolution: + integrity: sha1-uULm1L3mUwBe9rcTYd74cn0GReA= + /performance-now/2.1.0: + dev: false + resolution: + integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + /process/0.11.10: + dev: false + engines: + node: '>= 0.6.0' + resolution: + integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + /propagate/1.0.0: + dev: false + engines: + '0': node >= 0.8.1 + resolution: + integrity: sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk= + /proxy-addr/2.0.5: + dependencies: + forwarded: 0.1.2 + ipaddr.js: 1.9.0 + dev: false + engines: + node: '>= 0.10' + resolution: + integrity: sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== + /psl/1.1.31: + dev: false + resolution: + integrity: sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== + /psl/1.2.0: + dev: false + resolution: + integrity: sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA== + /punycode/1.3.2: + dev: false + resolution: + integrity: sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + /punycode/1.4.1: + dev: false + resolution: + integrity: sha1-wNWmOycYgArY4esPpSachN1BhF4= + /punycode/2.1.1: + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + /qs/6.5.2: + dev: false + engines: + node: '>=0.6' + resolution: + integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + /qs/6.7.0: + dev: false + engines: + node: '>=0.6' + resolution: + integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + /querystring/0.2.0: + dev: false + engines: + node: '>=0.4.x' + resolution: + integrity: sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + /range-parser/1.2.1: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + /raw-body/2.4.0: + dependencies: + bytes: 3.1.0 + http-errors: 1.7.2 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + /request/2.88.0: + dependencies: + aws-sign2: 0.7.0 + aws4: 1.8.0 + caseless: 0.12.0 + combined-stream: 1.0.7 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.3 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.24 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.2 + safe-buffer: 5.1.2 + tough-cookie: 2.4.3 + tunnel-agent: 0.6.0 + uuid: 3.3.2 + dev: false + engines: + node: '>= 4' + resolution: + integrity: sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + /request/2.88.2: + dependencies: + aws-sign2: 0.7.0 + aws4: 1.10.1 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.27 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.2 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + deprecated: 'request has been deprecated, see https://github.com/request/request/issues/3142' + dev: false + engines: + node: '>= 6' + resolution: + integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + /require_optional/1.0.1: + dependencies: + resolve-from: 2.0.0 + semver: 5.7.0 + dev: false + resolution: + integrity: sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g== + /resolve-from/2.0.0: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= + /rsa-pem-from-mod-exp/0.8.4: + dev: false + resolution: + integrity: sha1-NipCxtMEBW1JOz8SvOq7LGV2ptQ= + /safe-buffer/5.1.2: + dev: false + resolution: + integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + /safe-buffer/5.2.0: + dev: false + resolution: + integrity: sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + /safe-buffer/5.2.1: + dev: false + resolution: + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + /safer-buffer/2.1.2: + dev: false + resolution: + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + /saslprep/1.0.3: + dependencies: + sparse-bitfield: 3.0.3 + dev: false + engines: + node: '>=6' + optional: true + resolution: + integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== + /sax/1.2.4: + dev: false + resolution: + integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + /semver/5.7.0: + dev: false + hasBin: true + resolution: + integrity: sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + /send/0.17.1: + dependencies: + debug: 2.6.9 + depd: 1.1.2 + destroy: 1.0.4 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 1.7.3 + mime: 1.6.0 + ms: 2.1.1 + on-finished: 2.3.0 + range-parser: 1.2.1 + statuses: 1.5.0 + dev: false + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + /serve-static/1.14.1: + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.17.1 + dev: false + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + /setprototypeof/1.1.1: + dev: false + resolution: + integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + /source-map/0.6.1: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + /sparse-bitfield/3.0.3: + dependencies: + memory-pager: 1.5.0 + dev: false + optional: true + resolution: + integrity: sha1-/0rm5oZWBWuks+eSqzM004JzyhE= + /sshpk/1.16.1: + dependencies: + asn1: 0.2.4 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + dev: false + engines: + node: '>=0.10.0' + hasBin: true + resolution: + integrity: sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + /statuses/1.5.0: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + /strip-outer/1.0.1: + dependencies: + escape-string-regexp: 1.0.5 + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + /toidentifier/1.0.0: + dev: false + engines: + node: '>=0.6' + resolution: + integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + /tough-cookie/2.4.3: + dependencies: + psl: 1.1.31 + punycode: 1.4.1 + dev: false + engines: + node: '>=0.8' + resolution: + integrity: sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + /tough-cookie/2.5.0: + dependencies: + psl: 1.2.0 + punycode: 2.1.1 + dev: false + engines: + node: '>=0.8' + resolution: + integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + /trim-repeated/1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-42RqLqTokTEr9+rObPsFOAvAHCE= + /tslib/1.10.0: + dev: false + resolution: + integrity: sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + /tslib/1.13.0: + dev: false + resolution: + integrity: sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + /tunnel-agent/0.6.0: + dependencies: + safe-buffer: 5.1.2 + dev: false + resolution: + integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + /tunnel/0.0.6: + dev: false + engines: + node: '>=0.6.11 <=0.7.0 || >=0.7.3' + resolution: + integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== + /tweetnacl/0.14.5: + dev: false + resolution: + integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + /type-detect/4.0.8: + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + /type-is/1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.24 + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + /uglify-js/3.6.0: + dependencies: + commander: 2.20.0 + source-map: 0.6.1 + dev: false + engines: + node: '>=0.8.0' + hasBin: true + optional: true + resolution: + integrity: sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + /underscore/1.10.2: + dev: false + resolution: + integrity: sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg== + /universalify/0.1.2: + dev: false + engines: + node: '>= 4.0.0' + resolution: + integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + /unpipe/1.0.0: + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + /uri-js/4.2.2: + dependencies: + punycode: 2.1.1 + dev: false + resolution: + integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + /url/0.11.0: + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + dev: false + resolution: + integrity: sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + /util/0.10.3: + dependencies: + inherits: 2.0.1 + dev: false + resolution: + integrity: sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + /util/0.10.4: + dependencies: + inherits: 2.0.3 + dev: false + resolution: + integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + /utils-merge/1.0.1: + dev: false + engines: + node: '>= 0.4.0' + resolution: + integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + /uuid/3.3.2: + dev: false + hasBin: true + resolution: + integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + /uuid/3.4.0: + dev: false + hasBin: true + resolution: + integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + /vary/1.1.2: + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + /verror/1.10.0: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.4.0 + dev: false + engines: + '0': node >=0.6.0 + resolution: + integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + /walk/2.3.9: + dependencies: + foreachasync: 3.0.0 + dev: false + resolution: + integrity: sha1-MbTbZnjyrgHDnqn7hyWpAx5Vins= + /ware/1.3.0: + dependencies: + wrap-fn: 0.1.5 + dev: false + resolution: + integrity: sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q= + /wordwrap/0.0.3: + dev: false + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + /wrap-fn/0.1.5: + dependencies: + co: 3.1.0 + dev: false + resolution: + integrity: sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU= + /ws/7.1.1: + dependencies: + async-limiter: 1.0.0 + dev: false + resolution: + integrity: sha512-o41D/WmDeca0BqYhsr3nJzQyg9NF5X8l/UdnFNux9cS3lwB+swm8qGWX5rn+aD6xfBU3rGmtHij7g7x6LxFU3A== + /ws/7.3.1: + dev: false + engines: + node: '>=8.3.0' + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + resolution: + integrity: sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + /xml2js/0.4.19: + dependencies: + sax: 1.2.4 + xmlbuilder: 9.0.7 + dev: false + resolution: + integrity: sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + /xml2js/0.4.23: + dependencies: + sax: 1.2.4 + xmlbuilder: 11.0.1 + dev: false + engines: + node: '>=4.0.0' + resolution: + integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + /xmlbuilder/11.0.1: + dev: false + engines: + node: '>=4.0' + resolution: + integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + /xmlbuilder/9.0.7: + dev: false + engines: + node: '>=4.0' + resolution: + integrity: sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + /xmldom/0.3.0: + dev: false + engines: + node: '>=10.0.0' + resolution: + integrity: sha512-z9s6k3wxE+aZHgXYxSTpGDo7BYOUfJsIRyoZiX6HTjwpwfS2wpQBQKa2fD+ShLyPkqDYo5ud7KitmLZ2Cd6r0g== + /xpath.js/1.1.0: + dev: false + engines: + node: '>=0.4.0' + resolution: + integrity: sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ== + /xtend/4.0.2: + dev: false + engines: + node: '>=0.4' + resolution: + integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +registry: 'https://registry.npmjs.org/' +shrinkwrapMinorVersion: 9 +shrinkwrapVersion: 3 +specifiers: + botbuilder: ^4.10.0 + botbuilder-adapter-web: ^1.0.4 + botbuilder-storage-mongodb: ^0.9.5 + botkit: ^4.5.0 + botkit-plugin-cms: ^1.0.2 + dotenv: ^7.0.0 diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/.github/workflows/build.yaml b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/.github/workflows/build.yaml new file mode 100644 index 00000000..efbc060f --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/.github/workflows/build.yaml @@ -0,0 +1,47 @@ +on: + push: + branches: + - main + +jobs: + build-prod-image: + name: build-image + runs-on: ubuntu-latest + env: + DEPLOY_USER: ci + REGISTRY: __REGISTRY_IP__:30080 + KUBE_APISERVER: __REGISTRY_IP__:6443 + #FLAG: ${{ secrets.CTF_FLAG }} + steps: + - name: Install Kubectl + uses: azure/setup-kubectl@v3 + + - name: Git Checkout + uses: https://gitea.com/actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + config-inline: | + [registry."${{ env.REGISTRY }}"] + http = true + insecure = true + + - name: Login to Production Registry + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ env.DEPLOY_USER }} + password: ${{ secrets.DEPLOY_KEY }} + + - name: Container Build + uses: docker/build-push-action@v4 + with: + push: true + tags: ${{ env.REGISTRY }}/prod-image:latest + + - name: Deploy to Cluster + run: | + export KUBECONFIG=$(mktemp) + echo "${{ secrets.KUBECONFIG }}" > $KUBECONFIG + kubectl apply -f cronjob.yaml diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/CONTRIBUTING.md b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/CONTRIBUTING.md new file mode 100644 index 00000000..0d836c2e --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/CONTRIBUTING.md @@ -0,0 +1,16 @@ +# Contributing to Rescue Drop + +Thank you for contributing to Rescue Drop! + +Rescue Drop use the Apache 2.0 licence and accepts contributions via pull requests. + +## How Can I Contribute? + +Submit any contributions via a pull request and our maintainers will review the changes. Please be prepared to respond to any further questions from the maintainers around the content being contributed. + +If the contribution is fixing a bug, please use this guidance: + +- **Use a clear and descriptive title** for the issue to identify the problem +- **Describe the exact steps which reproduce the problem** in as many details as possible. +- **Describe the behaviour you observed after following the steps** and point out what exactly is the problem with that behaviour +- **Explain which behaviour you expected to see instead and why.** \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/Dockerfile b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/Dockerfile new file mode 100644 index 00000000..1704f313 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/Dockerfile @@ -0,0 +1,12 @@ +# syntax=docker/dockerfile:1 + +FROM python:3.10-alpine + +WORKDIR / + +COPY requirements.txt requirements.txt +RUN pip3 install -r requirements.txt + +COPY process-orders.py process-orders.py + +ENTRYPOINT [ "python3", "process-orders.py" ] \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/LICENSE b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/LICENSE new file mode 100644 index 00000000..ceb22e7e --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017 control-plane.io + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/MAINTAINERS b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/MAINTAINERS new file mode 100644 index 00000000..4cca6add --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/MAINTAINERS @@ -0,0 +1,3 @@ +Dawn Shaw, Rescue Drop +Ian Ramos, Rescue Drop +Julia Flynn, Rescue Drop \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/README.md b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/README.md new file mode 100644 index 00000000..719db62a --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/README.md @@ -0,0 +1,14 @@ +# Rescue Drop - Orders Processor (WIP) + +## Overview + +The Rescue Drop Orders Processor application is a scheduled service which checks for new orders to process and instructs the onward receiver to place the order at the appropiate distributed warehouse. + +## Application + +The application is built and deployed as a container into our Kubernetes cluster. It processes customer orders which are stored in a database. Currently the application is work in progress whilst we are designing and building the remaining services. + +### Contributions + +If you are intested in contributing to the Orders Processor application, please see our recommendations in CONTRIBUTING.md + diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/cronjob.yaml b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/cronjob.yaml new file mode 100644 index 00000000..f2c084e2 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/cronjob.yaml @@ -0,0 +1,29 @@ +apiVersion: batch/v1 +kind: CronJob +metadata: + name: process-orders + namespace: rescue-drop-prod +spec: + schedule: "* * * * *" + jobTemplate: + spec: + template: + spec: + containers: + - name: processor + image: reg.rescue.drop/prod-image:latest + args: ["--db", "/db/orders.db"] + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + volumeMounts: + - mountPath: /db + name: dbpath + imagePullSecrets: + - name: prod-pull-creds + volumes: + - name: dbpath + persistentVolumeClaim: + claimName: prod-db + nodeName: k8s-master-0 + restartPolicy: OnFailure diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/process-orders.py b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/process-orders.py new file mode 100644 index 00000000..47a48078 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/process-orders.py @@ -0,0 +1,57 @@ +import sqlite3 +from sqlite3 import Error +import datetime +import argparse +from pathlib import Path + +def create_connection(db_file): + conn = None + try: + conn = sqlite3.connect(db_file) + except Error as e: + print(e) + + return conn + + +def check_orders(conn): + current_date = datetime.date.today() + + cur = conn.cursor() + cur.execute(f"SELECT date FROM orders where date = {current_date}") + + rows = cur.fetchall() + + if rows: + print("Processing new order") + else: + print("No new orders to process") + + +def connect(db): + # create a database connection + conn = create_connection(db) + with conn: + check_orders(conn) + +def main() -> None: + parser = argparse.ArgumentParser(description='process new orders') + parser.add_argument('--db', + metavar='db', + type=str, + default='/tmp/orders.db', + help='directory for orders database') + args = parser.parse_args() + location = Path(args.db) + + if location.is_file(): + try: + connect(args.db) + except KeyboardInterrupt: + print("user interrupted the program.") + raise SystemExit(0) + else: + print("Database does not exist") + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/requirements.txt b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/requirements.txt new file mode 100644 index 00000000..2601f071 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-orders-processor/requirements.txt @@ -0,0 +1,3 @@ +argparse +datetime +pathlib \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-test-ci/.github/workflows/build.yaml b/scenarios/roles/devious-developer-data-dump/files/_git-repo-test-ci/.github/workflows/build.yaml new file mode 100644 index 00000000..342d7ffa --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-test-ci/.github/workflows/build.yaml @@ -0,0 +1,21 @@ +on: + push: + branches: + - main + +jobs: + build-image: + name: build-image + runs-on: ubuntu-latest + env: + TOKEN: __TOKEN__ + steps: + - name: Git Checkout + uses: https://gitea.com/actions/checkout@v3 + with: + token: ${{ env.TOKEN }} + + - name: test build image + uses: docker/build-push-action@v4 + with: + push: false diff --git a/scenarios/roles/devious-developer-data-dump/files/_git-repo-test-ci/Dockerfile b/scenarios/roles/devious-developer-data-dump/files/_git-repo-test-ci/Dockerfile new file mode 100644 index 00000000..626a1501 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/_git-repo-test-ci/Dockerfile @@ -0,0 +1,5 @@ +FROM alpine + +RUN apk add gcc musl-dev + +## Build commands go here diff --git a/scenarios/roles/devious-developer-data-dump/files/challenge.txt b/scenarios/roles/devious-developer-data-dump/files/challenge.txt new file mode 100644 index 00000000..178eecbc --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/challenge.txt @@ -0,0 +1,16 @@ + ____________________________________________________________________________ + | ____ | + | [____] [_] [_][_][_][_] [_][_][_][_] [_][_][_][_] [_][_][_] [_][_][_][_] | + | ___ | + | [_][_] [§][1][2][3][4][5][6][7][8][9][0][+]['][___] [_][_][_] [_][_][_][_] | + | [_][_] [__][q][å][ä][p][y][f][g][c][r][l][x][@][ | [_][_][_] [_][_][_][ | | + | [_][_] [___][a][o][e][u][i][d][h][t][n][s][j][-][_| [_][_][_][_| | + | [_][_] [_][<]['][,][.][k][ö][b][m][w][v][z][______] [_] [_][_][_][ | | + | [_][_] [__][_][__][_____________________][__][_][_] [_][_][_] [____][_][_| | + |____________________________________________________________________________| + +Captain Hλ$ħ𝔍Ⱥ¢k is targetting a distribution company called Rescue Drop as it holds Personal Identifiable Information (PII) + +The Rescue Drop application is not accessible publicly but is open source! + +Can you exfiltrate the sensitive data and prove your worth to the Hλ$ħ𝔍Ⱥ¢k motley crew? diff --git a/scenarios/roles/devious-developer-data-dump/files/favicon.svg b/scenarios/roles/devious-developer-data-dump/files/favicon.svg new file mode 100644 index 00000000..443521a8 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/files/home.tmpl b/scenarios/roles/devious-developer-data-dump/files/home.tmpl new file mode 100644 index 00000000..b0cd68f6 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/home.tmpl @@ -0,0 +1,16 @@ +{{template "base/head" .}} +
+
+
+
+

+ RESCUE DROP +

+
+
+ +
+
+
+
+{{template "base/footer" .}} diff --git a/scenarios/roles/devious-developer-data-dump/files/logo.png b/scenarios/roles/devious-developer-data-dump/files/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bfaae14659e2bd459cf9c9a4f5c2ebc7e0731159 GIT binary patch literal 31763 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

F#b(d)(nuigqttnR@N-agWgxa;&< z&iT>NZh!{)yG9bbn=<|Un7MQg&4++Q82l)$a^*7SA^!sjq>ADI literal 0 HcmV?d00001 diff --git a/scenarios/roles/devious-developer-data-dump/files/logo.svg b/scenarios/roles/devious-developer-data-dump/files/logo.svg new file mode 100644 index 00000000..443521a8 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/files/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/tasks/main.yaml b/scenarios/roles/devious-developer-data-dump/tasks/main.yaml new file mode 100644 index 00000000..bcdd98d1 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/tasks/main.yaml @@ -0,0 +1,170 @@ +--- + +- name: Install calico network + ansible.builtin.include_role: + name: cluster-network + tasks_from: calico + +- name: Apply K8s manifests + kubernetes.core.k8s: + definition: "{{ lookup('template', item) | from_yaml_all }}" + state: "{{ state }}" + loop: + - templates/manifests/00-ns.yaml + - templates/manifests/01-init-storage.yaml + - templates/manifests/03-gitea-deploy.yaml + - templates/manifests/04-zot.yaml + - templates/manifests/05-ingress-deploy.yaml + - templates/manifests/06-ingress-config.yaml + - templates/manifests/07-db-storage.yaml + - templates/manifests/08-creds.yaml + - templates/manifests/08-runner-rbac.yaml + - templates/manifests/09-jumpbox.yaml + become: no + when: "'bastion' in inventory_hostname" + +- name: 00-master + ansible.builtin.shell: + cmd: "{{ lookup('ansible.builtin.template', 'templates/scripts/00-master.sh') }}" + args: + executable: /bin/bash + environment: + KUBECONFIG: /etc/kubernetes/admin.conf + when: "'master-1' in inventory_hostname" + +- name: 01-nodes-every + ansible.builtin.shell: + cmd: "{{ lookup('ansible.builtin.template', 'templates/scripts/01-nodes-every.sh') }}" + args: + executable: /bin/bash + when: inventory_hostname in groups['nodes'] + +- name: 01-worker-1 + ansible.builtin.shell: + cmd: "{{ lookup('ansible.builtin.template', 'templates/scripts/01-worker-1.sh') }}" + args: + executable: /bin/bash + when: "'node-1' in inventory_hostname" + +- name: install socat - 02-bastion + ansible.builtin.apt: + name: socat + state: "{{ state }}" + when: "'bastion' in inventory_hostname" + +- name: 02-bastion + ansible.builtin.shell: + cmd: "{{ lookup('ansible.builtin.template', 'templates/scripts/02-bastion.sh') }}" + args: + executable: /bin/bash + when: "'bastion' in inventory_hostname" + +# TODO: delete files/scripts/02-local.sh + +- name: 02-local + ansible.builtin.copy: + src: "{{ role_path }}/files/{{ item }}" + dest: "/mnt/psql-data/gitea/public/img/{{ item }}" + loop: + - logo.png + - logo.svg + - favicon.svg + when: "'node-1' in inventory_hostname" + +- name: 02-local + ansible.builtin.copy: + src: "{{ role_path }}/files/home.tmpl" + dest: /mnt/psql-data/gitea/templates/home.tmpl + when: "'node-1' in inventory_hostname" + +- name: 03-master + ansible.builtin.shell: + cmd: "{{ lookup('ansible.builtin.template', 'templates/scripts/03-master.sh') }}" + args: + executable: /bin/bash + when: "'master-1' in inventory_hostname" + +- name: 03-worker-2.sh + ansible.builtin.shell: + cmd: "{{ lookup('ansible.builtin.template', 'templates/scripts/03-worker-2.sh') }}" + args: + executable: /bin/bash + when: "'node-2' in inventory_hostname" + +- ansible.builtin.uri: + url: http://localhost:30080 + register: _result + until: _result.status == 200 + retries: 180 + delay: 5 + when: "'master-1' in inventory_hostname" + +- name: 04-master.sh + ansible.builtin.shell: + cmd: "{{ lookup('ansible.builtin.template', 'templates/scripts/04-master.sh') }}" + args: + executable: /bin/bash + when: "'master-1' in inventory_hostname" + +- name: 05-local.sh - gitrepo + ansible.builtin.copy: + src: "{{ role_path }}/files/_git-repo-orders-processor/" + dest: /tmp/gitrepo + when: "'master-1' in inventory_hostname" + +- name: 05-local.sh - 1 + ansible.builtin.shell: + cmd: "{{ lookup('ansible.builtin.template', 'templates/scripts/05-local_1.sh') }}" + args: + executable: /bin/bash + when: "'master-1' in inventory_hostname" + +- name: 05-local.sh - 2 + ansible.builtin.shell: + cmd: "{{ lookup('ansible.builtin.template', 'templates/scripts/05-local_2.sh') }}" + args: + executable: /bin/bash + when: inventory_hostname in groups['nodes'] + +- name: 05-local.sh - cirepo + ansible.builtin.copy: + src: "{{ role_path }}/files/_git-repo-test-ci/" + dest: /tmp/cirepo + when: "'master-1' in inventory_hostname" + +- name: 05-local.sh - 3 + ansible.builtin.shell: + cmd: "{{ lookup('ansible.builtin.template', 'templates/scripts/05-local_3.sh') }}" + args: + executable: /bin/bash + when: "'master-1' in inventory_hostname" + +- name: 05-local.sh - chatbotrepo + ansible.builtin.copy: + src: "{{ role_path }}/files/_git-repo-chatbot/" + dest: /tmp/chatbotrepo + when: "'master-1' in inventory_hostname" + +- name: 05-local.sh - 4 + ansible.builtin.shell: + cmd: "{{ lookup('ansible.builtin.template', 'templates/scripts/05-local_4.sh') }}" + args: + executable: /bin/bash + when: "'master-1' in inventory_hostname" + +- name: Set starting point + ansible.builtin.include_role: + name: starting-point + tasks_from: pod + vars: + namespace: dmz + pod: jumpbox + when: "'bastion' in inventory_hostname" + +- name: Copy challenge + ansible.builtin.include_role: + name: starting-point + tasks_from: challenge + vars: + challenge_content: "{{ lookup('ansible.builtin.file', 'files/challenge.txt') }}" + when: "'bastion' in inventory_hostname" diff --git a/scenarios/roles/devious-developer-data-dump/templates/manifests/00-ns.yaml b/scenarios/roles/devious-developer-data-dump/templates/manifests/00-ns.yaml new file mode 100644 index 00000000..eddcc917 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/manifests/00-ns.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: gitea-system + labels: + pod-security.kubernetes.io/enforce: baseline + pod-security.kubernetes.io/enforce-version: latest + pod-security.kubernetes.io/warn: baseline + pod-security.kubernetes.io/warn-version: latest +--- +apiVersion: v1 +kind: Namespace +metadata: + name: ingress-nginx + labels: + pod-security.kubernetes.io/enforce: baseline + pod-security.kubernetes.io/enforce-version: latest + pod-security.kubernetes.io/warn: baseline + pod-security.kubernetes.io/warn-version: latest +--- +apiVersion: v1 +kind: Namespace +metadata: + name: rescue-drop-prod + labels: + pod-security.kubernetes.io/enforce: baseline + pod-security.kubernetes.io/enforce-version: latest + pod-security.kubernetes.io/warn: restricted + pod-security.kubernetes.io/warn-version: latest diff --git a/scenarios/roles/devious-developer-data-dump/templates/manifests/01-init-storage.yaml b/scenarios/roles/devious-developer-data-dump/templates/manifests/01-init-storage.yaml new file mode 100644 index 00000000..54964803 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/manifests/01-init-storage.yaml @@ -0,0 +1,50 @@ +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: local-storage +provisioner: kubernetes.io/no-provisioner +volumeBindingMode: WaitForFirstConsumer +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: gitea-data-host-pv +spec: + capacity: + storage: 10Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + storageClassName: local-storage + local: + path: /mnt/gitea-data + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - "{{ node1_hostname }}" +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: gitea-psql-pv +spec: + capacity: + storage: 10Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + storageClassName: local-storage + local: + path: /mnt/psql-data + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - "{{ node1_hostname }}" diff --git a/scenarios/roles/devious-developer-data-dump/templates/manifests/03-gitea-deploy.yaml b/scenarios/roles/devious-developer-data-dump/templates/manifests/03-gitea-deploy.yaml new file mode 100644 index 00000000..c42d3c5f --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/manifests/03-gitea-deploy.yaml @@ -0,0 +1,895 @@ +--- +# Source: gitea/charts/postgresql/templates/secrets.yaml +apiVersion: v1 +kind: Secret +metadata: + name: gitea-postgresql + namespace: gitea-system + labels: + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.2.6 + app.kubernetes.io/instance: gitea + app.kubernetes.io/managed-by: Helm +type: Opaque +data: + postgres-password: "RU9aSWRCT3cxbQ==" + password: "Z2l0ZWE=" + # We don't auto-generate LDAP password when it's not provided as we do for other passwords +--- +# Source: gitea/templates/gitea/config.yaml +apiVersion: v1 +kind: Secret +metadata: + name: gitea-inline-config + namespace: default + labels: + helm.sh/chart: gitea-8.0.2 + app: gitea + app.kubernetes.io/name: gitea + app.kubernetes.io/instance: gitea + app.kubernetes.io/version: "latest" + version: "latest" + app.kubernetes.io/managed-by: Helm +type: Opaque +stringData: + _generals_: "" + database: |- + DB_TYPE=postgres + HOST=gitea-postgresql.gitea-system.svc.cluster.local:5432 + NAME=gitea + PASSWD=gitea + USER=gitea + metrics: ENABLED=false + repository: ROOT=/data/git/gitea-repositories + security: INSTALL_LOCK=true + server: |- + APP_DATA_PATH=/data + DOMAIN=git.example.com + ENABLE_PPROF=false + HTTP_PORT=3000 + PROTOCOL=http + ROOT_URL=http://git.example.com + SSH_DOMAIN=git.example.com + SSH_LISTEN_PORT=22 + SSH_PORT=22 +--- +# Source: gitea/templates/gitea/config.yaml +apiVersion: v1 +kind: Secret +metadata: + name: gitea + namespace: default + labels: + helm.sh/chart: gitea-8.0.2 + app: gitea + app.kubernetes.io/name: gitea + app.kubernetes.io/instance: gitea + app.kubernetes.io/version: "latest" + version: "latest" + app.kubernetes.io/managed-by: Helm +type: Opaque +stringData: + config_environment.sh: |- + #!/usr/bin/env bash + set -euo pipefail + + function env2ini::log() { + printf "${1}\n" + } + + function env2ini::read_config_to_env() { + local section="${1}" + local line="${2}" + + if [[ -z "${line}" ]]; then + # skip empty line + return + fi + + # 'xargs echo -n' trims all leading/trailing whitespaces and a trailing new line + local setting="$(awk -F '=' '{print $1}' <<< "${line}" | xargs echo -n)" + + if [[ -z "${setting}" ]]; then + env2ini::log ' ! invalid setting' + exit 1 + fi + + local value='' + local regex="^${setting}(\s*)=(\s*)(.*)" + if [[ $line =~ $regex ]]; then + value="${BASH_REMATCH[3]}" + else + env2ini::log ' ! invalid setting' + exit 1 + fi + + env2ini::log " + '${setting}'" + + if [[ -z "${section}" ]]; then + export "ENV_TO_INI____${setting^^}=${value}" # '^^' makes the variable content uppercase + return + fi + + local masked_section="${section//./_0X2E_}" # '//' instructs to replace all matches + masked_section="${masked_section//-/_0X2D_}" + + export "ENV_TO_INI__${masked_section^^}__${setting^^}=${value}" # '^^' makes the variable content uppercase + } + + function env2ini::reload_preset_envs() { + env2ini::log "Reloading preset envs..." + + while read -r line; do + if [[ -z "${line}" ]]; then + # skip empty line + return + fi + + # 'xargs echo -n' trims all leading/trailing whitespaces and a trailing new line + local setting="$(awk -F '=' '{print $1}' <<< "${line}" | xargs echo -n)" + + if [[ -z "${setting}" ]]; then + env2ini::log ' ! invalid setting' + exit 1 + fi + + local value='' + local regex="^${setting}(\s*)=(\s*)(.*)" + if [[ $line =~ $regex ]]; then + value="${BASH_REMATCH[3]}" + else + env2ini::log ' ! invalid setting' + exit 1 + fi + + env2ini::log " + '${setting}'" + + export "${setting^^}=${value}" # '^^' makes the variable content uppercase + done < "/tmp/existing-envs" + + rm /tmp/existing-envs + } + + + function env2ini::process_config_file() { + local config_file="${1}" + local section="$(basename "${config_file}")" + + if [[ $section == '_generals_' ]]; then + env2ini::log " [ini root]" + section='' + else + env2ini::log " ${section}" + fi + + while read -r line; do + env2ini::read_config_to_env "${section}" "${line}" + done < <(awk 1 "${config_file}") # Helm .toYaml trims the trailing new line which breaks line processing; awk 1 ... adds it back while reading + } + + function env2ini::load_config_sources() { + local path="${1}" + + if [[ -d "${path}" ]]; then + env2ini::log "Processing $(basename "${path}")..." + + while read -d '' configFile; do + env2ini::process_config_file "${configFile}" + done < <(find "${path}" -type l -not -name '..data' -print0) + + env2ini::log "\n" + fi + } + + function env2ini::generate_initial_secrets() { + # These environment variables will either be + # - overwritten with user defined values, + # - initially used to set up Gitea + # Anyway, they won't harm existing app.ini files + + export ENV_TO_INI__SECURITY__INTERNAL_TOKEN=$(gitea generate secret INTERNAL_TOKEN) + export ENV_TO_INI__SECURITY__SECRET_KEY=$(gitea generate secret SECRET_KEY) + export ENV_TO_INI__OAUTH2__JWT_SECRET=$(gitea generate secret JWT_SECRET) + export ENV_TO_INI__SERVER__LFS_JWT_SECRET=$(gitea generate secret LFS_JWT_SECRET) + + env2ini::log "...Initial secrets generated\n" + } + + env | (grep ENV_TO_INI || [[ $? == 1 ]]) > /tmp/existing-envs + + # MUST BE CALLED BEFORE OTHER CONFIGURATION + env2ini::generate_initial_secrets + + env2ini::load_config_sources '/env-to-ini-mounts/inlines/' + env2ini::load_config_sources '/env-to-ini-mounts/additionals/' + + # load existing envs to override auto generated envs + env2ini::reload_preset_envs + + env2ini::log "=== All configuration sources loaded ===\n" + + # safety to prevent rewrite of secret keys if an app.ini already exists + if [ -f ${GITEA_APP_INI} ]; then + env2ini::log 'An app.ini file already exists. To prevent overwriting secret keys, these settings are dropped and remain unchanged:' + env2ini::log ' - security.INTERNAL_TOKEN' + env2ini::log ' - security.SECRET_KEY' + env2ini::log ' - oauth2.JWT_SECRET' + env2ini::log ' - server.LFS_JWT_SECRET' + + unset ENV_TO_INI__SECURITY__INTERNAL_TOKEN + unset ENV_TO_INI__SECURITY__SECRET_KEY + unset ENV_TO_INI__OAUTH2__JWT_SECRET + unset ENV_TO_INI__SERVER__LFS_JWT_SECRET + fi + + environment-to-ini -o $GITEA_APP_INI -p ENV_TO_INI +--- +# Source: gitea/templates/gitea/init.yaml +apiVersion: v1 +kind: Secret +metadata: + name: gitea-init + namespace: default + labels: + helm.sh/chart: gitea-8.0.2 + app: gitea + app.kubernetes.io/name: gitea + app.kubernetes.io/instance: gitea + app.kubernetes.io/version: "latest" + version: "latest" + app.kubernetes.io/managed-by: Helm +type: Opaque +stringData: + configure_gpg_environment.sh: |- + #!/usr/bin/env bash + set -eu + + gpg --batch --import /raw/private.asc + init_directory_structure.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + set -x + chown 1000:1000 /data + mkdir -p /data/git/.ssh + chmod -R 700 /data/git/.ssh + [ ! -d /data/gitea/conf ] && mkdir -p /data/gitea/conf + + # prepare temp directory structure + mkdir -p "${GITEA_TEMP}" + chown 1000:1000 "${GITEA_TEMP}" + chmod ug+rwx "${GITEA_TEMP}" + + + + configure_gitea.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + echo '==== BEGIN GITEA CONFIGURATION ====' + + { # try + gitea migrate + } || { # catch + echo "Gitea migrate might fail due to database connection...This init-container will try again in a few seconds" + exit 1 + } + function configure_admin_user() { + local ACCOUNT_ID=$(gitea admin user list --admin | grep -e "\s\+${GITEA_ADMIN_USERNAME}\s\+" | awk -F " " "{printf \$1}") + if [[ -z "${ACCOUNT_ID}" ]]; then + echo "No admin user '${GITEA_ADMIN_USERNAME}' found. Creating now..." + gitea admin user create --admin --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" --email "admin@localhost.ctf" --must-change-password=false + echo '...created.' + else + echo "Admin account '${GITEA_ADMIN_USERNAME}' already exist. Running update to sync password..." + gitea admin user change-password --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" + echo '...password sync done.' + fi + } + + configure_admin_user + + function configure_ldap() { + echo 'no ldap configuration... skipping.' + } + + configure_ldap + + function configure_oauth() { + echo 'no oauth configuration... skipping.' + } + + configure_oauth + + echo '==== END GITEA CONFIGURATION ====' +--- +# Source: gitea/charts/postgresql/templates/primary/svc-headless.yaml +apiVersion: v1 +kind: Service +metadata: + name: gitea-postgresql-hl + namespace: "gitea-system" + labels: + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.2.6 + app.kubernetes.io/instance: gitea + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: primary + # Use this annotation in addition to the actual publishNotReadyAddresses + # field below because the annotation will stop being respected soon but the + # field is broken in some versions of Kubernetes: + # https://github.com/kubernetes/kubernetes/issues/58662 + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" +spec: + type: ClusterIP + clusterIP: None + # We want all pods in the StatefulSet to have their addresses published for + # the sake of the other Postgresql pods even before they're ready, since they + # have to be able to talk to each other in order to become ready. + publishNotReadyAddresses: true + ports: + - name: tcp-postgresql + port: 5432 + targetPort: tcp-postgresql + selector: + app.kubernetes.io/name: postgresql + app.kubernetes.io/instance: gitea + app.kubernetes.io/component: primary +--- +# Source: gitea/charts/postgresql/templates/primary/svc.yaml +apiVersion: v1 +kind: Service +metadata: + name: gitea-postgresql + namespace: "gitea-system" + labels: + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.2.6 + app.kubernetes.io/instance: gitea + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: primary +spec: + type: ClusterIP + sessionAffinity: None + ports: + - name: tcp-postgresql + port: 5432 + targetPort: tcp-postgresql + nodePort: null + selector: + app.kubernetes.io/name: postgresql + app.kubernetes.io/instance: gitea + app.kubernetes.io/component: primary +--- +# Source: gitea/templates/gitea/http-svc.yaml +apiVersion: v1 +kind: Service +metadata: + name: gitea-http + namespace: default + labels: + helm.sh/chart: gitea-8.0.2 + app: gitea + app.kubernetes.io/name: gitea + app.kubernetes.io/instance: gitea + app.kubernetes.io/version: "latest" + version: "latest" + app.kubernetes.io/managed-by: Helm + annotations: + {} +spec: + type: ClusterIP + clusterIP: None + ports: + - name: http + port: 3000 + targetPort: 3000 + selector: + app.kubernetes.io/name: gitea + app.kubernetes.io/instance: gitea +--- +# Source: gitea/templates/gitea/ssh-svc.yaml +apiVersion: v1 +kind: Service +metadata: + name: gitea-ssh + namespace: default + labels: + helm.sh/chart: gitea-8.0.2 + app: gitea + app.kubernetes.io/name: gitea + app.kubernetes.io/instance: gitea + app.kubernetes.io/version: "latest" + version: "latest" + app.kubernetes.io/managed-by: Helm + annotations: + {} +spec: + type: ClusterIP + clusterIP: None + ports: + - name: ssh + port: 22 + targetPort: 22 + protocol: TCP + selector: + app.kubernetes.io/name: gitea + app.kubernetes.io/instance: gitea +--- +# Source: gitea/charts/postgresql/templates/primary/statefulset.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: gitea-postgresql + namespace: "gitea-system" + labels: + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.2.6 + app.kubernetes.io/instance: gitea + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: primary +spec: + replicas: 1 + serviceName: gitea-postgresql-hl + updateStrategy: + rollingUpdate: {} + type: RollingUpdate + selector: + matchLabels: + app.kubernetes.io/name: postgresql + app.kubernetes.io/instance: gitea + app.kubernetes.io/component: primary + template: + metadata: + name: gitea-postgresql + labels: + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.2.6 + app.kubernetes.io/instance: gitea + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: primary + spec: + serviceAccountName: default + + affinity: + podAffinity: + + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/name: postgresql + app.kubernetes.io/instance: gitea + app.kubernetes.io/component: primary + topologyKey: kubernetes.io/hostname + weight: 1 + nodeAffinity: + + securityContext: + fsGroup: 1001 + hostNetwork: false + hostIPC: false + containers: + - name: postgresql + image: docker.io/bitnami/postgresql:15.2.0-debian-11-r14 + imagePullPolicy: "IfNotPresent" + securityContext: + runAsUser: 1001 + env: + - name: BITNAMI_DEBUG + value: "false" + - name: POSTGRESQL_PORT_NUMBER + value: "5432" + - name: POSTGRESQL_VOLUME_DIR + value: "/bitnami/postgresql" + - name: PGDATA + value: "/bitnami/postgresql/data" + # Authentication + - name: POSTGRES_USER + value: "gitea" + - name: POSTGRES_POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: gitea-postgresql + key: postgres-password + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: gitea-postgresql + key: password + - name: POSTGRES_DB + value: "gitea" + # Replication + # Initdb + # Standby + # LDAP + - name: POSTGRESQL_ENABLE_LDAP + value: "no" + # TLS + - name: POSTGRESQL_ENABLE_TLS + value: "no" + # Audit + - name: POSTGRESQL_LOG_HOSTNAME + value: "false" + - name: POSTGRESQL_LOG_CONNECTIONS + value: "false" + - name: POSTGRESQL_LOG_DISCONNECTIONS + value: "false" + - name: POSTGRESQL_PGAUDIT_LOG_CATALOG + value: "off" + # Others + - name: POSTGRESQL_CLIENT_MIN_MESSAGES + value: "error" + - name: POSTGRESQL_SHARED_PRELOAD_LIBRARIES + value: "pgaudit" + ports: + - name: tcp-postgresql + containerPort: 5432 + livenessProbe: + failureThreshold: 6 + initialDelaySeconds: 30 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + exec: + command: + - /bin/sh + - -c + - exec pg_isready -U "gitea" -d "dbname=gitea" -h 127.0.0.1 -p 5432 + readinessProbe: + failureThreshold: 6 + initialDelaySeconds: 5 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + exec: + command: + - /bin/sh + - -c + - -e + + - | + exec pg_isready -U "gitea" -d "dbname=gitea" -h 127.0.0.1 -p 5432 + [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f /bitnami/postgresql/.initialized ] + resources: + limits: {} + requests: + cpu: 250m + memory: 256Mi + volumeMounts: + - name: dshm + mountPath: /dev/shm + - name: data + mountPath: /bitnami/postgresql + volumes: + - name: dshm + emptyDir: + medium: Memory + volumeClaimTemplates: + - metadata: + name: data + spec: + accessModes: + - "ReadWriteOnce" + resources: + requests: + storage: "10Gi" + storageClassName: local-storage +--- +# Source: gitea/templates/gitea/statefulset.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: gitea + namespace: default + annotations: + labels: + helm.sh/chart: gitea-8.0.2 + app: gitea + app.kubernetes.io/name: gitea + app.kubernetes.io/instance: gitea + app.kubernetes.io/version: "latest" + version: "latest" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: gitea + app.kubernetes.io/instance: gitea + serviceName: gitea + template: + metadata: + annotations: + checksum/config: 3ddab7e3fbf632c3d9414212662de9656bdcfaa2a698e5d66914e5c9cf812651 + labels: + helm.sh/chart: gitea-8.0.2 + app: gitea + app.kubernetes.io/name: gitea + app.kubernetes.io/instance: gitea + app.kubernetes.io/version: "latest" + version: "latest" + app.kubernetes.io/managed-by: Helm + spec: + + securityContext: + fsGroup: 1000 + initContainers: + - name: init-directories + image: "controlplaneoffsec/gitea:latest" + imagePullPolicy: Always + command: ["/usr/sbin/init_directory_structure.sh"] + env: + - name: GITEA_APP_INI + value: /data/gitea/conf/app.ini + - name: GITEA_CUSTOM + value: /data/gitea + - name: GITEA_WORK_DIR + value: /data + - name: GITEA_TEMP + value: /tmp/gitea + - name: GITEA__SERVER__ROOT_URL + value: http://localhost:8080 + - name: GITEA__SERVER__DOMAIN + value: localhost + - name: GITEA__SERVER__DISABLE_SSH + value: "true" + - name: GITEA__ADMIN__DISABLE_REGULAR_ORG_CREATION + value: "true" + - name: GITEA__SERVICE__DEFAULT_ALLOW_CREATE_ORGANIZATION + value: "false" + - name: GITEA__ATTACHMENT__ENABLED + value: "false" + - name: GITEA__PACKAGES__ENABLED + value: "false" + - name: GITEA__MIRROR__ENABLED + value: "false" + - name: GITEA__ACTIONS__ENABLED + value: "true" + - name: GITEA__ACTIONS__DEFAULT_ACTIONS_URL + value: https://github.com + - name: GITEA__LOG__DISABLE_ROUTER_LOG + value: "true" + - name: GITEA__LOG__ENABLE_XORM_LOG + value: "false" + - name: GITEA__REPOSITORY__ENABLE_PUSH_CREATE_USER + value: "true" + - name: GITEA__REPOSITORY__DEFAULT_PUSH_CREATE_PRIVATE + value: "false" + - name: GITEA____APP_NAME + value: Rescue Drop + volumeMounts: + - name: init + mountPath: /usr/sbin + - name: temp + mountPath: /tmp + - name: data + mountPath: /data + + securityContext: + {} + - name: init-app-ini + image: "controlplaneoffsec/gitea:latest" + imagePullPolicy: Always + command: ["/usr/sbin/config_environment.sh"] + env: + - name: GITEA_APP_INI + value: /data/gitea/conf/app.ini + - name: GITEA_CUSTOM + value: /data/gitea + - name: GITEA_WORK_DIR + value: /data + - name: GITEA_TEMP + value: /tmp/gitea + - name: GITEA__SERVER__ROOT_URL + value: http://localhost:8080 + - name: GITEA__SERVER__DOMAIN + value: localhost + - name: GITEA__SERVER__DISABLE_SSH + value: "true" + - name: GITEA__ADMIN__DISABLE_REGULAR_ORG_CREATION + value: "true" + - name: GITEA__SERVICE__DEFAULT_ALLOW_CREATE_ORGANIZATION + value: "false" + - name: GITEA__ATTACHMENT__ENABLED + value: "false" + - name: GITEA__PACKAGES__ENABLED + value: "false" + - name: GITEA__MIRROR__ENABLED + value: "false" + - name: GITEA__ACTIONS__ENABLED + value: "true" + - name: GITEA__ACTIONS__DEFAULT_ACTIONS_URL + value: https://github.com + - name: GITEA__LOG__DISABLE_ROUTER_LOG + value: "true" + - name: GITEA__LOG__ENABLE_XORM_LOG + value: "false" + - name: GITEA__REPOSITORY__ENABLE_PUSH_CREATE_USER + value: "true" + - name: GITEA__REPOSITORY__DEFAULT_PUSH_CREATE_PRIVATE + value: "false" + - name: GITEA____APP_NAME + value: Rescue Drop + volumeMounts: + - name: config + mountPath: /usr/sbin + - name: temp + mountPath: /tmp + - name: data + mountPath: /data + - name: inline-config-sources + mountPath: /env-to-ini-mounts/inlines/ + + securityContext: + {} + - name: configure-gitea + image: "controlplaneoffsec/gitea:latest" + command: ["/usr/sbin/configure_gitea.sh"] + imagePullPolicy: Always + securityContext: + runAsUser: 1000 + env: + - name: GITEA_APP_INI + value: /data/gitea/conf/app.ini + - name: GITEA_CUSTOM + value: /data/gitea + - name: GITEA_WORK_DIR + value: /data + - name: GITEA_TEMP + value: /tmp/gitea + - name: GITEA_ADMIN_USERNAME + value: "ctf_admin" + - name: GITEA_ADMIN_PASSWORD + value: "ahXeehohsoo2suej4tee0ol5xeeteM1w" + - name: GITEA__SERVER__ROOT_URL + value: http://localhost:8080 + - name: GITEA__SERVER__DOMAIN + value: localhost + - name: GITEA__SERVER__DISABLE_SSH + value: "true" + - name: GITEA__ADMIN__DISABLE_REGULAR_ORG_CREATION + value: "true" + - name: GITEA__SERVICE__DEFAULT_ALLOW_CREATE_ORGANIZATION + value: "false" + - name: GITEA__ATTACHMENT__ENABLED + value: "false" + - name: GITEA__PACKAGES__ENABLED + value: "false" + - name: GITEA__MIRROR__ENABLED + value: "false" + - name: GITEA__ACTIONS__ENABLED + value: "true" + - name: GITEA__ACTIONS__DEFAULT_ACTIONS_URL + value: https://github.com + - name: GITEA__LOG__DISABLE_ROUTER_LOG + value: "true" + - name: GITEA__LOG__ENABLE_XORM_LOG + value: "false" + - name: GITEA__REPOSITORY__ENABLE_PUSH_CREATE_USER + value: "true" + - name: GITEA__REPOSITORY__DEFAULT_PUSH_CREATE_PRIVATE + value: "false" + - name: GITEA____APP_NAME + value: Rescue Drop + volumeMounts: + - name: init + mountPath: /usr/sbin + - name: temp + mountPath: /tmp + - name: data + mountPath: /data + + terminationGracePeriodSeconds: 60 + containers: + - name: gitea + image: "controlplaneoffsec/gitea:latest" + imagePullPolicy: Always + env: + # SSH Port values have to be set here as well for openssh configuration + - name: SSH_LISTEN_PORT + value: "22" + - name: SSH_PORT + value: "22" + - name: SSH_LOG_LEVEL + value: "INFO" + - name: GITEA_APP_INI + value: /data/gitea/conf/app.ini + - name: GITEA_CUSTOM + value: /data/gitea + - name: GITEA_WORK_DIR + value: /data + - name: GITEA_TEMP + value: /tmp/gitea + - name: TMPDIR + value: /tmp/gitea + - name: GITEA__SERVER__ROOT_URL + value: http://localhost:8080 + - name: GITEA__SERVER__DOMAIN + value: localhost + - name: GITEA__SERVER__DISABLE_SSH + value: "true" + - name: GITEA__ADMIN__DISABLE_REGULAR_ORG_CREATION + value: "true" + - name: GITEA__SERVICE__DEFAULT_ALLOW_CREATE_ORGANIZATION + value: "false" + - name: GITEA__ATTACHMENT__ENABLED + value: "false" + - name: GITEA__PACKAGES__ENABLED + value: "false" + - name: GITEA__MIRROR__ENABLED + value: "false" + - name: GITEA__ACTIONS__ENABLED + value: "true" + - name: GITEA__ACTIONS__DEFAULT_ACTIONS_URL + value: https://github.com + - name: GITEA__LOG__DISABLE_ROUTER_LOG + value: "true" + - name: GITEA__LOG__ENABLE_XORM_LOG + value: "false" + - name: GITEA__REPOSITORY__ENABLE_PUSH_CREATE_USER + value: "true" + - name: GITEA__REPOSITORY__DEFAULT_PUSH_CREATE_PRIVATE + value: "false" + - name: GITEA____APP_NAME + value: Rescue Drop + ports: + - name: ssh + containerPort: 22 + - name: http + containerPort: 3000 + livenessProbe: + failureThreshold: 10 + initialDelaySeconds: 200 + periodSeconds: 10 + successThreshold: 1 + tcpSocket: + port: http + timeoutSeconds: 1 + readinessProbe: + failureThreshold: 3 + initialDelaySeconds: 5 + periodSeconds: 10 + successThreshold: 1 + tcpSocket: + port: http + timeoutSeconds: 1 + resources: + {} + securityContext: + {} + volumeMounts: + - name: temp + mountPath: /tmp + - name: data + mountPath: /data + + nodeSelector: + kubernetes.io/hostname: "{{ node1_hostname }}" + volumes: + - name: init + secret: + secretName: gitea-init + defaultMode: 110 + - name: config + secret: + secretName: gitea + defaultMode: 110 + - name: inline-config-sources + secret: + secretName: gitea-inline-config + - name: temp + emptyDir: {} + volumeClaimTemplates: + - metadata: + name: data + spec: + accessModes: + - "ReadWriteOnce" + storageClassName: "local-storage" + resources: + requests: + storage: "6Gi" diff --git a/scenarios/roles/devious-developer-data-dump/templates/manifests/04-zot.yaml b/scenarios/roles/devious-developer-data-dump/templates/manifests/04-zot.yaml new file mode 100644 index 00000000..6f5f9fe7 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/manifests/04-zot.yaml @@ -0,0 +1,156 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: zot + namespace: default +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: zot-config + namespace: default +data: + config.json: | + { + "distSpecVersion": "1.1.0-dev", + "http": { + "address":"0.0.0.0", + "port":"5000", + "auth": { + "htpasswd": { + "path": "/etc/zot/htpasswd" + }, + "failDelay": 1 + } + }, + "storage":{ + "rootDirectory":"/data/zot", + "commit": true, + "dedupe": true, + "gc": true, + "gcDelay": "1h", + "gcInterval": "6h" + }, + "log": { + "level": "debug", + "output":"/dev/stdout", + "audit":"/var/log/zot/zot-audit.log" + } + } +--- +apiVersion: v1 +kind: Secret +metadata: + name: ba + namespace: default +type: Opaque +data: + # htpasswd -bnB ci storeimage > htpasswd + htpasswd: Y2k6JDJ5JDA1JDNoaG81V1ZaWlZKL1JRekoya3B6OHVURFRGVGlCR0NLRzJ0aUpzUnQxbHNkeEdXaGxqYnl1 +--- +apiVersion: v1 +kind: Service +metadata: + name: zot + namespace: default +spec: + type: ClusterIP + ports: + - name: zot + port: 5000 + targetPort: zot + protocol: TCP + selector: + app: zot +--- +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: zot-storage +provisioner: kubernetes.io/no-provisioner +volumeBindingMode: WaitForFirstConsumer +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: zot-data-pv +spec: + capacity: + storage: 10Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + storageClassName: zot-storage + hostPath: + path: /mnt/zot + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - "{{ master_hostname }}" +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: zot-data-pvc + namespace: default +spec: + accessModes: + - ReadWriteOnce + storageClassName: zot-storage + resources: + requests: + storage: 5Gi + volumeMode: Filesystem + volumeName: zot-data-pv +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: zot + namespace: default + labels: + app: zot +spec: + selector: + matchLabels: + app: zot + replicas: 1 + template: + metadata: + labels: + app: zot + spec: + serviceAccountName: zot + nodeName: "{{ master_hostname }}" + tolerations: + - operator: Exists + containers: + - name: zot + securityContext: + allowPrivilegeEscalation: false + image: docker.io/controlplaneoffsec/zot-registry:latest + imagePullPolicy: IfNotPresent + ports: + - name: zot + containerPort: 5000 + volumeMounts: + - name: config + mountPath: /etc/zot + readOnly: true + - name: data + mountPath: /data/zot + volumes: + - name: config + projected: + sources: + - configMap: + name: zot-config + - secret: + name: ba + - name: data + persistentVolumeClaim: + claimName: zot-data-pvc diff --git a/scenarios/roles/devious-developer-data-dump/templates/manifests/05-ingress-deploy.yaml b/scenarios/roles/devious-developer-data-dump/templates/manifests/05-ingress-deploy.yaml new file mode 100644 index 00000000..0cf4a555 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/manifests/05-ingress-deploy.yaml @@ -0,0 +1,411 @@ +--- +# Source: ingress-nginx/templates/controller-serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + helm.sh/chart: ingress-nginx-4.6.0 + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/part-of: ingress-nginx + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: controller + name: ingress-nginx + namespace: ingress-nginx +automountServiceAccountToken: true +--- +# Source: ingress-nginx/templates/controller-configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + helm.sh/chart: ingress-nginx-4.6.0 + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/part-of: ingress-nginx + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: controller + name: ingress-nginx-controller + namespace: ingress-nginx +data: + allow-snippet-annotations: "false" +--- +# Source: ingress-nginx/templates/clusterrole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + helm.sh/chart: ingress-nginx-4.6.0 + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/part-of: ingress-nginx + app.kubernetes.io/managed-by: Helm + name: ingress-nginx +rules: + - apiGroups: + - "" + resources: + - configmaps + - endpoints + - nodes + - pods + - secrets + - namespaces + verbs: + - list + - watch + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - list + - watch + - apiGroups: + - "" + resources: + - nodes + verbs: + - get + - apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - watch + - apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - apiGroups: + - networking.k8s.io + resources: + - ingresses/status + verbs: + - update + - apiGroups: + - networking.k8s.io + resources: + - ingressclasses + verbs: + - get + - list + - watch + - apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - list + - watch + - get +--- +# Source: ingress-nginx/templates/clusterrolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + helm.sh/chart: ingress-nginx-4.6.0 + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/part-of: ingress-nginx + app.kubernetes.io/managed-by: Helm + name: ingress-nginx +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: ingress-nginx +subjects: + - kind: ServiceAccount + name: ingress-nginx + namespace: "ingress-nginx" +--- +# Source: ingress-nginx/templates/controller-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + helm.sh/chart: ingress-nginx-4.6.0 + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/part-of: ingress-nginx + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: controller + name: ingress-nginx + namespace: ingress-nginx +rules: + - apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - apiGroups: + - "" + resources: + - configmaps + - pods + - secrets + - endpoints + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - watch + - apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - networking.k8s.io + resources: + - ingresses/status + verbs: + - update + - apiGroups: + - networking.k8s.io + resources: + - ingressclasses + verbs: + - get + - list + - watch + - apiGroups: + - coordination.k8s.io + resources: + - leases + resourceNames: + - ingress-nginx-leader + verbs: + - get + - update + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - list + - watch + - get +--- +# Source: ingress-nginx/templates/controller-rolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + helm.sh/chart: ingress-nginx-4.6.0 + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/part-of: ingress-nginx + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: controller + name: ingress-nginx + namespace: ingress-nginx +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ingress-nginx +subjects: + - kind: ServiceAccount + name: ingress-nginx + namespace: "ingress-nginx" +--- +# Source: ingress-nginx/templates/controller-service.yaml +apiVersion: v1 +kind: Service +metadata: + annotations: + labels: + helm.sh/chart: ingress-nginx-4.6.0 + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/part-of: ingress-nginx + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: controller + name: ingress-nginx-controller + namespace: ingress-nginx +spec: + type: NodePort + externalTrafficPolicy: Local + ports: + - name: http + port: 80 + protocol: TCP + targetPort: http + appProtocol: http + nodePort: 30080 + selector: + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/component: controller +--- +# Source: ingress-nginx/templates/controller-deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + helm.sh/chart: ingress-nginx-4.6.0 + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/part-of: ingress-nginx + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: controller + name: ingress-nginx-controller + namespace: ingress-nginx +spec: + selector: + matchLabels: + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/component: controller + replicas: 1 + revisionHistoryLimit: 10 + minReadySeconds: 0 + template: + metadata: + labels: + helm.sh/chart: ingress-nginx-4.6.0 + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/part-of: ingress-nginx + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: controller + spec: + dnsPolicy: ClusterFirst + containers: + - name: controller + image: "registry.k8s.io/ingress-nginx/controller:v1.6.4" + imagePullPolicy: IfNotPresent + lifecycle: + preStop: + exec: + command: + - /wait-shutdown + args: + - /nginx-ingress-controller + - --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller + - --election-id=ingress-nginx-leader + - --controller-class=k8s.io/ingress-nginx + - --ingress-class=nginx + - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller + securityContext: + capabilities: + drop: + - ALL + add: + - NET_BIND_SERVICE + runAsUser: 101 + allowPrivilegeEscalation: true + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: LD_PRELOAD + value: /usr/local/lib/libmimalloc.so + livenessProbe: + failureThreshold: 5 + httpGet: + path: /healthz + port: 10254 + scheme: HTTP + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /healthz + port: 10254 + scheme: HTTP + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + ports: + - name: http + containerPort: 80 + protocol: TCP + - name: https + containerPort: 443 + protocol: TCP + resources: + requests: + cpu: 100m + memory: 90Mi + nodeSelector: + kubernetes.io/hostname: "{{ master_hostname }}" + kubernetes.io/os: linux + tolerations: + - operator: Exists + serviceAccountName: ingress-nginx + terminationGracePeriodSeconds: 300 +--- +# Source: ingress-nginx/templates/controller-ingressclass.yaml +# We don't support namespaced ingressClass yet +# So a ClusterRole and a ClusterRoleBinding is required +apiVersion: networking.k8s.io/v1 +kind: IngressClass +metadata: + labels: + helm.sh/chart: ingress-nginx-4.6.0 + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/part-of: ingress-nginx + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: controller + name: nginx +spec: + controller: k8s.io/ingress-nginx diff --git a/scenarios/roles/devious-developer-data-dump/templates/manifests/06-ingress-config.yaml b/scenarios/roles/devious-developer-data-dump/templates/manifests/06-ingress-config.yaml new file mode 100644 index 00000000..4f524d73 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/manifests/06-ingress-config.yaml @@ -0,0 +1,37 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress-gitea + namespace: default +spec: + ingressClassName: nginx + rules: + - http: + paths: + - backend: + service: + name: gitea-http + port: + number: 3000 + path: / + pathType: Prefix +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress-zot + namespace: default + annotations: + nginx.ingress.kubernetes.io/proxy-body-size: "0" +spec: + ingressClassName: nginx + rules: + - http: + paths: + - path: /v2/ + pathType: Prefix + backend: + service: + name: zot + port: + number: 5000 diff --git a/scenarios/roles/devious-developer-data-dump/templates/manifests/07-db-storage.yaml b/scenarios/roles/devious-developer-data-dump/templates/manifests/07-db-storage.yaml new file mode 100644 index 00000000..418d08c3 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/manifests/07-db-storage.yaml @@ -0,0 +1,38 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: prod-db +spec: + capacity: + storage: 10Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + storageClassName: local-storage + local: + path: /data/db/ + claimRef: + name: prod-db + namespace: rescue-drop-prod + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - "{{ master_hostname }}" +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: prod-db + namespace: rescue-drop-prod +spec: + storageClassName: local-storage + volumeName: prod-db + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi diff --git a/scenarios/roles/devious-developer-data-dump/templates/manifests/08-creds.yaml b/scenarios/roles/devious-developer-data-dump/templates/manifests/08-creds.yaml new file mode 100644 index 00000000..3f7c12ae --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/manifests/08-creds.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Secret +type: kubernetes.io/dockerconfigjson +metadata: + name: prod-pull-creds + namespace: rescue-drop-prod +data: + .dockerconfigjson: eyJhdXRocyI6eyJyZWcucmVzY3VlLmRyb3AiOnsidXNlcm5hbWUiOiJjaSIsInBhc3N3b3JkIjoic3RvcmVpbWFnZSIsImF1dGgiOiJZMms2YzNSdmNtVnBiV0ZuWlE9PSJ9fX0= diff --git a/scenarios/roles/devious-developer-data-dump/templates/manifests/08-runner-rbac.yaml b/scenarios/roles/devious-developer-data-dump/templates/manifests/08-runner-rbac.yaml new file mode 100644 index 00000000..59496bd0 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/manifests/08-runner-rbac.yaml @@ -0,0 +1,53 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: runner + namespace: rescue-drop-prod +rules: +- apiGroups: + - batch + resources: + - jobs + - cronjobs + verbs: + - get + - list + - create + - update + - patch +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list +- apiGroups: + - apps + resources: + - deployments + verbs: + - get + - list +- apiGroups: + - "" + resources: + - pods/log + - jobs/log + verbs: + - get + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: runner + namespace: rescue-drop-prod +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: runner +subjects: +- apiGroup: rbac.authorization.k8s.io + kind: User + name: runner diff --git a/scenarios/roles/devious-developer-data-dump/templates/manifests/09-jumpbox.yaml b/scenarios/roles/devious-developer-data-dump/templates/manifests/09-jumpbox.yaml new file mode 100644 index 00000000..71151a3e --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/manifests/09-jumpbox.yaml @@ -0,0 +1,102 @@ +## JumpBox Resources +apiVersion: v1 +kind: Namespace +metadata: + name: dmz +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: sre + namespace: dmz +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: sre-role + namespace: dmz +rules: +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - pods/attach + verbs: + - create + - patch + - delete +- apiGroups: + - "" + resources: + - pods/ephemeralcontainers + verbs: + - get + - list + - watch + - create + - patch + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: dmz-sre-rb + namespace: dmz +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: sre-role +subjects: +- kind: ServiceAccount + name: sre + namespace: dmz +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: cluster-ns-read +rules: +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: cluster-ns-read-crb +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-ns-read +subjects: +- kind: ServiceAccount + name: sre + namespace: dmz +--- +apiVersion: v1 +kind: Pod +metadata: + name: jumpbox + namespace: dmz +spec: + nodeName: "{{ node1_hostname }}" + containers: + - image: docker.io/controlplaneoffsec/kubectl:latest + command: + - sleep + - inf + name: jumpbox + securityContext: + allowPrivilegeEscalation: false + restartPolicy: Always diff --git a/scenarios/roles/devious-developer-data-dump/templates/scripts/00-master.sh b/scenarios/roles/devious-developer-data-dump/templates/scripts/00-master.sh new file mode 100755 index 00000000..90b6d76e --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/scripts/00-master.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +kubectl delete node {{ node2_hostname }} --force --grace-period=0 --ignore-not-found + +# Prep git repos +mkdir -p /tmp/{git,ci}repo diff --git a/scenarios/roles/devious-developer-data-dump/templates/scripts/01-nodes-every.sh b/scenarios/roles/devious-developer-data-dump/templates/scripts/01-nodes-every.sh new file mode 100755 index 00000000..1efb016b --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/scripts/01-nodes-every.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +mkdir -p /etc/containerd/certs.d/reg.rescue.drop +sed -i -e 's|config_path = ""|config_path = "/etc/containerd/certs.d"|' /etc/containerd/config.toml + +cat < /etc/containerd/certs.d/reg.rescue.drop/hosts.toml +server = "http://__REGISTRY_IP__:30080" + +[host."http://__REGISTRY_IP__:30080"] + capabilities = ["pull", "resolve", "push"] + skip_verify = true +EOF + +systemctl restart containerd diff --git a/scenarios/roles/devious-developer-data-dump/templates/scripts/01-worker-1.sh b/scenarios/roles/devious-developer-data-dump/templates/scripts/01-worker-1.sh new file mode 100755 index 00000000..16e6ab22 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/scripts/01-worker-1.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +mkdir -p /mnt/{gitea,psql}-data + +mkdir -p /mnt/psql-data/gitea/public/img/ +mkdir -p /mnt/psql-data/gitea/templates/ \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/templates/scripts/02-bastion.sh b/scenarios/roles/devious-developer-data-dump/templates/scripts/02-bastion.sh new file mode 100755 index 00000000..4af48616 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/scripts/02-bastion.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -Eeuo pipefail + +#eval $(grep -E 'export (NODE|MASTER)_IP_ADDR' /opt/bash_login_script) + +cat <<-EOF >/etc/systemd/system/socat.service +[Unit] +Description=Socat Forward + +[Service] +Type=simple +ExecStartPre=-killall -9 -q socat +ExecStart=socat TCP4-LISTEN:8080,reuseaddr,fork TCP4:{{ master_ip }}:30080 +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target +EOF + +systemctl enable --now socat diff --git a/scenarios/roles/devious-developer-data-dump/templates/scripts/02-local.sh b/scenarios/roles/devious-developer-data-dump/templates/scripts/02-local.sh new file mode 100755 index 00000000..e6f665b3 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/scripts/02-local.sh @@ -0,0 +1,8 @@ +set -x + +NODE_IP="$(get_node 1)" + +run_scp "./_scripts/logo.png" "$NODE_IP:/mnt/psql-data/gitea/public/img/" +run_scp "./_scripts/logo.svg" "$NODE_IP:/mnt/psql-data/gitea/public/img/" +run_scp "./_scripts/favicon.svg" "$NODE_IP:/mnt/psql-data/gitea/public/img/" +run_scp "./_scripts/home.tmpl" "$NODE_IP:/mnt/psql-data/gitea/templates/" \ No newline at end of file diff --git a/scenarios/roles/devious-developer-data-dump/templates/scripts/03-master.sh b/scenarios/roles/devious-developer-data-dump/templates/scripts/03-master.sh new file mode 100755 index 00000000..e1ceeb96 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/scripts/03-master.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +set -Eeuo pipefail + +export KUBECONFIG=/etc/kubernetes/admin.conf + +openssl genrsa -out runner.key 2048 +openssl req -new -key runner.key -out runner.csr -subj "/CN=runner" + +# We deliberately do a replace here to force deletion of the old resource due to wierd behavior in the CSR api. See JCP for more info. +kubectl replace --force -f - <<-EOF +apiVersion: certificates.k8s.io/v1 +kind: CertificateSigningRequest +metadata: + name: runner +spec: + request: $(base64 -w0 runner.csr) + usages: ['digital signature', 'key encipherment', 'client auth'] + signerName: kubernetes.io/kube-apiserver-client +EOF + +## double check the right CSR was used +mod1=$(kubectl get csr runner -o jsonpath='{.spec.request}' | base64 --decode | openssl req -noout -modulus -in -) +mod2=$(openssl req -noout -modulus -in runner.csr) +if [[ "$mod1" != "$mod2" ]]; then + echo "CSR was not set correctly, aborting." + exit 1 +fi + +kubectl certificate approve runner +kubectl wait --for=condition=Approved csr runner +# Wait to be issued +sleep 3 + +kubectl get csr runner -o jsonpath='{.status.certificate}' | base64 --decode > runner.crt + +export KUBECONFIG=/etc/kubernetes/runner.conf +SERVER=$(awk '/server:/ {print $2}' /etc/kubernetes/kubelet.conf) +kubectl config set-cluster default --certificate-authority=/etc/kubernetes/pki/ca.crt --server="$SERVER" --embed-certs +kubectl config set-credentials runner --client-key runner.key --client-certificate runner.crt --embed-certs +kubectl config set-context runner --cluster default --user runner +kubectl config use-context runner diff --git a/scenarios/roles/devious-developer-data-dump/templates/scripts/03-worker-2.sh b/scenarios/roles/devious-developer-data-dump/templates/scripts/03-worker-2.sh new file mode 100755 index 00000000..533dcdd2 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/scripts/03-worker-2.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +set -Eeuxo pipefail + +# Early exit for development re-runs +if [[ -f /tmp/.runner ]]; then + echo "Skipping non-declarative setup" + exit 0 +fi + +systemctl disable --now kubelet + +apt update && apt install -y --no-install-recommends docker.io + +# Get Token +# It's fine to hardcode creds here as this script never touches disk on the node. +USER="ctf_admin" +PASS="ahXeehohsoo2suej4tee0ol5xeeteM1w" + +export KUBECONFIG=/etc/kubernetes/kubelet.conf +MASTER_IP={{ master_ip }} +BASEURL="http://$MASTER_IP:30080/" + +# Configure Insecure docker registry +systemctl stop docker +echo "{\"registry-mirrors\":[\"https://mirror.gcr.io\"],\"insecure-registries\":[\"$MASTER_IP:30080\"]}" > /etc/docker/daemon.json +systemctl enable --now docker + +# Gitea may take a minute to come up here; allow 300s +CSRF=$(curl -sS --fail -c cookie.jar "$BASEURL" --retry 30 --retry-connrefused --retry-delay 10 | awk -F' ' '/csrfToken/ {print $2}' | tr -d "',") +curl -sSL -b cookie.jar -c cookie.jar -XPOST "$BASEURL/user/login" -d "user_name=$USER&password=$PASS&_csrf=$CSRF" +TOKEN=$(curl -sSL --fail -b cookie.jar "$BASEURL/admin/runners" | grep -A3 'Registration Token' | awk -F'"' '/value/ {print $4}') + +# Disable Kubelet creds +rm -f /var/lib/kubelet/pki/kubelet-client-current.pem +shred -fu /var/lib/kubelet/pki/* + +touch /tmp/.runner +LABELS="ubuntu-latest:docker://ghcr.io/catthehacker/ubuntu:act-latest,ubuntu-22.04:docker://ghcr.io/catthehacker/ubuntu:act-22.04" +docker run --name act-runner -d --restart always -e GITEA_CI_TOKEN="$TOKEN" -e GITEA_CI_URL="$BASEURL" -e GITEA_CI_LABELS="$LABELS" --uts host -v /var/run/docker.sock:/var/run/docker.sock -v /tmp/.runner:/runner/.runner docker.io/controlplaneoffsec/act-runner:latest diff --git a/scenarios/roles/devious-developer-data-dump/templates/scripts/04-master.sh b/scenarios/roles/devious-developer-data-dump/templates/scripts/04-master.sh new file mode 100755 index 00000000..753989f3 --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/scripts/04-master.sh @@ -0,0 +1,420 @@ +#!/usr/bin/env bash + +set -Eeuo pipefail +shopt -s expand_aliases + +# Configure Gitea +curl -sSL https://dl.gitea.com/tea/0.9.2/tea-0.9.2-linux-amd64 -o tea +install -s tea /usr/local/bin + +GITEA_SERVER_USER="ctf_admin" +GITEA_SERVER_PASSWORD="ahXeehohsoo2suej4tee0ol5xeeteM1w" +BASEURL="http://localhost:30080" + +# shellcheck disable=SC2139 +alias curlj="curl -u \"$GITEA_SERVER_USER:$GITEA_SERVER_PASSWORD\" -H 'Content-type: application/json'" + +#CSRF=$(curl -sS -c cookie.jar "$BASEURL" --retry 3 --retry-connrefused --retry-delay 5 | awk -F' ' '/csrfToken/ {print $2}' | tr -d "',") +#curl -sSL -b cookie.jar -c cookie.jar -XPOST "$BASEURL/user/login" -d "user_name=$GITEA_SERVER_USER&password=$GITEA_SERVER_PASSWORD&_csrf=$CSRF" +#CSRF=$(awk '/_csrf/ {print $7}' cookie.jar) +#RESP=$(curl -sSL -b cookie.jar -c cookie.jar -XPOST "$BASEURL/user/settings/applications" -d "_csrf=$CSRF&name=cli&scope=repo&scope=admin%3Aorg&scope=admin%3Apublic_key&scope=admin%3Arepo_hook&scope=admin%3Aorg_hook&scope=notification&scope=user&scope=delete_repo&scope=package&scope=admin%3Aapplication&scope=sudo" -v 2>&1) +#TOKEN=$(echo "$RESP" | grep -F "macaron_flash" | perl -0777 -pe 's/.*info%3D(.*)%26success%3DYour%2Bnew%2Btoken.*/\1/msg') + +function get_cli_token() { + set -x + TUSER=${1:-"$GITEA_SERVER_USER"} + TPASS=${2:-"$GITEA_SERVER_PASSWORD"} + SUFFIX=$(tr -dc a-z0-9 /tmp/iramos-token + +# Set Admin user to private +DATA="{\"login_name\":\"$GITEA_SERVER_USER\",\"visibility\":\"private\"}" +JSON=$(curlj "$BASEURL/api/v1/admin/users/$GITEA_SERVER_USER" -XPATCH -d "$DATA") +SUCCESS=$(echo "$JSON" | jq .visibility -r) +if [[ "$SUCCESS" != "private" ]]; then + echo "Editing user $USER failed" + exit 1 +fi + +# Create org structure +ORG="rescue-drop" +tea org create "$ORG" +for NAME in developers devops reviewers; do + DATA="{\"name\":\"$NAME\",\"permission\":\"write\",\"can_create_org_repo\":false,\"units\":[\"repo.code\",\"repo.pulls\"],\"includes_all_repositories\": true}" + JSON=$(curlj "$BASEURL/api/v1/orgs/$ORG/teams" -XPOST -d "$DATA") + SUCCESS=$(echo "$JSON" | jq .id -r) + if [[ "$SUCCESS" == "null" ]]; then + echo "Creating team $NAME failed" + exit 1 + fi +done + +# Get Team ID to prevent sequence inconsistencies +DEV_TEAM=$(curlj "$BASEURL/api/v1/orgs/$ORG/teams" | jq '.[] | select(.name=="developers") | .id') +for USER in "${DEV[@]}" +do + USERNAME=$(echo "$USER" | jq .username -r) + JSON=$(curlj "$BASEURL/api/v1/teams/$DEV_TEAM/members/$USERNAME" -X PUT) + SUCCESS=$(echo "$JSON" | jq .errors -r) + if [[ "$SUCCESS" == "null" ]]; then + echo "Putting $USERNAME into developers failed" + exit 1 + fi +done + +OPS_TEAM=$(curlj "$BASEURL/api/v1/orgs/$ORG/teams" | jq '.[] | select(.name=="devops") | .id') +for USER in "${OPS[@]}" +do + USERNAME=$(echo "$USER" | jq .username -r) + JSON=$(curlj "$BASEURL/api/v1/teams/$OPS_TEAM/members/$USERNAME" -X PUT) + SUCCESS=$(echo "$JSON" | jq .errors -r) + if [[ "$SUCCESS" == "null" ]]; then + echo "Putting $USERNAME into devops failed" + exit 1 + fi +done + +REV_TEAM=$(curlj "$BASEURL/api/v1/orgs/$ORG/teams" | jq '.[] | select(.name=="reviewers") | .id') +for USER in "${REV[@]}" +do + USERNAME=$(echo "$USER" | jq .username -r) + JSON=$(curlj "$BASEURL/api/v1/teams/$REV_TEAM/members/$USERNAME" -X PUT) + SUCCESS=$(echo "$JSON" | jq .errors -r) + if [[ "$SUCCESS" == "null" ]]; then + echo "Putting $USERNAME into reviewers failed" + exit 1 + fi +done + +# Create repo +REPO="production-image-build" +DESC="Build for our production job processing" +tea repo create --owner "$ORG" --name "$REPO" --desc "$DESC" + +# Set repo features +# Requires patch +DATA='{"has_actions":true,"has_wiki":false,"has_releases":false,"has_projects":false}' +JSON=$(curlj "$BASEURL/api/v1/repos/$ORG/$REPO" -XPATCH -d "$DATA") +SUCCESS=$(echo "$JSON" | jq .has_actions -r) +if [[ "$SUCCESS" != "true" ]]; then + echo "Editing repo $REPO failed" + exit 1 +fi + +# create branch protection +set +e +read -r -d '' DATA <&1) + SUCCESS=$(echo "$RESP" | grep -F "macaron_flash" | perl -0777 -pe 's/.*flash=success%3DThe%2Bsecret(.*)has%2Bbeen%2Badded.*/\1/msg') + if [[ "$SUCCESS" == "" ]]; then + echo "Adding CI secret ${SECRET_NAME} failed" + exit 1 + fi +} + +add_secret "DEPLOY_KEY" "storeimage" +RUNNER_KUBECONFIG=$(cat /etc/kubernetes/runner.conf) +add_secret "KUBECONFIG" "$RUNNER_KUBECONFIG" +add_secret "CTF_FLAG" "flag_ctf{SECRETS_REVEALED_2_THOSE_WHO_ENVISION_FLAWS}" + +## Order Processor Database +mkdir -p /data/db + +cat <<-"EOF" | base64 -d > /data/db/orders.db +U1FMaXRlIGZvcm1hdCAzABAAAQEAQCAgAAAAEwAAAAMAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAA +AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAC4/2Q0P+AACDe4ADe4PywAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDWgEHFxkZAYcPdGFibGVvcmRlcnNvcmRl +cnMCQ1JFQVRFIFRBQkxFIG9yZGVycyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +aWQgSU5UIFBSSU1BUlkgS0VZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxu +YW1lIFRFWFQgTk9UIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVz +cyBCTE9CIE5PVCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsIFRF +WFQgTk9UIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSBURVhUIE5P +VCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWRpdF9jYXJkIElOVCBO +T1QgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY19leHBpcmUgVEVYVCBO +T1QgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcnMgVEVYVCkrAgYX +PxkBAGluZGV4c3FsaXRlX2F1dG9pbmRleF9vcmRlcnNfMW9yZGVycwMAAAAIAAAAAA0AAAASB00A +D38PBA6EDhENjg0jDMEMUQvNC04K1QpVCdcJLwizCDcHvwdNAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHASCQEnXy0hBhcfEUJyZW5kYW4g +UHJpY2U3NTQ2NiBCZW5uZXR0IERyaXZlClJvc2FsZXNzdGFkLCBTRCAzODQyOGJwcmljZUBnbWFp +bC5jb20yMDIyLTA3LTE1AA9cZxbBW38xMi8yM2dpZnQgY2FyZHYRCQEjay8hBhchEExlYWggU2Fu +dG9zMjkxNTYgS2F5bGEgU3B1cnMgQXB0LiA5OTYKTWF0dGhld3RvbiwgSUQgMzM0Mjlsc2FudG9z +QHlhaG9vLmNvbTIwMjItMTEtMDEAAMHeKiHupjEwLzIzc2hvd2VyIGdlbHoQCQErXTUhBhcpD0dy +ZWdvcnkgU2FuY2hlejg3MTIgTmljb2xlIExvY2tzCkxha2UgR3JlZ29yeSwgTkogOTI0NDdnc2Fu +Y2hlekBob3RtYWlsLmNvbTIwMjItMTItMDQADKxv8Bm+QDEwLzMwbGFwdG9wIGNoYXJnZXJ6DwkB +I3UvIQYXHw5FcmljIEliYXJyYTk3NyBDb3VydG5leSBWaWV3IEFwdC4gMjE2CkVhc3QgTmljb2xl +dG93biwgQ1QgMTQ0ODRlaWJhcnJhQHlhaG9vLmNvbTIwMjItMDUtMTQADJ0mpZp3/DA1LzIzdXNi +IGNhYmxlgSUOCQErczMhBhdrDUp1c3RpbiBQaGlsbGlwczkxNyBKZW5uaWZlciBFeHByZXNzd2F5 +IEFwdC4gODk5Ck15ZXJzdG9uLCBPUiAzNzU0OGpwaGlsbGlwc0B5YWhvby5jb20yMDIyLTEyLTE3 +AAfnmAC/Ce8wNS8yNGZsYWdfY3Rme1NFQ19JTkNJREVOVF9DVVNUT01FUl9EQVRBX0RJU0NPVkVS +RUR9fA0JASlzLyEFFyMMTWVsaXNzYSBNaWxsZXI0MDIyIENyb3NzIExha2VzIFN1aXRlIDY5OQpM +YWtlIEhheWxleXRvbiwgT0ggODM4NjFtbWlsbGVyQGdtYWlsLmNvbTIwMjItMDgtMTEAhhWh+v0w +MS8yOHRvb3RoIGJydXNofgwJASF5MSEFFycLVG9kZCBMb2dhbjc1NTUgRWxpemFiZXRoIFByYWly +aWUgU3VpdGUgNTIzClJhbWlyZXpsYW5kLCBHVSA5OTA3NnRsb2dhbkBob3RtYWlsLmNvbTIwMjIt +MTItMjgEZPoUESQwNy8yNWJpcnRoZGF5IGNhcmR3CwkBK2UxIQYXHwpDaGVsc2VhIEZsb3dlcnMw +MzMgUmV5bm9sZHMgUGxhaW4KTmV3IFJlYmVjY2FiZXJnLCBXViA0NDAxNWNmbG93ZXJzQHlhaG9v +LmNvbTIwMjItMDQtMTcAATv2mCfvgjAzLzI4Z2lmdCBjYXJkfQoKASGBAS0hBhcbCUNvcnkgTGVh +Y2g2MTQyIFJpY2hhcmQgQ3Jlc2NlbnQgU3VpdGUgNjc1ClNvdXRoIFJvYmVydHBvcnQsIE5EIDYx +MDA1Y2xlYWNoQGdtYWlsLmNvbTIwMjItMDYtMjcAEHbuC45uCzA4LzMxdXNiIGtleYEBCQkBLWs1 +IQYXJwhKZXJlbWlhaCBTYW5kZXJzMTA5MzEgUm9uYWxkIENlbnRlcnMKU291dGggRHVzdGluYmVy +ZywgTUkgNjEzMzNqc2FuZGVyc0Bob3RtYWlsLmNvbTIwMjItMDYtMDgAB+t/OIoo3zAxLzI1cHJp +bnRlciB0b25lcm4ICQElYTEhBhcXB0FuZ2VsYSBFdmFuczY3NDk5IFBoaWxsaXBzIExvZGdlClRp +bW90aHlidXJ5LCBMQSA1MjY1N2FldmFuc0Bob3RtYWlsLmNvbTIwMjItMDQtMTUADLiKOzPvCDAz +LzIzYnJlYWRgBwkBJUsxIQUXFQZCYWlsZXkgQWxsZW5Vbml0IDQ3MTggQm94IDcyMTQKRFBPIEFB +IDE4MDM1YmFsbGVuQGhvdG1haWwuY29tMjAyMi0wOC0wMgCSycsOyzAyLzI3bWlsa2kGCQEtSzch +BhcVBVBhdHJpY2sgV2lsbGlhbXNVbml0IDQzMTYgQm94IDE1MTUKRFBPIEFFIDM1Njk3cHdpbGxp +YW1zQGhvdG1haWwuY29tMjAyMi0wOC0wNwABN/sIgxyjMTIvMjVlZ2dzgQAFCQEjcTUhBhcpBExl +ZSBTd2VlbmV5MjY0NyBTdGFjZXkgSGlsbCBTdWl0ZSAyNDgKV2VzdCBNYXJ5dmlldywgSU4gNjg4 +Mzdsc3dlZW5leUBob3RtYWlsLmNvbTIwMjItMDctMDcAF297Q4K9rTA4LzI5bGFwdG9wIGNoYXJn +ZXJxBAkBI3MtIQUXFQNKdWxpZSBEb3lsZTUwNjEgUm9tZXJvIFN0cmVhbSBTdWl0ZSAwNDgKUGF0 +cmljaWF0b3duLCBPSyAwNjI0NWpkb3lsZUB5YWhvby5jb20yMDIyLTA0LTE4G9LGginkMTEvMzBz +YWx0fgMJASl1NSEFFx8CU3RldmVuIEphY2tzb241OTQxIExhd3NvbiBNYW5vcnMgU3VpdGUgOTMx +ClBvcnQgQWRhbXRvd24sIElOIDkzODIyc2phY2tzb25AaG90bWFpbC5jb20yMDIyLTAzLTMxG5rg +T0LhMTIvMjl1c2IgY2FibGV5AgkJJVsxIQYXNUV2ZWx5biBQZXJyeTk5NiBLZWxseSBNb3VudGFp +bnMKT3J0aXpmb3J0LCBGTSAwNTg5MmVwZXJyeUBob3RtYWlsLmNvbTIwMjItMTItMzAAATWm8/Gx +djEwLzMybW9iaWxlIHBob25lIGNoYXJnZXJ/AQkIJ3czIQYXIU1hcnkgUGV0ZXJzb244MTI0IE1h +eHdlbGwgVW5pb25zIEFwdC4gNjAzCk5ldyBBYmlnYWlsdG9uLCBLUyAwMDgwN21wZXRlcnNvbkB5 +YWhvby5jb20yMDIyLTA4LTE0ABVbMqgogVAxMS8yOWZyeWluZyBwYW4KAAAAEg+XAA/8D/cP8Q/r +D+UP3w/ZD9MPzQ/HD8EPuw+1D68PqQ+jD50PlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQMBARESBQMBARARBQMB +AQ8QBQMBAQ4PBQMBAQ0OBQMBAQwNBQMBAQsMBQMBAQoLBQMBAQkKBQMBAQgJBQMBAQcIBQMBAQYH +BQMBAQUGBQMBAQQFBQMBAQMEBQMBAQIDBAMJAQIDAwgJ +EOF diff --git a/scenarios/roles/devious-developer-data-dump/templates/scripts/05-local.sh b/scenarios/roles/devious-developer-data-dump/templates/scripts/05-local.sh new file mode 100755 index 00000000..dfae5fbd --- /dev/null +++ b/scenarios/roles/devious-developer-data-dump/templates/scripts/05-local.sh @@ -0,0 +1,84 @@ + +set -x + +USER="jcastillo" +PASS="9zvB2cQf2tdC" +ORG="rescue-drop" +DOMAIN="rescue.drop" +REPO="production-image-build" +MASTER_IP="{{ master_ip }}" +NODE_IP="{{ node1_ip }}" + +run_scp "./_git-repo-orders-processor/*" "$MASTER_IP:/tmp/gitrepo" +run_scp "./_git-repo-orders-processor/.github" "$MASTER_IP:/tmp/gitrepo" + +run_ssh "$MASTER_IP" bash < /dev/null +kubectl exec -it -n {{ namespace }} {{ pod }} -- sh + +exit 0 diff --git a/scenarios/scenarios.yaml b/scenarios/scenarios.yaml new file mode 100644 index 00000000..11f3ad64 --- /dev/null +++ b/scenarios/scenarios.yaml @@ -0,0 +1,55 @@ +--- + +- id: cease-and-desist + name: Cease and Desist + description: "Restore production by reactiviting the reform-kube license server." + category: KubeCon + difficulty: + +- id: identity-theft + name: Identity Theft + description: "Can you steal the identity of the pod-checker users?" + category: KubeCon + difficulty: + +- id: seven-seas + name: Seven Seas + description: "Sail the Seven Seas and find all the missing map pieces!" + category: Workshop + difficulty: + +- id: build-a-backdoor + name: Build-a-Backdoor + description: "KCEU23: Build a backdoor for Hashjack to exploit" + category: KubeCon + difficulty: + +- id: devious-developer-data-dump + name: Devious Developer Data Dump + description: "KCEU23: Can you navigate Rescue Drop's CI/CD infrastructure, following Hashjack to the goal?" + category: KubeCon + difficulty: + +- id: commandeer-container + name: Commandeer Container + description: "KCEU23: Can you navigate Kubernetes and find the treasure?" + category: KubeCon + difficulty: + +- id: ci-runner-ng-breakout + name: CI Runner-NG Breakout + description: "CNSCon: There is a containerd socket mounted into the container, is it possible to traverse the cluster?" + category: KubeCon + difficulty: + +- id: pss-misconfiguration + name: CNSecCon NA 23 PSS Misconfiguration + description: "CNSCon: An unrestricted Pod is admitted in the cluster regardless of the security context restrictions in place: what's happening?" + category: CNSecCon + difficulty: + +- id: coastline-cluster-attack + name: CNSEC23 Coastline Cluster Attack + description: "CNSEC23: Hashjack has taken over a jumpbox in coastline. He wants you get cluster admin" + category: KubeCon + difficulty: diff --git a/terraform/modules/cluster/templates/ansible.cfg b/terraform/modules/cluster/templates/ansible.cfg index 0f0a8061..b19b16df 100644 --- a/terraform/modules/cluster/templates/ansible.cfg +++ b/terraform/modules/cluster/templates/ansible.cfg @@ -1,6 +1,6 @@ [defaults] inventory=inventory.yaml -roles_path=../../ansible/roles +roles_path=../../scenarios/roles [ssh_connection] ssh_extra_args=-F cp_simulator_config diff --git a/terraform/modules/cluster/templates/cloud-config.yaml b/terraform/modules/cluster/templates/cloud-config.yaml index cf229c97..a2608c81 100644 --- a/terraform/modules/cluster/templates/cloud-config.yaml +++ b/terraform/modules/cluster/templates/cloud-config.yaml @@ -6,7 +6,6 @@ users: - name: player shell: /bin/bash ssh_authorized_keys: -# - command="/etc/simulator/run" ${player_public_key} - - ${player_public_key} + - command="/simulator/scripts/starting_point" ${player_public_key} package_update: true package_upgrade: true diff --git a/terraform/workspaces/simulator/admin_config.tf b/terraform/workspaces/simulator/admin_config.tf index 79a457a4..667a8aba 100644 --- a/terraform/workspaces/simulator/admin_config.tf +++ b/terraform/workspaces/simulator/admin_config.tf @@ -4,6 +4,8 @@ resource "local_file" "admin_private_key" { file_permission = "0600" } +// TODO: add vars for config path in S3 + resource "aws_s3_object" "admin_private_key" { content_base64 = module.cluster.admin_private_key bucket = var.bucket diff --git a/ansible/init-cluster.yaml b/terraform/workspaces/simulator/ansible-playbooks.tf similarity index 78% rename from ansible/init-cluster.yaml rename to terraform/workspaces/simulator/ansible-playbooks.tf index bb61a44a..81e6ab42 100644 --- a/ansible/init-cluster.yaml +++ b/terraform/workspaces/simulator/ansible-playbooks.tf @@ -1,3 +1,6 @@ +resource "local_file" "init_cluster" { + filename = format("%s/%s", var.admin_config_dir, local.ansible_playbook_init_cluster) + content = <