diff --git a/.github/workflows/function-deploy-cela-dev.yml b/.github/workflows/function-deploy-cela-dev.yml
new file mode 100644
index 00000000..220e6332
--- /dev/null
+++ b/.github/workflows/function-deploy-cela-dev.yml
@@ -0,0 +1,71 @@
+
+name: functions deploy
+
+on:
+ push:
+ branches: [ cela-dev ]
+ paths:
+ - 'webhooks/**'
+ - '.github/workflows/function-deploy-cela-dev.yml'
+
+jobs:
+ deploy:
+ name: "Deploy Firebase functions"
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ node-version: [16.x]
+ # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
+
+ env:
+ working-directory: './webhooks/functions'
+ project-id: 'cela-2'
+ defaults:
+ run:
+ working-directory: './webhooks/functions'
+
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@v2
+
+ - name : GITHUB CONTEXT
+ env:
+ GITHUB_CONTEXT: ${{ toJson(github) }}
+ run: echo "$GITHUB_CONTEXT"
+
+ - name: Install node ${{ matrix.node-version }}
+ uses: actions/setup-node@v1
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Install Dependencies
+ run: npm ci --no-audit
+ working-directory: ${{ env.working-directory }}
+
+ - name: test
+ run: npm test
+ working-directory: ${{ env.working-directory }}
+
+ - name: lint
+ run: npm run lint
+ working-directory: ${{ env.working-directory }}
+
+ - name: build
+ run: npm run build
+ working-directory: ${{ env.working-directory }}
+
+ - name: set commit name to function config
+ uses: w9jds/firebase-action@master
+ with:
+ args: functions:config:set debug.message=\"${{ github.event.head_commit.message }}\" --project ${{ env.project-id }}
+ env:
+ FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
+ PROJECT_PATH: './webhooks'
+
+ - name: Deploy to Firebase
+ uses: w9jds/firebase-action@master
+ with:
+ args: deploy --only \"functions:ActionsOnGoogleFulfillment\" --project ${{ env.project-id }} --message \"${{ github.event.head_commit.message }}\"
+ env:
+ FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
+ PROJECT_PATH: './webhooks'
diff --git a/.github/workflows/functions-avh-dev.yml b/.github/workflows/functions-avh-dev.yml
new file mode 100644
index 00000000..2ed7ab84
--- /dev/null
+++ b/.github/workflows/functions-avh-dev.yml
@@ -0,0 +1,97 @@
+
+name: functions deploy
+
+on:
+ push:
+ branches: [ avh-dev ]
+ paths:
+ - 'webhooks/**'
+ - '.github/workflows/functions-avh-dev.yml'
+
+jobs:
+ deploy:
+ name: "Deploy Firebase functions"
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ node-version: [16.x]
+ # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
+
+ env:
+ working-directory: './webhooks/functions'
+ project-id: 'valentin-5'
+ defaults:
+ run:
+ working-directory: './webhooks/functions'
+
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@v2
+
+ - name : GITHUB CONTEXT
+ env:
+ GITHUB_CONTEXT: ${{ toJson(github) }}
+ run: echo "$GITHUB_CONTEXT"
+
+ - name: Install node ${{ matrix.node-version }}
+ uses: actions/setup-node@v1
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Install Dependencies
+ run: npm ci --no-audit
+ working-directory: ${{ env.working-directory }}
+
+ - name: test
+ run: npm test
+ working-directory: ${{ env.working-directory }}
+
+ - name: lint
+ run: npm run lint
+ working-directory: ${{ env.working-directory }}
+
+ - name: build
+ run: npm run build
+ working-directory: ${{ env.working-directory }}
+
+ - name: set commit name to function config
+ uses: w9jds/firebase-action@master
+ with:
+ args: functions:config:set debug.message=\"${{ github.event.head_commit.message }}\" --project ${{ env.project-id }}
+ env:
+ FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
+ PROJECT_PATH: './webhooks'
+
+ - name: Deploy to Firebase
+ uses: w9jds/firebase-action@master
+ with:
+ args: deploy --only \"functions:ActionsOnGoogleFulfillment\" --project ${{ env.project-id }} --message \"${{ github.event.head_commit.message }}\"
+ env:
+ FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
+ PROJECT_PATH: './webhooks'
+
+ sdk-test-dev:
+ name: "Test sdk DEV"
+ needs: deploy
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ node-version: [14.x]
+ # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
+ defaults:
+ run:
+ working-directory: './test/dev'
+
+ steps:
+
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ with:
+ node-version: ${{ matrix.node }}
+
+ - name: save service_account
+ run: echo $SECRET >> service_account.json
+ env:
+ SECRET : ${{ secrets.SERVICE_ACCOUNT_VALENTIN5 }}
+ - run: npm install
+ - run: npm test
diff --git a/.github/workflows/functions.yml b/.github/workflows/functions-edrlab-dev.yml
similarity index 62%
rename from .github/workflows/functions.yml
rename to .github/workflows/functions-edrlab-dev.yml
index e2ac0bf4..374af269 100644
--- a/.github/workflows/functions.yml
+++ b/.github/workflows/functions-edrlab-dev.yml
@@ -3,10 +3,10 @@ name: functions deploy
on:
push:
- branches: [ main ]
+ branches: [ develop ]
paths:
- - 'functions/**'
- - '.github/workflows/functions.yml'
+ - 'webhooks/**'
+ - '.github/workflows/functions-edrlab-dev.yml'
jobs:
deploy:
@@ -18,10 +18,11 @@ jobs:
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
env:
- working-directory: './functions/functions'
+ working-directory: './webhooks/functions'
+ project-id: 'edrlab-1'
defaults:
run:
- working-directory: './functions/functions'
+ working-directory: './webhooks/functions'
steps:
- name: Checkout repo
@@ -40,19 +41,31 @@ jobs:
- name: Install Dependencies
run: npm ci --no-audit
working-directory: ${{ env.working-directory }}
+
+ - name: test
+ run: npm test
+ working-directory: ${{ env.working-directory }}
+
+ - name: lint
+ run: npm run lint
+ working-directory: ${{ env.working-directory }}
+
+ - name: build
+ run: npm run build
+ working-directory: ${{ env.working-directory }}
- name: set commit name to function config
uses: w9jds/firebase-action@master
with:
- args: functions:config:set debug.message=\"${{ github.event.head_commit.message }}\"
+ args: functions:config:set debug.message=\"${{ github.event.head_commit.message }}\" --project ${{ env.project-id }}
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
- PROJECT_PATH: './functions'
+ PROJECT_PATH: './webhooks'
- name: Deploy to Firebase
uses: w9jds/firebase-action@master
with:
- args: deploy --only \"functions:ActionsOnGoogleFulfillment\" --message \"${{ github.event.head_commit.message }}\"
+ args: deploy --only \"functions:ActionsOnGoogleFulfillment\" --project ${{ env.project-id }} --message \"${{ github.event.head_commit.message }}\"
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
- PROJECT_PATH: './functions'
+ PROJECT_PATH: './webhooks'
diff --git a/.github/workflows/webhooks-test.yml b/.github/workflows/webhooks-test.yml
new file mode 100644
index 00000000..c9e6f17f
--- /dev/null
+++ b/.github/workflows/webhooks-test.yml
@@ -0,0 +1,32 @@
+
+name: webhooks unitary tests
+
+on:
+ push:
+ branches: [ develop, avh-prod, avh-dev, cela-prod, cela-dev ]
+ # paths:
+ pull_request:
+ branches: [ develop, avh-prod, avh-dev, cela-prod, cela-dev ]
+
+jobs:
+ sdk-test-prod:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ node: [12, 14, 16]
+ # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
+ defaults:
+ run:
+ working-directory: './webhooks/functions'
+ name: Node ${{ matrix.node }} webhooks unitary tests
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ with:
+ node-version: ${{ matrix.node }}
+ - run: node -v
+ - run: npm -v
+ - run: find . -type f
+ - run: npm ci
+ - run: npm test
+ - run: npm run lint
diff --git a/.gitignore b/.gitignore
index 7cb323d8..2e88cad1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,7 @@
node_modules
service_account.json
+
+.nyc_output/
+firebase-debug.log
+ui-debug.log
diff --git a/README.md b/README.md
index fdf849b3..1ef1f515 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,11 @@
# lis-mon-livre
+> develop branch
+ - https://console.firebase.google.com/u/1/project/edrlab-1/firestore/data
+ - https://console.actions.google.com/u/1/project/edrlab-1/overview
+ - https://console.cloud.google.com/logs/query?referrer=search&authuser=1&project=edrlab-1
-## gactions
+## gactions sdk
-`cd sdk && gactions pull --force --clean --project-id valentin-4`
+`cd sdk && gactions pull --force --clean --project-id valentin-5`
diff --git a/flowchart.drawio b/flowchart.drawio
new file mode 100644
index 00000000..8af25367
--- /dev/null
+++ b/flowchart.drawio
@@ -0,0 +1 @@
+7VlLc9s2EP4tOWimPUgjkqIkH23ZTtO6qTtuJ/EpA5EgCRsCWAC0pPz67ILgS5TcOGM7yrQXkthdLMDdbx8gB8FitXmrSJ79LmPKB/443gyC84Hv+8HEhxtStiUl8KdhSUkVi0ua1xBu2GfqiGNHLVhMdUfQSMkNy7vESApBI9OhEaXkuiuWSN5dNScp7RFuIsL71A8sNllJnfuzhv4LZWlWrexNT0rOilTC7k10RmK5bpGCi0GwUFKa8mm1WVCO1qvsUs67PMCtN6aoMF8zIZn/oT8ltx/Hp3/evRey+FVd3w2dlgfCC/fCA3/KQd+ZzomA5xSfKxoo30f+RtEPlEdyRa1HB7j58VYWCm6Li6tTuF2xpSJq+8byyulLtauwofyFSpKC8y3cqbiT20YjKWIml1LeaxyIGK9RRLVuRHKqtBQELaYpBygxCTtdlAJwXTNrTUFpXO2YM3Hf2zXolYUwo/4GP8iCx7U+zu7rV4/xovEiECGXB41ocWS2FTgVrBRT9K8H7HXGDL3JSYTcNcQj0DKz4o6dkSgrFH2L9PMJEHLJhKHq4gEAhFEyrpdog6pCCFWGblokB7K3FFxoFNracScO71XET9143YRPUEV31g6dwBGJC9m0Vt2gGh4csJ8A8rBnOBpDkLuhkAJuZ1GhHmpTNoZFo0hlMpkiOK6kzJ3IHTVm6/IVKcCNHWPTDTMfcfoodKPbFud84zTbwbYaCHjZ1iQc3rZ5zTQ7aubFp5jpYChzKjDKDFHG7c2blCLtoQbERvSaKgYGpgoxw0QK3DkwYW5KzQHmQXyUKh9xgisEpfZH5CalHHroUbQpyolhD900/ezQ8Xv58QZt2wMUJPccH8EyhHPKZarICmOsMuMu77ph/FvgJmxDa/e9YiAHs24kz/uB7Pl7Ann6UnEcHEWxWpLovkrcTyhYCynA76ZA1EqhUejWFoKMPKBaXWBBquoXlhYatwpYWVXq6hXhzmy1aFUyYk0ok2ZaQh6kAnDhtrH6vXlKVdKUqCizTZPdApJyGrGERU4frlaWV0iQqqyWWM6YjiTgDNl2Gwaypj8OEJAssjXYTlt3ls4VTewcm70w5ZRruoUSJVfNi9m3yShPfvRqGYY75TL87uVy/h3LZatYNqXzv1guJ19ZLr3nLpd2KhiIbFsCFvy6pfkaCQ2KvZOwg+KqBjQwLDU2oKy39u049Sa9evD3+6t373+7ON+L4CuyhNNpB3eEsxQQcB5RUZZiDFwGp79Tx1ixOEYdZ4pq9pksrb5xlQ6sdcKzQXi+19ePRVcvQ9RHWLdI55S4L3OMR5P5zO+a3VXIpzm78WYlIpNEU9NLJM/hs/Fe17xKcvH+Ty5PTC7BUSSX6bxbIv1Z+ArJpd9sHn1qqYLrOXLLeD6fdaw+9GbHnlz69eAd9MJTssLeTix13urts6Djxek/BX6HO1tBSDDwDrbz43wD16Ff3u1c8EEc2whsBBzfa4stpYqpGi6lMdC1WmGb2ip+JDl0wJau0uVPwcQ2ztg+dx5/rickUphhQlYMTgd2Wv1eAz8IbB6hqcQFCtZj1Ro1EXqoIZskzRtX7XJ9wijts25OCFdwFrHteI8DZ2FT6Fb/jVY91H1ncrUE4aPpvIOdzhv82T/fTvd13uFLdd7e4c+xeBLK4ITUQWtmDH4GP8VV/Utiv1nqoRTDVMqU01HKTFYsR0wiV2sGtQhgBLkArKTtOXQoZEzvwIWXwWg2gve6jDhIUqS05T5lcO7kVH0qAD4je7Eu8wOHG16CRFeI2EHXEe+0wi45CF0AlOliVBsl7+mijOKqa0kY5zukry8C+4Ki2/m82vfbnXLref24mOyNi9mLxUW4Jy6OPb94YfdMFM76dpzvMeP8xaw47VlxS3W/n+Gc5foQJr+DIYf1z0BnyemeXwr7LPlyeJz1LCnkD2DIk1ezIwybP5tlf9f8IA4uvgA=
\ No newline at end of file
diff --git a/sdk/prod/actions/actions.yaml b/sdk/actions/actions.yaml
similarity index 100%
rename from sdk/prod/actions/actions.yaml
rename to sdk/actions/actions.yaml
diff --git a/sdk/test/actions/actions.yaml b/sdk/actions/en/actions.yaml
similarity index 100%
rename from sdk/test/actions/actions.yaml
rename to sdk/actions/en/actions.yaml
diff --git a/sdk/custom/global/actions.intent.CANCEL.yaml b/sdk/custom/global/actions.intent.CANCEL.yaml
new file mode 100644
index 00000000..1166ed64
--- /dev/null
+++ b/sdk/custom/global/actions.intent.CANCEL.yaml
@@ -0,0 +1,3 @@
+handler:
+ webhookHandler: cancel
+transitionToScene: actions.scene.END_CONVERSATION
diff --git a/sdk/custom/global/actions.intent.MAIN.yaml b/sdk/custom/global/actions.intent.MAIN.yaml
new file mode 100644
index 00000000..c43ab2e2
--- /dev/null
+++ b/sdk/custom/global/actions.intent.MAIN.yaml
@@ -0,0 +1,2 @@
+handler:
+ webhookHandler: main
diff --git a/sdk/custom/global/actions.intent.MEDIA_STATUS_STOPPED.yaml b/sdk/custom/global/actions.intent.MEDIA_STATUS_STOPPED.yaml
new file mode 100644
index 00000000..af0c87f2
--- /dev/null
+++ b/sdk/custom/global/actions.intent.MEDIA_STATUS_STOPPED.yaml
@@ -0,0 +1 @@
+transitionToScene: actions.scene.END_CONVERSATION
diff --git a/sdk/custom/global/actions.intent.NO_INPUT_1.yaml b/sdk/custom/global/actions.intent.NO_INPUT_1.yaml
new file mode 100644
index 00000000..a92bb198
--- /dev/null
+++ b/sdk/custom/global/actions.intent.NO_INPUT_1.yaml
@@ -0,0 +1,2 @@
+handler:
+ webhookHandler: silence_1
diff --git a/sdk/custom/global/actions.intent.NO_INPUT_2.yaml b/sdk/custom/global/actions.intent.NO_INPUT_2.yaml
new file mode 100644
index 00000000..ca8ab58a
--- /dev/null
+++ b/sdk/custom/global/actions.intent.NO_INPUT_2.yaml
@@ -0,0 +1,2 @@
+handler:
+ webhookHandler: silence_2
\ No newline at end of file
diff --git a/sdk/custom/global/actions.intent.NO_INPUT_FINAL.yaml b/sdk/custom/global/actions.intent.NO_INPUT_FINAL.yaml
new file mode 100644
index 00000000..f4869858
--- /dev/null
+++ b/sdk/custom/global/actions.intent.NO_INPUT_FINAL.yaml
@@ -0,0 +1,3 @@
+handler:
+ webhookHandler: silence_end
+transitionToScene: actions.scene.END_CONVERSATION
diff --git a/sdk/custom/global/actions.intent.NO_MATCH_1.yaml b/sdk/custom/global/actions.intent.NO_MATCH_1.yaml
new file mode 100644
index 00000000..59af8936
--- /dev/null
+++ b/sdk/custom/global/actions.intent.NO_MATCH_1.yaml
@@ -0,0 +1,2 @@
+handler:
+ webhookHandler: fallback_1
diff --git a/sdk/custom/global/actions.intent.NO_MATCH_2.yaml b/sdk/custom/global/actions.intent.NO_MATCH_2.yaml
new file mode 100644
index 00000000..c5df3091
--- /dev/null
+++ b/sdk/custom/global/actions.intent.NO_MATCH_2.yaml
@@ -0,0 +1,2 @@
+handler:
+ webhookHandler: fallback_2
diff --git a/sdk/custom/global/actions.intent.NO_MATCH_FINAL.yaml b/sdk/custom/global/actions.intent.NO_MATCH_FINAL.yaml
new file mode 100644
index 00000000..c72b085b
--- /dev/null
+++ b/sdk/custom/global/actions.intent.NO_MATCH_FINAL.yaml
@@ -0,0 +1,3 @@
+handler:
+ webhookHandler: fallback_end
+transitionToScene: actions.scene.END_CONVERSATION
diff --git a/sdk/custom/intents/another_one.yaml b/sdk/custom/intents/another_one.yaml
new file mode 100644
index 00000000..6ad8421c
--- /dev/null
+++ b/sdk/custom/intents/another_one.yaml
@@ -0,0 +1,5 @@
+trainingPhrases:
+- prochain
+- suivant
+- page suivante
+- un autre
diff --git a/sdk/custom/intents/bookshelf.yaml b/sdk/custom/intents/bookshelf.yaml
new file mode 100644
index 00000000..6984d2c3
--- /dev/null
+++ b/sdk/custom/intents/bookshelf.yaml
@@ -0,0 +1,10 @@
+trainingPhrases:
+- voir mon étagère
+- consulter ma liste personnelle
+- voir ma liste personnelle
+- liste personnelle
+- consulter mon étagère
+- étagère
+- mon étagère
+- bibliothèque
+- ma bibliothèque
diff --git a/sdk/custom/intents/by_genre.yaml b/sdk/custom/intents/by_genre.yaml
new file mode 100644
index 00000000..f406e65f
--- /dev/null
+++ b/sdk/custom/intents/by_genre.yaml
@@ -0,0 +1,4 @@
+trainingPhrases:
+- par genre
+- genre
+- je préfère par genre
diff --git a/sdk/custom/intents/by_theme.yaml b/sdk/custom/intents/by_theme.yaml
new file mode 100644
index 00000000..1f2b18b9
--- /dev/null
+++ b/sdk/custom/intents/by_theme.yaml
@@ -0,0 +1,6 @@
+trainingPhrases:
+- je veux par thème
+- je t'aime
+- par thème
+- thème
+- je préfère par thème
diff --git a/sdk/custom/intents/collections.yaml b/sdk/custom/intents/collections.yaml
new file mode 100644
index 00000000..f853d232
--- /dev/null
+++ b/sdk/custom/intents/collections.yaml
@@ -0,0 +1,6 @@
+trainingPhrases:
+- recommandations
+- collections
+- navigue dans les collections
+- sélections
+- navigue dans les sélections
diff --git a/sdk/custom/intents/current_book.yaml b/sdk/custom/intents/current_book.yaml
new file mode 100644
index 00000000..b723aa6f
--- /dev/null
+++ b/sdk/custom/intents/current_book.yaml
@@ -0,0 +1,8 @@
+trainingPhrases:
+- Reprendre ma lecture
+- Reprends ma lecture
+- Reprends
+- Reprends le dernier livre
+- Reprends la lecture
+- Reprendre la lecture
+- Reprendre
diff --git a/sdk/custom/intents/en/another_one.yaml b/sdk/custom/intents/en/another_one.yaml
new file mode 100644
index 00000000..790fb96e
--- /dev/null
+++ b/sdk/custom/intents/en/another_one.yaml
@@ -0,0 +1,5 @@
+trainingPhrases:
+- the next one
+- next
+- next page
+- another one
diff --git a/sdk/custom/intents/en/bookshelf.yaml b/sdk/custom/intents/en/bookshelf.yaml
new file mode 100644
index 00000000..a627ab60
--- /dev/null
+++ b/sdk/custom/intents/en/bookshelf.yaml
@@ -0,0 +1,7 @@
+trainingPhrases:
+- personal list
+- browse my bookshelf
+- book shelves
+- book shelf
+- my bookshelf
+- bookshelf
diff --git a/sdk/custom/intents/en/by_genre.yaml b/sdk/custom/intents/en/by_genre.yaml
new file mode 100644
index 00000000..1a198d69
--- /dev/null
+++ b/sdk/custom/intents/en/by_genre.yaml
@@ -0,0 +1,6 @@
+trainingPhrases:
+- by genre please
+- genre
+- I prefer by genre
+- I prefer collections by genre
+- by genre
diff --git a/sdk/custom/intents/en/by_theme.yaml b/sdk/custom/intents/en/by_theme.yaml
new file mode 100644
index 00000000..8447be17
--- /dev/null
+++ b/sdk/custom/intents/en/by_theme.yaml
@@ -0,0 +1,6 @@
+trainingPhrases:
+- by theme please
+- theme
+- I prefer by theme
+- I prefer to get a book selection by theme
+- by theme
diff --git a/sdk/custom/intents/en/collections.yaml b/sdk/custom/intents/en/collections.yaml
new file mode 100644
index 00000000..f6a9901a
--- /dev/null
+++ b/sdk/custom/intents/en/collections.yaml
@@ -0,0 +1,4 @@
+trainingPhrases:
+- recommendations
+- collections
+- Browse collections
diff --git a/sdk/custom/intents/en/current_book.yaml b/sdk/custom/intents/en/current_book.yaml
new file mode 100644
index 00000000..7b2bf448
--- /dev/null
+++ b/sdk/custom/intents/en/current_book.yaml
@@ -0,0 +1,5 @@
+trainingPhrases:
+- Resume
+- Resume reading
+- Resume playback
+- resume the last book
diff --git a/sdk/custom/intents/en/help.yaml b/sdk/custom/intents/en/help.yaml
new file mode 100644
index 00000000..13c3f3b2
--- /dev/null
+++ b/sdk/custom/intents/en/help.yaml
@@ -0,0 +1,4 @@
+trainingPhrases:
+- help me please
+- help me
+- help
diff --git a/sdk/custom/intents/en/learn_more.yaml b/sdk/custom/intents/en/learn_more.yaml
new file mode 100644
index 00000000..105f4309
--- /dev/null
+++ b/sdk/custom/intents/en/learn_more.yaml
@@ -0,0 +1,3 @@
+trainingPhrases:
+- information
+- learn more
diff --git a/sdk/custom/intents/en/link_account.yaml b/sdk/custom/intents/en/link_account.yaml
new file mode 100644
index 00000000..3b559d4c
--- /dev/null
+++ b/sdk/custom/intents/en/link_account.yaml
@@ -0,0 +1,3 @@
+trainingPhrases:
+- link account
+- i want to link my account
diff --git a/sdk/custom/intents/en/maybe_later.yaml b/sdk/custom/intents/en/maybe_later.yaml
new file mode 100644
index 00000000..19f5a18c
--- /dev/null
+++ b/sdk/custom/intents/en/maybe_later.yaml
@@ -0,0 +1,4 @@
+trainingPhrases:
+- later please
+- later
+- maybe later
diff --git a/sdk/custom/intents/en/membership.yaml b/sdk/custom/intents/en/membership.yaml
new file mode 100644
index 00000000..c34b6b1d
--- /dev/null
+++ b/sdk/custom/intents/en/membership.yaml
@@ -0,0 +1,2 @@
+trainingPhrases:
+- membership
diff --git a/sdk/prod/custom/intents/no.yaml b/sdk/custom/intents/en/no.yaml
similarity index 85%
rename from sdk/prod/custom/intents/no.yaml
rename to sdk/custom/intents/en/no.yaml
index 873ac739..3de19e6f 100644
--- a/sdk/prod/custom/intents/no.yaml
+++ b/sdk/custom/intents/en/no.yaml
@@ -1,5 +1,4 @@
trainingPhrases:
-- "n"
-- non
-- "no"
- nop
+- "no"
+- "n"
diff --git a/sdk/custom/intents/en/player_prequel_back.yaml b/sdk/custom/intents/en/player_prequel_back.yaml
new file mode 100644
index 00000000..56fdc838
--- /dev/null
+++ b/sdk/custom/intents/en/player_prequel_back.yaml
@@ -0,0 +1,5 @@
+trainingPhrases:
+- back to collections
+- back to selections
+- back to the list
+- back
diff --git a/sdk/custom/intents/en/player_prequel_resume.yaml b/sdk/custom/intents/en/player_prequel_resume.yaml
new file mode 100644
index 00000000..0e882540
--- /dev/null
+++ b/sdk/custom/intents/en/player_prequel_resume.yaml
@@ -0,0 +1,7 @@
+trainingPhrases:
+- continue reading
+- continue playing
+- continue
+- Resume playback
+- Resume
+- resume reading
diff --git a/sdk/custom/intents/en/player_prequel_start.yaml b/sdk/custom/intents/en/player_prequel_start.yaml
new file mode 100644
index 00000000..5e4181b4
--- /dev/null
+++ b/sdk/custom/intents/en/player_prequel_start.yaml
@@ -0,0 +1,3 @@
+trainingPhrases:
+- start reading
+- start
diff --git a/sdk/custom/intents/en/player_prequel_summary.yaml b/sdk/custom/intents/en/player_prequel_summary.yaml
new file mode 100644
index 00000000..829997a8
--- /dev/null
+++ b/sdk/custom/intents/en/player_prequel_summary.yaml
@@ -0,0 +1,6 @@
+trainingPhrases:
+- Information
+- Info
+- Description
+- Summarize
+- Summary
diff --git a/sdk/custom/intents/en/recent_books.yaml b/sdk/custom/intents/en/recent_books.yaml
new file mode 100644
index 00000000..1d5c775c
--- /dev/null
+++ b/sdk/custom/intents/en/recent_books.yaml
@@ -0,0 +1,6 @@
+trainingPhrases:
+- last book
+- play the last book
+- last books
+- recent
+- recent books
diff --git a/sdk/custom/intents/en/repeat.yaml b/sdk/custom/intents/en/repeat.yaml
new file mode 100644
index 00000000..4818ec7e
--- /dev/null
+++ b/sdk/custom/intents/en/repeat.yaml
@@ -0,0 +1,4 @@
+trainingPhrases:
+- again
+- repeat
+- i do not understand
diff --git a/sdk/custom/intents/en/search.yaml b/sdk/custom/intents/en/search.yaml
new file mode 100644
index 00000000..1469f390
--- /dev/null
+++ b/sdk/custom/intents/en/search.yaml
@@ -0,0 +1,20 @@
+trainingPhrases:
+- search for a book
+- search for a book by ($query 'Ernest Hemingway' auto=false)
+- I want to search for a book
+- search for a specific book
+- I am looking for ($query 'The Little Prince by Antoine de Saint-Exupéry' auto=false)
+- search
+- find
+- search for
+- I am looking for a book ($query 'The Little Prince by Antoine de Saint-Exupéry'
+ auto=false)
+- I want to listen ($query 'this book title' auto=false)
+- I want to listen ($query 'this book by this author name' auto=false)
+- search ($query 'Wild by Cheryl Strayed' auto=false)
+- I want to search ($query 'The Little Prince by Antoine de Saint-Exupéry' auto=false)
+- I am looking for a book by ($query 'author' auto=false)
+- I want to search a book
+- search a title
+- search a book
+- search
diff --git a/sdk/custom/intents/en/search_query.yaml b/sdk/custom/intents/en/search_query.yaml
new file mode 100644
index 00000000..a0564f23
--- /dev/null
+++ b/sdk/custom/intents/en/search_query.yaml
@@ -0,0 +1,4 @@
+trainingPhrases:
+- ($query 'To kill a mockingbird by Harper Lee' auto=false)
+- ($query 'Wild by Cheryl Strayed' auto=false)
+- ($query 'The Little Prince by Antoine de Saint-Exupéry' auto=false)
diff --git a/sdk/custom/intents/en/selects_book.yaml b/sdk/custom/intents/en/selects_book.yaml
new file mode 100644
index 00000000..5656aaba
--- /dev/null
+++ b/sdk/custom/intents/en/selects_book.yaml
@@ -0,0 +1,16 @@
+trainingPhrases:
+- ($number 'four' auto=true)
+- ($number 'five' auto=true)
+- number ($number 'five' auto=true)
+- number ($number 'four' auto=true)
+- number ($number 'three' auto=true)
+- the ($number 'fifth' auto=false)
+- the ($number 'fourth' auto=false)
+- the ($number 'first' auto=false)
+- the ($number 'second' auto=false)
+- the ($number 'third' auto=false)
+- ($number 'three' auto=true)
+- ($number 'two' auto=true)
+- ($number 'one' auto=false)
+- number ($number 'two' auto=false)
+- number ($number 'one' auto=false)
diff --git a/sdk/custom/intents/en/yes.yaml b/sdk/custom/intents/en/yes.yaml
new file mode 100644
index 00000000..60b9c8ab
--- /dev/null
+++ b/sdk/custom/intents/en/yes.yaml
@@ -0,0 +1,4 @@
+trainingPhrases:
+- "y"
+- yep
+- "yes"
diff --git a/sdk/prod/custom/intents/enter_member_space_lvl1.yaml b/sdk/custom/intents/enter_member_space_lvl1.yaml
similarity index 100%
rename from sdk/prod/custom/intents/enter_member_space_lvl1.yaml
rename to sdk/custom/intents/enter_member_space_lvl1.yaml
diff --git a/sdk/prod/custom/intents/get_info_association_lvl1.yaml b/sdk/custom/intents/get_info_association_lvl1.yaml
similarity index 100%
rename from sdk/prod/custom/intents/get_info_association_lvl1.yaml
rename to sdk/custom/intents/get_info_association_lvl1.yaml
diff --git a/sdk/custom/intents/help.yaml b/sdk/custom/intents/help.yaml
new file mode 100644
index 00000000..61394d5c
--- /dev/null
+++ b/sdk/custom/intents/help.yaml
@@ -0,0 +1,4 @@
+trainingPhrases:
+- aide
+- aide moi
+- de l'aide
diff --git a/sdk/prod/custom/intents/i_want_to_listen_lvl3.yaml b/sdk/custom/intents/i_want_to_listen_lvl3.yaml
similarity index 100%
rename from sdk/prod/custom/intents/i_want_to_listen_lvl3.yaml
rename to sdk/custom/intents/i_want_to_listen_lvl3.yaml
diff --git a/sdk/custom/intents/learn_more.yaml b/sdk/custom/intents/learn_more.yaml
new file mode 100644
index 00000000..e193efdc
--- /dev/null
+++ b/sdk/custom/intents/learn_more.yaml
@@ -0,0 +1,4 @@
+trainingPhrases:
+- en apprendre plus
+- en savoir plus
+- information
diff --git a/sdk/custom/intents/link_account.yaml b/sdk/custom/intents/link_account.yaml
new file mode 100644
index 00000000..1de587a0
--- /dev/null
+++ b/sdk/custom/intents/link_account.yaml
@@ -0,0 +1,3 @@
+trainingPhrases:
+- je veux me connecter
+- me connecter
diff --git a/sdk/prod/custom/intents/listen_audiobook_lvl1.yaml b/sdk/custom/intents/listen_audiobook_lvl1.yaml
similarity index 100%
rename from sdk/prod/custom/intents/listen_audiobook_lvl1.yaml
rename to sdk/custom/intents/listen_audiobook_lvl1.yaml
diff --git a/sdk/prod/custom/intents/listen_audiobook_lvl2.yaml b/sdk/custom/intents/listen_audiobook_lvl2.yaml
similarity index 100%
rename from sdk/prod/custom/intents/listen_audiobook_lvl2.yaml
rename to sdk/custom/intents/listen_audiobook_lvl2.yaml
diff --git a/sdk/custom/intents/listen_toc.yaml b/sdk/custom/intents/listen_toc.yaml
new file mode 100644
index 00000000..68285400
--- /dev/null
+++ b/sdk/custom/intents/listen_toc.yaml
@@ -0,0 +1,5 @@
+trainingPhrases:
+- table des matières
+- lis la table des matières
+- lis moi la table des matières
+- lis moi la toc
diff --git a/sdk/custom/intents/maybe_later.yaml b/sdk/custom/intents/maybe_later.yaml
new file mode 100644
index 00000000..59497421
--- /dev/null
+++ b/sdk/custom/intents/maybe_later.yaml
@@ -0,0 +1,3 @@
+trainingPhrases:
+- plus tard
+- peut être plus tard
diff --git a/sdk/custom/intents/membership.yaml b/sdk/custom/intents/membership.yaml
new file mode 100644
index 00000000..bbe7b193
--- /dev/null
+++ b/sdk/custom/intents/membership.yaml
@@ -0,0 +1,2 @@
+trainingPhrases:
+- espace membre
diff --git a/sdk/custom/intents/menu.yaml b/sdk/custom/intents/menu.yaml
new file mode 100644
index 00000000..fade5c08
--- /dev/null
+++ b/sdk/custom/intents/menu.yaml
@@ -0,0 +1,3 @@
+trainingPhrases:
+- revenir au menu
+- menu
diff --git a/sdk/custom/intents/next.yaml b/sdk/custom/intents/next.yaml
new file mode 100644
index 00000000..79a4e281
--- /dev/null
+++ b/sdk/custom/intents/next.yaml
@@ -0,0 +1,2 @@
+trainingPhrases:
+- suivant
diff --git a/sdk/test/custom/intents/no.yaml b/sdk/custom/intents/no.yaml
similarity index 85%
rename from sdk/test/custom/intents/no.yaml
rename to sdk/custom/intents/no.yaml
index 873ac739..47ed4273 100644
--- a/sdk/test/custom/intents/no.yaml
+++ b/sdk/custom/intents/no.yaml
@@ -2,4 +2,3 @@ trainingPhrases:
- "n"
- non
- "no"
-- nop
diff --git a/sdk/custom/intents/player_prequel_back.yaml b/sdk/custom/intents/player_prequel_back.yaml
new file mode 100644
index 00000000..a33c3b40
--- /dev/null
+++ b/sdk/custom/intents/player_prequel_back.yaml
@@ -0,0 +1,5 @@
+trainingPhrases:
+- Revenir aux sélections
+- Revenir aux collections
+- Revenir à la liste
+- revenir à la liste
diff --git a/sdk/custom/intents/player_prequel_resume.yaml b/sdk/custom/intents/player_prequel_resume.yaml
new file mode 100644
index 00000000..ba4d8cf1
--- /dev/null
+++ b/sdk/custom/intents/player_prequel_resume.yaml
@@ -0,0 +1,8 @@
+trainingPhrases:
+- Reprends
+- Reprends la lecture
+- Reprendre ma lecture
+- relancer la lecture
+- reprendre la lecture
+- lecture
+- Reprendre la lecture
diff --git a/sdk/custom/intents/player_prequel_start.yaml b/sdk/custom/intents/player_prequel_start.yaml
new file mode 100644
index 00000000..af23681f
--- /dev/null
+++ b/sdk/custom/intents/player_prequel_start.yaml
@@ -0,0 +1,4 @@
+trainingPhrases:
+- commencer la lecture
+- démarrer
+- démarrer la lecture
diff --git a/sdk/custom/intents/player_prequel_summary.yaml b/sdk/custom/intents/player_prequel_summary.yaml
new file mode 100644
index 00000000..48c4f922
--- /dev/null
+++ b/sdk/custom/intents/player_prequel_summary.yaml
@@ -0,0 +1,5 @@
+trainingPhrases:
+- information
+- info
+- écouter le résumé
+- résumé
diff --git a/sdk/custom/intents/recent_books.yaml b/sdk/custom/intents/recent_books.yaml
new file mode 100644
index 00000000..54fed1ac
--- /dev/null
+++ b/sdk/custom/intents/recent_books.yaml
@@ -0,0 +1,7 @@
+trainingPhrases:
+- mes livres récents
+- derniers livres
+- livres récents
+- voir mes derniers livres
+- voir mes livres récents
+- derniers livres lus
diff --git a/sdk/prod/custom/intents/remaing_time_player.yaml b/sdk/custom/intents/remaing_time_player.yaml
similarity index 100%
rename from sdk/prod/custom/intents/remaing_time_player.yaml
rename to sdk/custom/intents/remaing_time_player.yaml
diff --git a/sdk/custom/intents/repeat.yaml b/sdk/custom/intents/repeat.yaml
new file mode 100644
index 00000000..775ce064
--- /dev/null
+++ b/sdk/custom/intents/repeat.yaml
@@ -0,0 +1,4 @@
+trainingPhrases:
+- répéter
+- répête
+- je ne comprends pas
\ No newline at end of file
diff --git a/sdk/prod/custom/intents/resume_audiobook_lvl2.yaml b/sdk/custom/intents/resume_audiobook_lvl2.yaml
similarity index 81%
rename from sdk/prod/custom/intents/resume_audiobook_lvl2.yaml
rename to sdk/custom/intents/resume_audiobook_lvl2.yaml
index aab5315b..838b6349 100644
--- a/sdk/prod/custom/intents/resume_audiobook_lvl2.yaml
+++ b/sdk/custom/intents/resume_audiobook_lvl2.yaml
@@ -1,7 +1,3 @@
-parameters:
-- name: number1
- type:
- name: actions.type.Number
trainingPhrases:
- lecture d'($number1 'un' auto=true) livre
- lecture de mon livre
diff --git a/sdk/test/custom/intents/resume_listening_player.yaml b/sdk/custom/intents/resume_listening_player.yaml
similarity index 73%
rename from sdk/test/custom/intents/resume_listening_player.yaml
rename to sdk/custom/intents/resume_listening_player.yaml
index 2cd0b674..d03ff0d7 100644
--- a/sdk/test/custom/intents/resume_listening_player.yaml
+++ b/sdk/custom/intents/resume_listening_player.yaml
@@ -1,3 +1,5 @@
trainingPhrases:
+- continue
+- reprends
- reprend la lecture
- reprendre la lecture
diff --git a/sdk/custom/intents/search.yaml b/sdk/custom/intents/search.yaml
new file mode 100644
index 00000000..8b338ae1
--- /dev/null
+++ b/sdk/custom/intents/search.yaml
@@ -0,0 +1,20 @@
+parameters:
+- name: query
+ type:
+ name: string
+trainingPhrases:
+- chercher un livre
+- chercher un livre audio
+- chercher ($number1 'un' auto=true) nouveau livre
+- chercher
+- je veux chercher un livre audio
+- je veux chercher un livre
+- recherche un livre
+- recherche
+- je veux rechercher un livre
+- Je recherche ($query 'Le Petit Prince par Antoine de Saint-Exupéry' auto=false)
+- Cherche ($query 'La Peste' auto=false)
+- Recherche ($query 'La Horla' auto=false)
+- Je veux écouter ($query 'Ce livre' auto=false)
+- Je veux lire ($query 'Ce livre par cet auteur' auto=false)
+- Je cherche un livre écrit par ($query 'Auteur' auto=false)
diff --git a/sdk/custom/intents/search_query.yaml b/sdk/custom/intents/search_query.yaml
new file mode 100644
index 00000000..13277820
--- /dev/null
+++ b/sdk/custom/intents/search_query.yaml
@@ -0,0 +1,7 @@
+parameters:
+- name: query
+ type:
+ name: string
+trainingPhrases:
+- ($query 'La Peste de Camus' auto=false)
+- ($query 'Le Petit Prince par Antoine de Saint-Exupéry' auto=false)
diff --git a/sdk/custom/intents/selection_all_publication_lvl3.yaml b/sdk/custom/intents/selection_all_publication_lvl3.yaml
new file mode 100644
index 00000000..97be19f7
--- /dev/null
+++ b/sdk/custom/intents/selection_all_publication_lvl3.yaml
@@ -0,0 +1,2 @@
+trainingPhrases:
+- toute les publications
diff --git a/sdk/prod/custom/intents/selection_audiobook_lvl2.yaml b/sdk/custom/intents/selection_audiobook_lvl2.yaml
similarity index 100%
rename from sdk/prod/custom/intents/selection_audiobook_lvl2.yaml
rename to sdk/custom/intents/selection_audiobook_lvl2.yaml
diff --git a/sdk/prod/custom/intents/selection_genre_lvl3.yaml b/sdk/custom/intents/selection_genre_lvl3.yaml
similarity index 100%
rename from sdk/prod/custom/intents/selection_genre_lvl3.yaml
rename to sdk/custom/intents/selection_genre_lvl3.yaml
diff --git a/sdk/prod/custom/intents/selection_my_list_lvl3.yaml b/sdk/custom/intents/selection_my_list_lvl3.yaml
similarity index 100%
rename from sdk/prod/custom/intents/selection_my_list_lvl3.yaml
rename to sdk/custom/intents/selection_my_list_lvl3.yaml
diff --git a/sdk/prod/custom/intents/selection_thematic_list_lvl3.yaml b/sdk/custom/intents/selection_thematic_list_lvl3.yaml
similarity index 100%
rename from sdk/prod/custom/intents/selection_thematic_list_lvl3.yaml
rename to sdk/custom/intents/selection_thematic_list_lvl3.yaml
diff --git a/sdk/custom/intents/selects_book.yaml b/sdk/custom/intents/selects_book.yaml
new file mode 100644
index 00000000..2bde62a1
--- /dev/null
+++ b/sdk/custom/intents/selects_book.yaml
@@ -0,0 +1,25 @@
+parameters:
+- name: number
+ type:
+ name: actions.type.Number
+trainingPhrases:
+- Le ($number 'premier' auto=false)
+- Le ($number 'second' auto=false)
+- Le ($number 'troisième' auto=false)
+- Le ($number 'quatrième' auto=false)
+- Le ($number 'cinquième' auto=false)
+- Numéro ($number 'un' auto=false)
+- Numéro ($number 'deux' auto=false)
+- Numéro ($number 'trois' auto=false)
+- Numéro ($number 'quatre' auto=false)
+- Numéro ($number 'cinq' auto=false)
+- Le numéro ($number 'un' auto=false)
+- Le numéro ($number 'deux' auto=false)
+- Le numéro ($number 'trois' auto=false)
+- Le numéro ($number 'quatre' auto=false)
+- Le numéro ($number 'cinq' auto=false)
+- ($number 'un' auto=false)
+- ($number 'deux' auto=false)
+- ($number 'trois' auto=false)
+- ($number 'quatre' auto=false)
+- ($number 'cinq' auto=false)
diff --git a/sdk/custom/intents/stop.yaml b/sdk/custom/intents/stop.yaml
new file mode 100644
index 00000000..432c35ff
--- /dev/null
+++ b/sdk/custom/intents/stop.yaml
@@ -0,0 +1,3 @@
+trainingPhrases:
+- revenir au menu précédent
+- partir de là
diff --git a/sdk/custom/intents/test_player_sdk.yaml b/sdk/custom/intents/test_player_sdk.yaml
new file mode 100644
index 00000000..69b07339
--- /dev/null
+++ b/sdk/custom/intents/test_player_sdk.yaml
@@ -0,0 +1,7 @@
+parameters:
+- name: number
+ type:
+ name: actions.type.Number
+trainingPhrases:
+- test player sdk ($number '123' auto=false)
+- test player ($number '123' auto=true)
diff --git a/sdk/custom/intents/test_setup_sdk.yaml b/sdk/custom/intents/test_setup_sdk.yaml
new file mode 100644
index 00000000..dd25c1d1
--- /dev/null
+++ b/sdk/custom/intents/test_setup_sdk.yaml
@@ -0,0 +1,8 @@
+parameters:
+- name: number
+ type:
+ name: actions.type.Number
+trainingPhrases:
+- setup test ($number '123' auto=false)
+- test setup sdk ($number '123' auto=true)
+- setup test sdk ($number '123' auto=true)
diff --git a/sdk/prod/custom/intents/test_webhook.yaml b/sdk/custom/intents/test_webhook.yaml
similarity index 100%
rename from sdk/prod/custom/intents/test_webhook.yaml
rename to sdk/custom/intents/test_webhook.yaml
diff --git a/sdk/test/custom/intents/yes.yaml b/sdk/custom/intents/yes.yaml
similarity index 57%
rename from sdk/test/custom/intents/yes.yaml
rename to sdk/custom/intents/yes.yaml
index 92072da0..0e2cde57 100644
--- a/sdk/test/custom/intents/yes.yaml
+++ b/sdk/custom/intents/yes.yaml
@@ -1,6 +1,3 @@
trainingPhrases:
-- "y"
-- ui
-- ouep
-- ouais
- oui
+- ui
diff --git a/sdk/custom/scenes/ask_to_resume_listening_at_last_offset.yaml b/sdk/custom/scenes/ask_to_resume_listening_at_last_offset.yaml
new file mode 100644
index 00000000..84eb2ac0
--- /dev/null
+++ b/sdk/custom/scenes/ask_to_resume_listening_at_last_offset.yaml
@@ -0,0 +1,9 @@
+intentEvents:
+- handler:
+ webhookHandler: ask_to_resume_listening_at_last_offset__intent__yes
+ intent: "yes"
+- handler:
+ webhookHandler: ask_to_resume_listening_at_last_offset__intent__no
+ intent: "no"
+onEnter:
+ webhookHandler: ask_to_resume_listening_at_last_offset
diff --git a/sdk/custom/scenes/collections.yaml b/sdk/custom/scenes/collections.yaml
new file mode 100644
index 00000000..83d250a4
--- /dev/null
+++ b/sdk/custom/scenes/collections.yaml
@@ -0,0 +1,33 @@
+intentEvents:
+- handler:
+ webhookHandler: collections__intent__bookshelf
+ intent: bookshelf
+- handler:
+ webhookHandler: collections__intent__by_genre
+ intent: by_genre
+- handler:
+ webhookHandler: collections__intent__by_theme
+ intent: by_theme
+- handler:
+ webhookHandler: collections__intent__help
+ intent: help
+- handler:
+ webhookHandler: collections__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: collections__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: collections__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: collections__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: collections__intent__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: collections__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: collections__on_enter
diff --git a/sdk/custom/scenes/home_lvl1.yaml b/sdk/custom/scenes/home_lvl1.yaml
new file mode 100644
index 00000000..e9a83216
--- /dev/null
+++ b/sdk/custom/scenes/home_lvl1.yaml
@@ -0,0 +1,18 @@
+intentEvents:
+- handler:
+ webhookHandler: home_lvl1__intent__get_info_association_lvl1
+ intent: get_info_association_lvl1
+- handler:
+ webhookHandler: home_lvl1__intent__enter_member_space_lvl1
+ intent: enter_member_space_lvl1
+- handler:
+ webhookHandler: home_lvl1__intent__resume_listening_player
+ intent: resume_listening_player
+- handler:
+ webhookHandler: home_lvl1__intent__listen_audiobook_lvl1
+ intent: listen_audiobook_lvl1
+- handler:
+ webhookHandler: test_webhook
+ intent: test_webhook
+onEnter:
+ webhookHandler: home_lvl1
diff --git a/sdk/prod/custom/scenes/home_lvl1_AccountLinking.yaml b/sdk/custom/scenes/home_lvl1_AccountLinking.yaml
similarity index 100%
rename from sdk/prod/custom/scenes/home_lvl1_AccountLinking.yaml
rename to sdk/custom/scenes/home_lvl1_AccountLinking.yaml
diff --git a/sdk/custom/scenes/home_members_lvl2.yaml b/sdk/custom/scenes/home_members_lvl2.yaml
new file mode 100644
index 00000000..b0d4ccf9
--- /dev/null
+++ b/sdk/custom/scenes/home_members_lvl2.yaml
@@ -0,0 +1,30 @@
+intentEvents:
+- handler:
+ webhookHandler: home_members_lvl2__intent__listen_audiobook_lvl2
+ intent: listen_audiobook_lvl2
+- handler:
+ webhookHandler: home_members_lvl2__intent__resume_audiobook_lvl2
+ intent: resume_audiobook_lvl2
+- handler:
+ webhookHandler: home_members__intent__selection_audiobook_lvl2
+ intent: selection_audiobook_lvl2
+- handler:
+ webhookHandler: test_setup_sdk
+ intent: test_setup_sdk
+ transitionToScene: home_members_lvl2
+- handler:
+ webhookHandler: test_player_sdk
+ intent: test_player_sdk
+ transitionToScene: home_members_lvl2
+- handler:
+ webhookHandler: test_webhook
+ intent: test_webhook
+- intent: menu
+ transitionToScene: home_members_lvl2
+- handler:
+ webhookHandler: selection_lvl3__intent__selection_my_list_lvl3
+ intent: selection_my_list_lvl3
+- intent: listen_toc
+ transitionToScene: player_toc
+onEnter:
+ webhookHandler: home_members_lvl2
diff --git a/sdk/custom/scenes/home_new_user.yaml b/sdk/custom/scenes/home_new_user.yaml
new file mode 100644
index 00000000..b1add435
--- /dev/null
+++ b/sdk/custom/scenes/home_new_user.yaml
@@ -0,0 +1,34 @@
+intentEvents:
+- handler:
+ webhookHandler: home_new_user__intent__help
+ intent: help
+- handler:
+ webhookHandler: home_new_user__intent__maybe_later
+ intent: maybe_later
+- handler:
+ webhookHandler: home_new_user__intent__no
+ intent: "no"
+- handler:
+ webhookHandler: home_new_user__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: home_new_user__intent__yes
+ intent: "yes"
+ transitionToScene: home_new_user_AccountLinking
+- handler:
+ webhookHandler: home_new_user__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: home_new_user__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: home_new_user__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: home_new_user__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: home_new_user__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: home_new_user__on_enter
diff --git a/sdk/test/custom/scenes/home_lvl1_AccountLinking.yaml b/sdk/custom/scenes/home_new_user_AccountLinking.yaml
similarity index 79%
rename from sdk/test/custom/scenes/home_lvl1_AccountLinking.yaml
rename to sdk/custom/scenes/home_new_user_AccountLinking.yaml
index a3fb2cf1..4772059e 100644
--- a/sdk/test/custom/scenes/home_lvl1_AccountLinking.yaml
+++ b/sdk/custom/scenes/home_new_user_AccountLinking.yaml
@@ -1,10 +1,10 @@
conditionalEvents:
- condition: session.params.AccountLinkingSlot == "LINKED"
- transitionToScene: home_members_lvl2
+ transitionToScene: home_user
- condition: session.params.AccountLinkingSlot == "ERROR"
- transitionToScene: home_lvl1
+ transitionToScene: actions.scene.END_CONVERSATION
- condition: session.params.AccountLinkingSlot == "REJECTED"
- transitionToScene: home_lvl1
+ transitionToScene: actions.scene.END_CONVERSATION
slots:
- commitBehavior:
writeSessionParam: AccountLinkingSlot
diff --git a/sdk/custom/scenes/home_new_user_maybe_later.yaml b/sdk/custom/scenes/home_new_user_maybe_later.yaml
new file mode 100644
index 00000000..e16e4b41
--- /dev/null
+++ b/sdk/custom/scenes/home_new_user_maybe_later.yaml
@@ -0,0 +1,33 @@
+intentEvents:
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__learn_more
+ intent: learn_more
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__link_account
+ intent: link_account
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__help
+ intent: help
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: home_new_user_maybe_later__on_enter
diff --git a/sdk/custom/scenes/home_new_user_no.yaml b/sdk/custom/scenes/home_new_user_no.yaml
new file mode 100644
index 00000000..88c467da
--- /dev/null
+++ b/sdk/custom/scenes/home_new_user_no.yaml
@@ -0,0 +1,33 @@
+intentEvents:
+- handler:
+ webhookHandler: home_new_user_no__intent__yes
+ intent: "yes"
+- handler:
+ webhookHandler: home_new_user_no__intent__no
+ intent: "no"
+- handler:
+ webhookHandler: home_new_user_no__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: home_new_user_no__intent__help
+ intent: help
+- handler:
+ webhookHandler: home_new_user_no__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: home_new_user_no__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: home_new_user_no__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: home_new_user_no__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: home_new_user_no__intent__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: home_new_user_no__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: home_new_user_no__on_enter
diff --git a/sdk/custom/scenes/home_user.yaml b/sdk/custom/scenes/home_user.yaml
new file mode 100644
index 00000000..2e143efd
--- /dev/null
+++ b/sdk/custom/scenes/home_user.yaml
@@ -0,0 +1,42 @@
+intentEvents:
+- handler:
+ webhookHandler: home_user__intent__help
+ intent: help
+- handler:
+ webhookHandler: home_user__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: home_user__intent__bookshelf
+ intent: bookshelf
+- handler:
+ webhookHandler: home_user__intent__collections
+ intent: collections
+- handler:
+ webhookHandler: home_user__intent__search
+ intent: search
+- handler:
+ webhookHandler: home_user__intent__recent_books
+ intent: recent_books
+- handler:
+ webhookHandler: home_user__intent__current_book
+ intent: current_book
+- handler:
+ webhookHandler: home_user__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: home_user__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: home_user__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: home_user__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: home_user__intent__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: home_user__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: home_user__on_enter
diff --git a/sdk/custom/scenes/info.yaml b/sdk/custom/scenes/info.yaml
new file mode 100644
index 00000000..f1538109
--- /dev/null
+++ b/sdk/custom/scenes/info.yaml
@@ -0,0 +1,38 @@
+intentEvents:
+- handler:
+ webhookHandler: info__intent__yes
+ intent: "yes"
+ transitionToScene: actions.scene.END_CONVERSATION
+- handler:
+ webhookHandler: info__intent__help
+ intent: help
+- handler:
+ webhookHandler: info__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: info__intent__yes
+ intent: membership
+ transitionToScene: actions.scene.END_CONVERSATION
+- handler:
+ webhookHandler: info__intent__no
+ intent: "no"
+- handler:
+ webhookHandler: info__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: info__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: info__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: info__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: info__intent__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: info__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: info__on_enter
diff --git a/sdk/custom/scenes/player.yaml b/sdk/custom/scenes/player.yaml
new file mode 100644
index 00000000..e9c731a7
--- /dev/null
+++ b/sdk/custom/scenes/player.yaml
@@ -0,0 +1,15 @@
+intentEvents:
+- handler:
+ webhookHandler: player__intent__media_status_finished
+ intent: actions.intent.MEDIA_STATUS_FINISHED
+- handler:
+ webhookHandler: player__intent__media_status_paused
+ intent: actions.intent.MEDIA_STATUS_PAUSED
+- handler:
+ webhookHandler: player__intent__media_status_stopped
+ intent: actions.intent.MEDIA_STATUS_STOPPED
+- handler:
+ webhookHandler: player__intent__media_status_failed
+ intent: actions.intent.MEDIA_STATUS_FAILED
+onEnter:
+ webhookHandler: player__on_enter
diff --git a/sdk/custom/scenes/player_prequel.yaml b/sdk/custom/scenes/player_prequel.yaml
new file mode 100644
index 00000000..8ca05d70
--- /dev/null
+++ b/sdk/custom/scenes/player_prequel.yaml
@@ -0,0 +1,39 @@
+intentEvents:
+- handler:
+ webhookHandler: player_prequel__intent__help
+ intent: help
+- handler:
+ webhookHandler: player_prequel__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: player_prequel__intent__player_prequel_back
+ intent: player_prequel_back
+- handler:
+ webhookHandler: player_prequel__intent__player_prequel_resume
+ intent: player_prequel_resume
+- handler:
+ webhookHandler: player_prequel__intent__player_prequel_start
+ intent: player_prequel_start
+- handler:
+ webhookHandler: player_prequel__intent__player_prequel_summary
+ intent: player_prequel_summary
+- handler:
+ webhookHandler: player_prequel__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: player_prequel__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: player_prequel__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: player_prequel__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: player_prequel__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: player_prequel__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: player_prequel__on_enter
diff --git a/sdk/custom/scenes/player_toc.yaml b/sdk/custom/scenes/player_toc.yaml
new file mode 100644
index 00000000..7cfb9b62
--- /dev/null
+++ b/sdk/custom/scenes/player_toc.yaml
@@ -0,0 +1,19 @@
+intentEvents:
+- handler:
+ webhookHandler: player_toc__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: player_toc__intent__next
+ intent: next
+- handler:
+ webhookHandler: player_toc__intent__resume_listening_player
+ intent: resume_listening_player
+onEnter:
+ webhookHandler: player_toc
+onSlotUpdated:
+ webhookHandler: player_toc__slot__number
+slots:
+- name: number
+ required: true
+ type:
+ name: actions.type.Number
diff --git a/sdk/custom/scenes/search.yaml b/sdk/custom/scenes/search.yaml
new file mode 100644
index 00000000..4dd62b61
--- /dev/null
+++ b/sdk/custom/scenes/search.yaml
@@ -0,0 +1,9 @@
+intentEvents:
+- handler:
+ webhookHandler: search__intent__search_query
+ intent: search_query
+- handler:
+ webhookHandler: search__intent__search
+ intent: search
+onEnter:
+ webhookHandler: search__on_enter
\ No newline at end of file
diff --git a/sdk/prod/custom/scenes/select_pub_after_selection.yaml b/sdk/custom/scenes/select_group.yaml
similarity index 79%
rename from sdk/prod/custom/scenes/select_pub_after_selection.yaml
rename to sdk/custom/scenes/select_group.yaml
index 10d12712..203b7eb2 100644
--- a/sdk/prod/custom/scenes/select_pub_after_selection.yaml
+++ b/sdk/custom/scenes/select_group.yaml
@@ -1,6 +1,10 @@
intentEvents:
-- intent: resume_listening_player
- transitionToScene: select_pub_after_selection
+- handler:
+ webhookHandler: select_group__intent__stop
+ intent: stop
+- handler:
+ webhookHandler: select_group__intent__menu
+ intent: menu
- handler:
staticPrompt:
candidates:
@@ -50,18 +54,11 @@ intentEvents:
- speech: je n’ai pas compris le numéro
intent: actions.intent.NO_INPUT_FINAL
onEnter:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Pour choisir une publication dite son numéro
+ webhookHandler: select_group
onSlotUpdated:
- webhookHandler: select_publication_number_after_selection
+ webhookHandler: select_group__slot__number
slots:
-- commitBehavior:
- writeSessionParam: number
- name: number
+- name: number
required: true
type:
name: actions.type.Number
diff --git a/sdk/prod/custom/scenes/select_pub_after_search.yaml b/sdk/custom/scenes/select_publication.yaml
similarity index 74%
rename from sdk/prod/custom/scenes/select_pub_after_search.yaml
rename to sdk/custom/scenes/select_publication.yaml
index f6dc9f7b..d2cab1b4 100644
--- a/sdk/prod/custom/scenes/select_pub_after_search.yaml
+++ b/sdk/custom/scenes/select_publication.yaml
@@ -1,6 +1,18 @@
intentEvents:
-- intent: resume_listening_player
- transitionToScene: select_pub_after_search
+- handler:
+ webhookHandler: select_publication__intent__resume_listening_player
+ intent: resume_listening_player
+- handler:
+ webhookHandler: select_publication__intent__stop
+ intent: stop
+- handler:
+ webhookHandler: select_publication__intent__next
+ intent: next
+- handler:
+ webhookHandler: select_publication__intent__repeat
+ intent: repeat
+- intent: menu
+ transitionToScene: home_members_lvl2
- handler:
staticPrompt:
candidates:
@@ -52,18 +64,11 @@ intentEvents:
intent: actions.intent.NO_INPUT_FINAL
transitionToScene: search
onEnter:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Pour choisir une publication dite son numéro
+ webhookHandler: select_publication
onSlotUpdated:
- webhookHandler: select_publication_number_after_search
+ webhookHandler: select_publication__slot__number
slots:
-- commitBehavior:
- writeSessionParam: number
- name: number
+- name: number
required: true
type:
name: actions.type.Number
diff --git a/sdk/custom/scenes/selection.yaml b/sdk/custom/scenes/selection.yaml
new file mode 100644
index 00000000..60f3e272
--- /dev/null
+++ b/sdk/custom/scenes/selection.yaml
@@ -0,0 +1,33 @@
+intentEvents:
+- handler:
+ webhookHandler: selection__intent__selects_book
+ intent: selects_book
+- handler:
+ webhookHandler: selection__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: selection__intent__another_one
+ intent: another_one
+- handler:
+ webhookHandler: selection__intent__help
+ intent: help
+- handler:
+ webhookHandler: selection__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: selection__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: selection__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: selection__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: selection__intent__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: selection__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: selection__on_enter
diff --git a/sdk/custom/scenes/selection_lvl3.yaml b/sdk/custom/scenes/selection_lvl3.yaml
new file mode 100644
index 00000000..72a33a36
--- /dev/null
+++ b/sdk/custom/scenes/selection_lvl3.yaml
@@ -0,0 +1,15 @@
+intentEvents:
+- handler:
+ webhookHandler: selection_lvl3__intent__selection_genre_lvl3
+ intent: selection_genre_lvl3
+- handler:
+ webhookHandler: selection_lvl3__intent__selection_thematic_list_lvl3
+ intent: selection_thematic_list_lvl3
+- handler:
+ webhookHandler: selection_lvl3__intent__selection_my_list_lvl3
+ intent: selection_my_list_lvl3
+- handler:
+ webhookHandler: selection_lvl3__intent__selection_all_publication_lvl3
+ intent: selection_all_publication_lvl3
+onEnter:
+ webhookHandler: selection_lvl3
diff --git a/sdk/prod/custom/types/string.yaml b/sdk/custom/types/en/string.yaml
similarity index 100%
rename from sdk/prod/custom/types/string.yaml
rename to sdk/custom/types/en/string.yaml
diff --git a/sdk/test/custom/types/string.yaml b/sdk/custom/types/string.yaml
similarity index 100%
rename from sdk/test/custom/types/string.yaml
rename to sdk/custom/types/string.yaml
diff --git a/sdk/prod/manifest.yaml b/sdk/manifest.yaml
similarity index 100%
rename from sdk/prod/manifest.yaml
rename to sdk/manifest.yaml
diff --git a/sdk/prod/custom/global/actions.intent.CANCEL.yaml b/sdk/prod/custom/global/actions.intent.CANCEL.yaml
deleted file mode 100644
index 22c095fb..00000000
--- a/sdk/prod/custom/global/actions.intent.CANCEL.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Au revoir et a bientôt
- webhookHandler: cancel
-transitionToScene: actions.scene.END_CONVERSATION
diff --git a/sdk/prod/custom/global/actions.intent.MAIN.yaml b/sdk/prod/custom/global/actions.intent.MAIN.yaml
deleted file mode 100644
index 463025af..00000000
--- a/sdk/prod/custom/global/actions.intent.MAIN.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Bienvenue dans l'application d'écoute de livre audio valentin
- hauy
-transitionToScene: home_lvl1
diff --git a/sdk/prod/custom/global/actions.intent.NO_INPUT_1.yaml b/sdk/prod/custom/global/actions.intent.NO_INPUT_1.yaml
deleted file mode 100644
index de975f82..00000000
--- a/sdk/prod/custom/global/actions.intent.NO_INPUT_1.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n'ai pas entendu. Que voulez-vous dire ?
diff --git a/sdk/prod/custom/global/actions.intent.NO_INPUT_2.yaml b/sdk/prod/custom/global/actions.intent.NO_INPUT_2.yaml
deleted file mode 100644
index 59e57245..00000000
--- a/sdk/prod/custom/global/actions.intent.NO_INPUT_2.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Que dite-vous ?
diff --git a/sdk/prod/custom/global/actions.intent.NO_INPUT_FINAL.yaml b/sdk/prod/custom/global/actions.intent.NO_INPUT_FINAL.yaml
deleted file mode 100644
index 63087279..00000000
--- a/sdk/prod/custom/global/actions.intent.NO_INPUT_FINAL.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Je quitte l'application
-transitionToScene: actions.scene.END_CONVERSATION
diff --git a/sdk/prod/custom/global/actions.intent.NO_MATCH_1.yaml b/sdk/prod/custom/global/actions.intent.NO_MATCH_1.yaml
deleted file mode 100644
index 166efc70..00000000
--- a/sdk/prod/custom/global/actions.intent.NO_MATCH_1.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n'ai pas compris. Que voulez-vous dire ?
diff --git a/sdk/prod/custom/global/actions.intent.NO_MATCH_2.yaml b/sdk/prod/custom/global/actions.intent.NO_MATCH_2.yaml
deleted file mode 100644
index deda0dc7..00000000
--- a/sdk/prod/custom/global/actions.intent.NO_MATCH_2.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n'ai vraiment pas compris. Que voulez-vous dire ?
diff --git a/sdk/prod/custom/global/actions.intent.NO_MATCH_FINAL.yaml b/sdk/prod/custom/global/actions.intent.NO_MATCH_FINAL.yaml
deleted file mode 100644
index 2f8cf92a..00000000
--- a/sdk/prod/custom/global/actions.intent.NO_MATCH_FINAL.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: malheureusement je m'en vais, je ne comprend pas
-transitionToScene: actions.scene.END_CONVERSATION
diff --git a/sdk/prod/custom/intents/resume_listening_player.yaml b/sdk/prod/custom/intents/resume_listening_player.yaml
deleted file mode 100644
index 2cd0b674..00000000
--- a/sdk/prod/custom/intents/resume_listening_player.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-trainingPhrases:
-- reprend la lecture
-- reprendre la lecture
diff --git a/sdk/prod/custom/intents/yes.yaml b/sdk/prod/custom/intents/yes.yaml
deleted file mode 100644
index 92072da0..00000000
--- a/sdk/prod/custom/intents/yes.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-trainingPhrases:
-- "y"
-- ui
-- ouep
-- ouais
-- oui
diff --git a/sdk/prod/custom/scenes/ask_to_resume_listening_at_last_offset.yaml b/sdk/prod/custom/scenes/ask_to_resume_listening_at_last_offset.yaml
deleted file mode 100644
index c575375b..00000000
--- a/sdk/prod/custom/scenes/ask_to_resume_listening_at_last_offset.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-intentEvents:
-- handler:
- webhookHandler: ask_to_resume_listening_at_last_offset__yes
- intent: "yes"
- transitionToScene: player
-- handler:
- webhookHandler: ask_to_resume_listening_at_last_offset__no
- intent: "no"
- transitionToScene: player
-onEnter:
- webhookHandler: ask_to_resume_listening_at_last_offset
diff --git a/sdk/prod/custom/scenes/home_lvl1.yaml b/sdk/prod/custom/scenes/home_lvl1.yaml
deleted file mode 100644
index 4bf88a05..00000000
--- a/sdk/prod/custom/scenes/home_lvl1.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-intentEvents:
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Voici les informations sur l'association
- intent: get_info_association_lvl1
- transitionToScene: home_lvl1
-- intent: enter_member_space_lvl1
- transitionToScene: home_lvl1_AccountLinking
-- intent: resume_listening_player
- transitionToScene: home_lvl1
-- intent: listen_audiobook_lvl1
- transitionToScene: home_lvl1_AccountLinking
-- handler:
- webhookHandler: test_webhook
- intent: test_webhook
- transitionToScene: home_lvl1
-onEnter:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Que voulez-vous faire ? Vous pouvez dire informations ou espace
- membres
- suggestions:
- - title: informations
- - title: espace membres
diff --git a/sdk/prod/custom/scenes/home_members_lvl2.yaml b/sdk/prod/custom/scenes/home_members_lvl2.yaml
deleted file mode 100644
index 2498e69c..00000000
--- a/sdk/prod/custom/scenes/home_members_lvl2.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-intentEvents:
-- handler:
- webhookHandler: ecouter_livre_audio_lvl2
- intent: listen_audiobook_lvl2
- transitionToScene: search
-- handler:
- webhookHandler: reprendre_mon_livre_lvl2
- intent: resume_audiobook_lvl2
- transitionToScene: ask_to_resume_listening_at_last_offset
-- handler:
- webhookHandler: selection_livre_lvl2
- intent: selection_audiobook_lvl2
- transitionToScene: selection_lvl3
-onEnter:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Bienvenue dans l'espace membres. Les commandes possibles sont,
- sélection, lecture, recherche. Que voulez-vous faire ?
- suggestions:
- - title: selection d'un livre
- - title: lecture du dernier livre
- - title: recherche d'un livre
diff --git a/sdk/prod/custom/scenes/player.yaml b/sdk/prod/custom/scenes/player.yaml
deleted file mode 100644
index 06957f78..00000000
--- a/sdk/prod/custom/scenes/player.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-intentEvents:
-- handler:
- webhookHandler: reprendre_la_lecture
- intent: resume_listening_player
-- handler:
- webhookHandler: remaining_time
- intent: remaing_time_player
-- handler:
- webhookHandler: media_status
- intent: actions.intent.MEDIA_STATUS_FINISHED
-- handler:
- webhookHandler: media_status
- intent: actions.intent.MEDIA_STATUS_PAUSED
-- handler:
- webhookHandler: media_status
- intent: actions.intent.MEDIA_STATUS_STOPPED
-- handler:
- webhookHandler: media_status
- intent: actions.intent.MEDIA_STATUS_FAILED
-onEnter:
- webhookHandler: player
diff --git a/sdk/prod/custom/scenes/search.yaml b/sdk/prod/custom/scenes/search.yaml
deleted file mode 100644
index 4d95c236..00000000
--- a/sdk/prod/custom/scenes/search.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-conditionalEvents:
-- condition: scene.slots.status == "FINAL"
- handler:
- webhookHandler: search_livre_lvl2
-intentEvents:
-- intent: resume_listening_player
- transitionToScene: search
-onEnter:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Que voulez-vous écouter ? Par exemple Zola
-slots:
-- commitBehavior:
- writeSessionParam: query
- name: query
- required: true
- type:
- name: string
diff --git a/sdk/prod/custom/scenes/selection_lvl3.yaml b/sdk/prod/custom/scenes/selection_lvl3.yaml
deleted file mode 100644
index 583e652a..00000000
--- a/sdk/prod/custom/scenes/selection_lvl3.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-intentEvents:
-- handler:
- webhookHandler: selection_genre_lvl3
- intent: selection_genre_lvl3
-- handler:
- webhookHandler: selection_thematic_list_lvl3
- intent: selection_thematic_list_lvl3
-- handler:
- webhookHandler: selection_my_list_lvl3
- intent: selection_my_list_lvl3
diff --git a/sdk/prod/settings/settings.yaml b/sdk/prod/settings/settings.yaml
deleted file mode 100644
index 3e43f2a0..00000000
--- a/sdk/prod/settings/settings.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-accountLinking:
- appClientId: "1232456"
- authGrantType: IMPLICIT
- authorizationUrl: https://opds-auth-test-server-aplqpqv3wa-ey.a.run.app/implicit/login?lang=fr
- linkingType: OAUTH
-category: EDUCATION_AND_REFERENCE
-defaultLocale: fr
-localizedSettings:
- developerEmail: dev.edrlab@gmail.com
- developerName: edrlab
- displayName: valentin audio
- fullDescription: lis mon live edrlab demo
- privacyPolicyUrl: https://www.edrlab.org/lml-privacy-policy/
- pronunciation: valentin audio
- sampleInvocations:
- - Parler avec valentin audio
- - Connecter avec valentin audio
- - Discuter avec valentin audio
- shortDescription: lis mon livre
- smallLogoImage: https://lh3.googleusercontent.com/IPE84cRJZSbgpkLCNMhJFkP_sbh5e18cYRvn30hVHE6nYNLfQ_9a-opqTKbQNThVPUzo8sfP1_cR
- voice: female_1
-projectId: valentin-4
-testingInstructions: "login: \n\nadmin\nadmin\n\nyou can test with the query \"zola\"
- or \"la guerre des boutons\""
diff --git a/sdk/prod/webhooks/ActionsOnGoogleFulfillment.yaml b/sdk/prod/webhooks/ActionsOnGoogleFulfillment.yaml
deleted file mode 100644
index 814e3d4d..00000000
--- a/sdk/prod/webhooks/ActionsOnGoogleFulfillment.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-handlers:
-- name: cancel
-- name: ecouter_livre_audio_lvl2
-- name: reprendre_mon_livre_lvl2
-- name: media_status
-- name: player
-- name: reprendre_la_lecture
-- name: remaining_time
-- name: selection_livre_lvl2
-- name: select_publication_number_after_search
-- name: select_publication_number_after_selection
-- name: test_webhook
-- name: search_livre_lvl2
-- name: ask_to_resume_listening_at_last_offset
-- name: ask_to_resume_listening_at_last_offset__yes
-- name: ask_to_resume_listening_at_last_offset__no
-- name: selection_genre_lvl3
-- name: selection_thematic_list_lvl3
-- name: selection_my_list_lvl3
-httpsEndpoint:
- baseUrl: https://us-central1-valentin-4.cloudfunctions.net/ActionsOnGoogleFulfillment
- endpointApiVersion: 2
diff --git a/sdk/settings/en/settings.yaml b/sdk/settings/en/settings.yaml
new file mode 100644
index 00000000..72a8d167
--- /dev/null
+++ b/sdk/settings/en/settings.yaml
@@ -0,0 +1,4 @@
+localizedSettings:
+ displayName: edrlab
+ pronunciation: edrlab
+ voice: female_1
diff --git a/sdk/test/settings/settings.yaml b/sdk/settings/settings.yaml
similarity index 75%
rename from sdk/test/settings/settings.yaml
rename to sdk/settings/settings.yaml
index 3448ec21..3059e74b 100644
--- a/sdk/test/settings/settings.yaml
+++ b/sdk/settings/settings.yaml
@@ -1,3 +1,8 @@
+accountLinking:
+ appClientId: "123456"
+ authGrantType: IMPLICIT
+ authorizationUrl: https://opds-auth-test-server-aplqpqv3wa-ey.a.run.app/implicit/login
+ linkingType: OAUTH
category: EDUCATION_AND_REFERENCE
defaultLocale: fr
localizedSettings:
@@ -14,4 +19,4 @@ localizedSettings:
shortDescription: lis mon livre
smallLogoImage: https://lh3.googleusercontent.com/IPE84cRJZSbgpkLCNMhJFkP_sbh5e18cYRvn30hVHE6nYNLfQ_9a-opqTKbQNThVPUzo8sfP1_cR
voice: female_1
-projectId: valentin-5
+projectId: valentin-5
\ No newline at end of file
diff --git a/sdk/test/custom/global/actions.intent.CANCEL.yaml b/sdk/test/custom/global/actions.intent.CANCEL.yaml
deleted file mode 100644
index 22c095fb..00000000
--- a/sdk/test/custom/global/actions.intent.CANCEL.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Au revoir et a bientôt
- webhookHandler: cancel
-transitionToScene: actions.scene.END_CONVERSATION
diff --git a/sdk/test/custom/global/actions.intent.MAIN.yaml b/sdk/test/custom/global/actions.intent.MAIN.yaml
deleted file mode 100644
index 849f748c..00000000
--- a/sdk/test/custom/global/actions.intent.MAIN.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Bienvenue dans l'application d'écoute de livre audio valentin
- hauy
-transitionToScene: home_members_lvl2
diff --git a/sdk/test/custom/global/actions.intent.NO_INPUT_1.yaml b/sdk/test/custom/global/actions.intent.NO_INPUT_1.yaml
deleted file mode 100644
index de975f82..00000000
--- a/sdk/test/custom/global/actions.intent.NO_INPUT_1.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n'ai pas entendu. Que voulez-vous dire ?
diff --git a/sdk/test/custom/global/actions.intent.NO_INPUT_2.yaml b/sdk/test/custom/global/actions.intent.NO_INPUT_2.yaml
deleted file mode 100644
index 59e57245..00000000
--- a/sdk/test/custom/global/actions.intent.NO_INPUT_2.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Que dite-vous ?
diff --git a/sdk/test/custom/global/actions.intent.NO_INPUT_FINAL.yaml b/sdk/test/custom/global/actions.intent.NO_INPUT_FINAL.yaml
deleted file mode 100644
index 63087279..00000000
--- a/sdk/test/custom/global/actions.intent.NO_INPUT_FINAL.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Je quitte l'application
-transitionToScene: actions.scene.END_CONVERSATION
diff --git a/sdk/test/custom/global/actions.intent.NO_MATCH_1.yaml b/sdk/test/custom/global/actions.intent.NO_MATCH_1.yaml
deleted file mode 100644
index 166efc70..00000000
--- a/sdk/test/custom/global/actions.intent.NO_MATCH_1.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n'ai pas compris. Que voulez-vous dire ?
diff --git a/sdk/test/custom/global/actions.intent.NO_MATCH_2.yaml b/sdk/test/custom/global/actions.intent.NO_MATCH_2.yaml
deleted file mode 100644
index deda0dc7..00000000
--- a/sdk/test/custom/global/actions.intent.NO_MATCH_2.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n'ai vraiment pas compris. Que voulez-vous dire ?
diff --git a/sdk/test/custom/global/actions.intent.NO_MATCH_FINAL.yaml b/sdk/test/custom/global/actions.intent.NO_MATCH_FINAL.yaml
deleted file mode 100644
index 2f8cf92a..00000000
--- a/sdk/test/custom/global/actions.intent.NO_MATCH_FINAL.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: malheureusement je m'en vais, je ne comprend pas
-transitionToScene: actions.scene.END_CONVERSATION
diff --git a/sdk/test/custom/intents/enter_member_space_lvl1.yaml b/sdk/test/custom/intents/enter_member_space_lvl1.yaml
deleted file mode 100644
index b61cfd70..00000000
--- a/sdk/test/custom/intents/enter_member_space_lvl1.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-trainingPhrases:
-- espace maman
-- membres
-- espace membres
-- Je veux entrer dans l'espace membres
diff --git a/sdk/test/custom/intents/get_info_association_lvl1.yaml b/sdk/test/custom/intents/get_info_association_lvl1.yaml
deleted file mode 100644
index 837e0830..00000000
--- a/sdk/test/custom/intents/get_info_association_lvl1.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-trainingPhrases:
-- informations
-- obtenir des informations
-- Je veux obtenir des informations sur l'association
diff --git a/sdk/test/custom/intents/i_want_to_listen_lvl3.yaml b/sdk/test/custom/intents/i_want_to_listen_lvl3.yaml
deleted file mode 100644
index aa4c1c81..00000000
--- a/sdk/test/custom/intents/i_want_to_listen_lvl3.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-parameters:
-- name: query
- type:
- name: string
-trainingPhrases:
-- ($query 'le nom du livre suivi de l\'auteur' auto=false)
-- je veux écouter ($query 'cyrano de Bergerac d\'Edmond Rostand' auto=false)
-- je veux écouter ($query 'le rouge et le noir de stendhall' auto=false)
-- je veux écouter ($query 'le rouge et le noir' auto=false)
-- je veux écouter ($query 'la chartreuse de parme' auto=false)
diff --git a/sdk/test/custom/intents/listen_audiobook_lvl1.yaml b/sdk/test/custom/intents/listen_audiobook_lvl1.yaml
deleted file mode 100644
index 5ee4919f..00000000
--- a/sdk/test/custom/intents/listen_audiobook_lvl1.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-trainingPhrases:
-- recherche d'un livre
-- recherche
-- rechercher ($number1 'un' auto=true) livre
-- écouter un livre
-- je veux écouter un livre
diff --git a/sdk/test/custom/intents/listen_audiobook_lvl2.yaml b/sdk/test/custom/intents/listen_audiobook_lvl2.yaml
deleted file mode 100644
index 61fb43ec..00000000
--- a/sdk/test/custom/intents/listen_audiobook_lvl2.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-trainingPhrases:
-- recherche d'un livre
-- recherche
-- rechercher ($number1 'un' auto=true) livre
-- je veux écouter
-- je veux écouter un livre
-- écouter
-- livre audio
-- livre
-- écouter u($number1 'n ' auto=true)audiobook
-- écouter un livre
-- écouter un livre audio
diff --git a/sdk/test/custom/intents/remaing_time_player.yaml b/sdk/test/custom/intents/remaing_time_player.yaml
deleted file mode 100644
index 703f8de9..00000000
--- a/sdk/test/custom/intents/remaing_time_player.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-trainingPhrases:
-- combien de temps de lecture me restent-t-il ?
-- depuis combien de temps j'écoute ce livre ?
-- dis-moi le temps de lecture
-- donne moi le temps de lecture
-- quel temps me reste-t-il ?
-- combien de temps de lecture reste-t-il ?
diff --git a/sdk/test/custom/intents/resume_audiobook_lvl2.yaml b/sdk/test/custom/intents/resume_audiobook_lvl2.yaml
deleted file mode 100644
index aab5315b..00000000
--- a/sdk/test/custom/intents/resume_audiobook_lvl2.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-parameters:
-- name: number1
- type:
- name: actions.type.Number
-trainingPhrases:
-- lecture d'($number1 'un' auto=true) livre
-- lecture de mon livre
-- lecture
-- lis ($number1 'un' auto=true) livre
-- lis mon livre
-- reprend la lecture de mon dernier livre
-- reprendre l'écoute
-- reprendre la lecture de mon dernier livre
-- reprend la lecture
-- reprendre la lecture
diff --git a/sdk/test/custom/intents/selection_audiobook_lvl2.yaml b/sdk/test/custom/intents/selection_audiobook_lvl2.yaml
deleted file mode 100644
index f07b780e..00000000
--- a/sdk/test/custom/intents/selection_audiobook_lvl2.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-trainingPhrases:
-- ma liste de lecture
-- liste de lecture
-- selection d'($number1 'un' auto=true) livre
-- selection
diff --git a/sdk/test/custom/intents/selection_genre_lvl3.yaml b/sdk/test/custom/intents/selection_genre_lvl3.yaml
deleted file mode 100644
index 63195424..00000000
--- a/sdk/test/custom/intents/selection_genre_lvl3.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-trainingPhrases:
-- je veux la sélection par genre
-- genre
-- sélection par genre
diff --git a/sdk/test/custom/intents/selection_my_list_lvl3.yaml b/sdk/test/custom/intents/selection_my_list_lvl3.yaml
deleted file mode 100644
index 020db8d6..00000000
--- a/sdk/test/custom/intents/selection_my_list_lvl3.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-trainingPhrases:
-- je veux ma liste
-- ma liste de lecture
-- ma liste
diff --git a/sdk/test/custom/intents/selection_thematic_list_lvl3.yaml b/sdk/test/custom/intents/selection_thematic_list_lvl3.yaml
deleted file mode 100644
index 5ff3b4b0..00000000
--- a/sdk/test/custom/intents/selection_thematic_list_lvl3.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-trainingPhrases:
-- sélection thématique
-- je veux la liste thématique
-- liste thématique
diff --git a/sdk/test/custom/intents/test_webhook.yaml b/sdk/test/custom/intents/test_webhook.yaml
deleted file mode 100644
index b955a43c..00000000
--- a/sdk/test/custom/intents/test_webhook.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-trainingPhrases:
-- test
-- test webhook
diff --git a/sdk/test/custom/scenes/ask_to_resume_listening_at_last_offset.yaml b/sdk/test/custom/scenes/ask_to_resume_listening_at_last_offset.yaml
deleted file mode 100644
index c575375b..00000000
--- a/sdk/test/custom/scenes/ask_to_resume_listening_at_last_offset.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-intentEvents:
-- handler:
- webhookHandler: ask_to_resume_listening_at_last_offset__yes
- intent: "yes"
- transitionToScene: player
-- handler:
- webhookHandler: ask_to_resume_listening_at_last_offset__no
- intent: "no"
- transitionToScene: player
-onEnter:
- webhookHandler: ask_to_resume_listening_at_last_offset
diff --git a/sdk/test/custom/scenes/home_lvl1.yaml b/sdk/test/custom/scenes/home_lvl1.yaml
deleted file mode 100644
index 4bf88a05..00000000
--- a/sdk/test/custom/scenes/home_lvl1.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-intentEvents:
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Voici les informations sur l'association
- intent: get_info_association_lvl1
- transitionToScene: home_lvl1
-- intent: enter_member_space_lvl1
- transitionToScene: home_lvl1_AccountLinking
-- intent: resume_listening_player
- transitionToScene: home_lvl1
-- intent: listen_audiobook_lvl1
- transitionToScene: home_lvl1_AccountLinking
-- handler:
- webhookHandler: test_webhook
- intent: test_webhook
- transitionToScene: home_lvl1
-onEnter:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Que voulez-vous faire ? Vous pouvez dire informations ou espace
- membres
- suggestions:
- - title: informations
- - title: espace membres
diff --git a/sdk/test/custom/scenes/home_members_lvl2.yaml b/sdk/test/custom/scenes/home_members_lvl2.yaml
deleted file mode 100644
index 2498e69c..00000000
--- a/sdk/test/custom/scenes/home_members_lvl2.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-intentEvents:
-- handler:
- webhookHandler: ecouter_livre_audio_lvl2
- intent: listen_audiobook_lvl2
- transitionToScene: search
-- handler:
- webhookHandler: reprendre_mon_livre_lvl2
- intent: resume_audiobook_lvl2
- transitionToScene: ask_to_resume_listening_at_last_offset
-- handler:
- webhookHandler: selection_livre_lvl2
- intent: selection_audiobook_lvl2
- transitionToScene: selection_lvl3
-onEnter:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Bienvenue dans l'espace membres. Les commandes possibles sont,
- sélection, lecture, recherche. Que voulez-vous faire ?
- suggestions:
- - title: selection d'un livre
- - title: lecture du dernier livre
- - title: recherche d'un livre
diff --git a/sdk/test/custom/scenes/player.yaml b/sdk/test/custom/scenes/player.yaml
deleted file mode 100644
index 06957f78..00000000
--- a/sdk/test/custom/scenes/player.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-intentEvents:
-- handler:
- webhookHandler: reprendre_la_lecture
- intent: resume_listening_player
-- handler:
- webhookHandler: remaining_time
- intent: remaing_time_player
-- handler:
- webhookHandler: media_status
- intent: actions.intent.MEDIA_STATUS_FINISHED
-- handler:
- webhookHandler: media_status
- intent: actions.intent.MEDIA_STATUS_PAUSED
-- handler:
- webhookHandler: media_status
- intent: actions.intent.MEDIA_STATUS_STOPPED
-- handler:
- webhookHandler: media_status
- intent: actions.intent.MEDIA_STATUS_FAILED
-onEnter:
- webhookHandler: player
diff --git a/sdk/test/custom/scenes/search.yaml b/sdk/test/custom/scenes/search.yaml
deleted file mode 100644
index 4d95c236..00000000
--- a/sdk/test/custom/scenes/search.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-conditionalEvents:
-- condition: scene.slots.status == "FINAL"
- handler:
- webhookHandler: search_livre_lvl2
-intentEvents:
-- intent: resume_listening_player
- transitionToScene: search
-onEnter:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Que voulez-vous écouter ? Par exemple Zola
-slots:
-- commitBehavior:
- writeSessionParam: query
- name: query
- required: true
- type:
- name: string
diff --git a/sdk/test/custom/scenes/select_pub_after_search.yaml b/sdk/test/custom/scenes/select_pub_after_search.yaml
deleted file mode 100644
index f6dc9f7b..00000000
--- a/sdk/test/custom/scenes/select_pub_after_search.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
-intentEvents:
-- intent: resume_listening_player
- transitionToScene: select_pub_after_search
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n’ai pas compris le numéro, merci de le répêter
- intent: actions.intent.NO_MATCH_1
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n’ai pas compris le numéro, dite un numéro
- intent: actions.intent.NO_MATCH_2
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n’ai pas compris le numéro.
- intent: actions.intent.NO_MATCH_FINAL
- transitionToScene: search
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n’ai pas compris le numéro, merci de le répêter
- intent: actions.intent.NO_INPUT_1
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n’ai pas compris le numéro, merci de le répêter
- intent: actions.intent.NO_INPUT_2
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n’ai pas compris le numéro
- intent: actions.intent.NO_INPUT_FINAL
- transitionToScene: search
-onEnter:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Pour choisir une publication dite son numéro
-onSlotUpdated:
- webhookHandler: select_publication_number_after_search
-slots:
-- commitBehavior:
- writeSessionParam: number
- name: number
- required: true
- type:
- name: actions.type.Number
diff --git a/sdk/test/custom/scenes/select_pub_after_selection.yaml b/sdk/test/custom/scenes/select_pub_after_selection.yaml
deleted file mode 100644
index 10d12712..00000000
--- a/sdk/test/custom/scenes/select_pub_after_selection.yaml
+++ /dev/null
@@ -1,67 +0,0 @@
-intentEvents:
-- intent: resume_listening_player
- transitionToScene: select_pub_after_selection
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n’ai pas compris le numéro, merci de le répêter
- intent: actions.intent.NO_MATCH_1
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n’ai pas compris le numéro, dite un numéro
- intent: actions.intent.NO_MATCH_2
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n’ai pas compris le numéro, dite un numéro
- intent: actions.intent.NO_MATCH_FINAL
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n’ai pas compris le numéro, dite un numéro
- intent: actions.intent.NO_INPUT_1
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n’ai pas compris le numéro, dite un numéro
- intent: actions.intent.NO_INPUT_2
-- handler:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: je n’ai pas compris le numéro
- intent: actions.intent.NO_INPUT_FINAL
-onEnter:
- staticPrompt:
- candidates:
- - promptResponse:
- firstSimple:
- variants:
- - speech: Pour choisir une publication dite son numéro
-onSlotUpdated:
- webhookHandler: select_publication_number_after_selection
-slots:
-- commitBehavior:
- writeSessionParam: number
- name: number
- required: true
- type:
- name: actions.type.Number
diff --git a/sdk/test/custom/scenes/selection_lvl3.yaml b/sdk/test/custom/scenes/selection_lvl3.yaml
deleted file mode 100644
index 583e652a..00000000
--- a/sdk/test/custom/scenes/selection_lvl3.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-intentEvents:
-- handler:
- webhookHandler: selection_genre_lvl3
- intent: selection_genre_lvl3
-- handler:
- webhookHandler: selection_thematic_list_lvl3
- intent: selection_thematic_list_lvl3
-- handler:
- webhookHandler: selection_my_list_lvl3
- intent: selection_my_list_lvl3
diff --git a/sdk/test/manifest.yaml b/sdk/test/manifest.yaml
deleted file mode 100644
index d847aecb..00000000
--- a/sdk/test/manifest.yaml
+++ /dev/null
@@ -1 +0,0 @@
-version: "1.0"
diff --git a/sdk/test/webhooks/ActionsOnGoogleFulfillment.yaml b/sdk/test/webhooks/ActionsOnGoogleFulfillment.yaml
deleted file mode 100644
index 814e3d4d..00000000
--- a/sdk/test/webhooks/ActionsOnGoogleFulfillment.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-handlers:
-- name: cancel
-- name: ecouter_livre_audio_lvl2
-- name: reprendre_mon_livre_lvl2
-- name: media_status
-- name: player
-- name: reprendre_la_lecture
-- name: remaining_time
-- name: selection_livre_lvl2
-- name: select_publication_number_after_search
-- name: select_publication_number_after_selection
-- name: test_webhook
-- name: search_livre_lvl2
-- name: ask_to_resume_listening_at_last_offset
-- name: ask_to_resume_listening_at_last_offset__yes
-- name: ask_to_resume_listening_at_last_offset__no
-- name: selection_genre_lvl3
-- name: selection_thematic_list_lvl3
-- name: selection_my_list_lvl3
-httpsEndpoint:
- baseUrl: https://us-central1-valentin-4.cloudfunctions.net/ActionsOnGoogleFulfillment
- endpointApiVersion: 2
diff --git a/sdk/webhooks/ActionsOnGoogleFulfillment.yaml b/sdk/webhooks/ActionsOnGoogleFulfillment.yaml
new file mode 100644
index 00000000..d1851636
--- /dev/null
+++ b/sdk/webhooks/ActionsOnGoogleFulfillment.yaml
@@ -0,0 +1,98 @@
+handlers:
+- name: main
+- name: home_new_user__intent__help
+- name: home_new_user__intent__maybe_later
+- name: home_new_user__intent__no
+- name: home_new_user__intent__repeat
+- name: home_new_user__intent__yes
+- name: home_new_user__intent__fallback
+- name: home_new_user__intent__fallback_end
+- name: home_new_user__intent__silence
+- name: home_new_user__intent__silence_end
+- name: home_new_user_maybe_later__intent__learn_more
+- name: home_new_user_maybe_later__intent__repeat
+- name: home_new_user_maybe_later__intent__link_account
+- name: home_new_user_maybe_later__intent__help
+- name: home_new_user_maybe_later__intent__fallback
+- name: home_new_user_maybe_later__intent__fallback_end
+- name: home_new_user_maybe_later__intent__silence
+- name: home_new_user_maybe_later__intent__silence_end
+- name: info__intent__yes
+- name: info__intent__help
+- name: info__intent__repeat
+- name: info__intent__fallback
+- name: info__intent__fallback_end
+- name: info__intent__silence
+- name: info__intent__silence_end
+- name: home_new_user_no__intent__yes
+- name: home_new_user_no__intent__no
+- name: home_new_user_no__intent__repeat
+- name: home_new_user_no__intent__help
+- name: home_new_user_no__intent__fallback
+- name: home_new_user_no__intent__fallback_end
+- name: home_new_user_no__intent__silence
+- name: home_new_user_no__intent__silence_end
+- name: cancel
+- name: home_new_user__on_enter
+- name: home_new_user_no__on_enter
+- name: home_new_user_maybe_later__on_enter
+- name: info__on_enter
+- name: home_user__on_enter
+- name: home_user__intent__help
+- name: home_user__intent__repeat
+- name: home_user__intent__bookshelf
+- name: home_user__intent__collections
+- name: home_user__intent__search
+- name: home_user__intent__fallback
+- name: home_user__intent__fallback_end
+- name: home_user__intent__silence
+- name: home_user__intent__silence_end
+- name: selection__on_enter
+- name: selection__intent__selects_book
+- name: selection__intent__repeat
+- name: selection__intent__another_one
+- name: selection__intent__help
+- name: selection__intent__fallback
+- name: selection__intent__fallback_end
+- name: selection__intent__silence
+- name: selection__intent__silence_end
+- name: fallback_1
+- name: fallback_2
+- name: fallback_end
+- name: silence_1
+- name: silence_2
+- name: silence_end
+- name: player__on_enter
+- name: player__intent__media_status_finished
+- name: player__intent__media_status_paused
+- name: player__intent__media_status_stopped
+- name: player__intent__media_status_failed
+- name: search__on_enter
+- name: search__intent__search_query
+- name: search__intent__search
+- name: collections__on_enter
+- name: collections__intent__bookshelf
+- name: collections__intent__by_genre
+- name: collections__intent__by_theme
+- name: collections__intent__help
+- name: collections__intent__fallback
+- name: collections__intent__fallback_end
+- name: collections__intent__silence
+- name: collections__intent__silence_end
+- name: player_prequel__on_enter
+- name: home_user__intent__recent_books
+- name: info__intent__no
+- name: home_user__intent__current_book
+- name: player_prequel__intent__help
+- name: player_prequel__intent__repeat
+- name: player_prequel__intent__player_prequel_back
+- name: player_prequel__intent__player_prequel_resume
+- name: player_prequel__intent__player_prequel_start
+- name: player_prequel__intent__player_prequel_summary
+- name: player_prequel__fallback
+- name: player_prequel__fallback_end
+- name: player_prequel__silence
+- name: player_prequel__silence_end
+httpsEndpoint:
+ baseUrl: https://us-central1-valentin-5.cloudfunctions.net/ActionsOnGoogleFulfillment
+ endpointApiVersion: 2
diff --git a/test/dev/.eslintrc.json b/test/dev/.eslintrc.json
deleted file mode 100644
index c5624c4e..00000000
--- a/test/dev/.eslintrc.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "env": {
- "browser": true,
- "es2021": true
- },
- "extends": [
- "eslint:recommended",
- "plugin:@typescript-eslint/recommended"
- ],
- "parser": "@typescript-eslint/parser",
- "parserOptions": {
- "ecmaVersion": 12,
- "sourceType": "module"
- },
- "plugins": [
- "@typescript-eslint"
- ],
- "rules": {
- }
-}
diff --git a/test/dev/package-lock.json b/test/dev/package-lock.json
deleted file mode 100644
index 3677cf9a..00000000
--- a/test/dev/package-lock.json
+++ /dev/null
@@ -1,3094 +0,0 @@
-{
- "name": "lis-mon-livre-test",
- "version": "1.0.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@assistant/actions": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@assistant/actions/-/actions-0.1.0.tgz",
- "integrity": "sha512-V3PUGj7j/8Gq4VPFwP40k6AnsJaV2nnViuGskYnCe8sKLgCTzeGsOKnoGJgEEjI3ETm5mPd8ym3/HoksRODMNw==",
- "dev": true,
- "requires": {
- "google-gax": "^2.9.2"
- }
- },
- "@assistant/conversation-testing": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@assistant/conversation-testing/-/conversation-testing-1.0.0.tgz",
- "integrity": "sha512-9NZ3q1PI/FXegVaF+Kt2M/z2tWcDSPZ8aQ/UBYqtmYk0xSQX3ZRNhg9FWEGeAGL7+1tV4aRRkBylTvUUOGivrQ==",
- "dev": true,
- "requires": {
- "@assistant/actions": "0.1.0",
- "@types/chai": "^4.1.4",
- "@types/i18n": "^0.8.6",
- "@types/js-yaml": "^3.12.5",
- "@types/node": "^10.9.4",
- "@types/promise.prototype.finally": "^2.0.3",
- "chai": "^4.2.0",
- "google-auth-library": "^6.1.2",
- "grpc": "^1.24.0",
- "i18n": "^0.8.3",
- "js-yaml": "^3.14.0",
- "promise.prototype.finally": "^3.1.1",
- "ts-node": "^7.0.1"
- },
- "dependencies": {
- "@types/node": {
- "version": "10.17.60",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
- "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
- "dev": true
- },
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "ts-node": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz",
- "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==",
- "dev": true,
- "requires": {
- "arrify": "^1.0.0",
- "buffer-from": "^1.1.0",
- "diff": "^3.1.0",
- "make-error": "^1.1.1",
- "minimist": "^1.2.0",
- "mkdirp": "^0.5.1",
- "source-map-support": "^0.5.6",
- "yn": "^2.0.0"
- }
- }
- }
- },
- "@cspotcode/source-map-consumer": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
- "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
- "dev": true
- },
- "@cspotcode/source-map-support": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz",
- "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==",
- "dev": true,
- "requires": {
- "@cspotcode/source-map-consumer": "0.8.0"
- }
- },
- "@eslint/eslintrc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz",
- "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.0.0",
- "globals": "^13.9.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
- "strip-json-comments": "^3.1.1"
- }
- },
- "@grpc/grpc-js": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.4.1.tgz",
- "integrity": "sha512-/chkA48TdAvATHA7RXJPeHQLdfFhpu51974s8htjO/XTDHA41j5+SkR5Io+lr9XsLmkZD6HxLyRAFGmA9wjO2w==",
- "dev": true,
- "requires": {
- "@grpc/proto-loader": "^0.6.4",
- "@types/node": ">=12.12.47"
- }
- },
- "@grpc/proto-loader": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.6.tgz",
- "integrity": "sha512-cdMaPZ8AiFz6ua6PUbP+LKbhwJbFXnrQ/mlnKGUyzDUZ3wp7vPLksnmLCBX6SHgSmjX7CbNVNLFYD5GmmjO4GQ==",
- "dev": true,
- "requires": {
- "@types/long": "^4.0.1",
- "lodash.camelcase": "^4.3.0",
- "long": "^4.0.0",
- "protobufjs": "^6.10.0",
- "yargs": "^16.1.1"
- }
- },
- "@humanwhocodes/config-array": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz",
- "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==",
- "dev": true,
- "requires": {
- "@humanwhocodes/object-schema": "^1.2.0",
- "debug": "^4.1.1",
- "minimatch": "^3.0.4"
- }
- },
- "@humanwhocodes/object-schema": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
- "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
- "dev": true
- },
- "@mapbox/node-pre-gyp": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.6.tgz",
- "integrity": "sha512-qK1ECws8UxuPqOA8F5LFD90vyVU33W7N3hGfgsOVfrJaRVc8McC3JClTDHpeSbL9CBrOHly/4GsNPAvIgNZE+g==",
- "dev": true,
- "requires": {
- "detect-libc": "^1.0.3",
- "https-proxy-agent": "^5.0.0",
- "make-dir": "^3.1.0",
- "node-fetch": "^2.6.5",
- "nopt": "^5.0.0",
- "npmlog": "^5.0.1",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.11"
- }
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true
- },
- "@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- }
- },
- "@protobufjs/aspromise": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
- "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=",
- "dev": true
- },
- "@protobufjs/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
- "dev": true
- },
- "@protobufjs/codegen": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
- "dev": true
- },
- "@protobufjs/eventemitter": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
- "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=",
- "dev": true
- },
- "@protobufjs/fetch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
- "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
- "dev": true,
- "requires": {
- "@protobufjs/aspromise": "^1.1.1",
- "@protobufjs/inquire": "^1.1.0"
- }
- },
- "@protobufjs/float": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
- "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=",
- "dev": true
- },
- "@protobufjs/inquire": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
- "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=",
- "dev": true
- },
- "@protobufjs/path": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
- "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=",
- "dev": true
- },
- "@protobufjs/pool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
- "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=",
- "dev": true
- },
- "@protobufjs/utf8": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
- "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=",
- "dev": true
- },
- "@tsconfig/node10": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
- "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
- "dev": true
- },
- "@tsconfig/node12": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
- "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
- "dev": true
- },
- "@tsconfig/node14": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
- "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
- "dev": true
- },
- "@tsconfig/node16": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
- "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
- "dev": true
- },
- "@types/bytebuffer": {
- "version": "5.0.42",
- "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.42.tgz",
- "integrity": "sha512-lEgKojWUAc/MG2t649oZS5AfYFP2xRNPoDuwDBlBMjHXd8MaGPgFgtCXUK7inZdBOygmVf10qxc1Us8GXC96aw==",
- "dev": true,
- "requires": {
- "@types/long": "*",
- "@types/node": "*"
- }
- },
- "@types/chai": {
- "version": "4.2.22",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz",
- "integrity": "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==",
- "dev": true
- },
- "@types/i18n": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@types/i18n/-/i18n-0.8.8.tgz",
- "integrity": "sha512-RI4LFAraGrimMTxXkediCMXGVLC6ksXIIo3U+d3E4n+Mhw3uIDbmokO7DHlPB/eu6Tn6KBv4IUE1WrrEDRdNUQ==",
- "dev": true
- },
- "@types/js-yaml": {
- "version": "3.12.7",
- "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz",
- "integrity": "sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ==",
- "dev": true
- },
- "@types/json-schema": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
- "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
- "dev": true
- },
- "@types/long": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
- "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==",
- "dev": true
- },
- "@types/mocha": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz",
- "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==",
- "dev": true
- },
- "@types/node": {
- "version": "16.11.4",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.4.tgz",
- "integrity": "sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==",
- "dev": true
- },
- "@types/promise.prototype.finally": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@types/promise.prototype.finally/-/promise.prototype.finally-2.0.4.tgz",
- "integrity": "sha512-bkzsMz11tGI5r/ZhJIVI1+QSWKKBcX/Llv0zoM2ufOH+o/3sLXwE5xCW0OUX81xPa4EGOyPKFlNrH9GH+IF4lg==",
- "dev": true
- },
- "@typescript-eslint/eslint-plugin": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.1.0.tgz",
- "integrity": "sha512-bekODL3Tqf36Yz8u+ilha4zGxL9mdB6LIsIoMAvvC5FAuWo4NpZYXtCbv7B2CeR1LhI/lLtLk+q4tbtxuoVuCg==",
- "dev": true,
- "requires": {
- "@typescript-eslint/experimental-utils": "5.1.0",
- "@typescript-eslint/scope-manager": "5.1.0",
- "debug": "^4.3.2",
- "functional-red-black-tree": "^1.0.1",
- "ignore": "^5.1.8",
- "regexpp": "^3.2.0",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
- },
- "dependencies": {
- "ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
- "dev": true
- }
- }
- },
- "@typescript-eslint/experimental-utils": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.1.0.tgz",
- "integrity": "sha512-ovE9qUiZMOMgxQAESZsdBT+EXIfx/YUYAbwGUI6V03amFdOOxI9c6kitkgRvLkJaLusgMZ2xBhss+tQ0Y1HWxA==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.1.0",
- "@typescript-eslint/types": "5.1.0",
- "@typescript-eslint/typescript-estree": "5.1.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^3.0.0"
- },
- "dependencies": {
- "eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- }
- }
- },
- "@typescript-eslint/parser": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.1.0.tgz",
- "integrity": "sha512-vx1P+mhCtYw3+bRHmbalq/VKP2Y3gnzNgxGxfEWc6OFpuEL7iQdAeq11Ke3Rhy8NjgB+AHsIWEwni3e+Y7djKA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/scope-manager": "5.1.0",
- "@typescript-eslint/types": "5.1.0",
- "@typescript-eslint/typescript-estree": "5.1.0",
- "debug": "^4.3.2"
- }
- },
- "@typescript-eslint/scope-manager": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.1.0.tgz",
- "integrity": "sha512-yYlyVjvn5lvwCL37i4hPsa1s0ORsjkauhTqbb8MnpvUs7xykmcjGqwlNZ2Q5QpoqkJ1odlM2bqHqJwa28qV6Tw==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.1.0",
- "@typescript-eslint/visitor-keys": "5.1.0"
- }
- },
- "@typescript-eslint/types": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.1.0.tgz",
- "integrity": "sha512-sEwNINVxcB4ZgC6Fe6rUyMlvsB2jvVdgxjZEjQUQVlaSPMNamDOwO6/TB98kFt4sYYfNhdhTPBEQqNQZjMMswA==",
- "dev": true
- },
- "@typescript-eslint/typescript-estree": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.1.0.tgz",
- "integrity": "sha512-SSz+l9YrIIsW4s0ZqaEfnjl156XQ4VRmJsbA0ZE1XkXrD3cRpzuZSVCyqeCMR3EBjF27IisWakbBDGhGNIOvfQ==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.1.0",
- "@typescript-eslint/visitor-keys": "5.1.0",
- "debug": "^4.3.2",
- "globby": "^11.0.4",
- "is-glob": "^4.0.3",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
- }
- },
- "@typescript-eslint/visitor-keys": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.1.0.tgz",
- "integrity": "sha512-uqNXepKBg81JVwjuqAxYrXa1Ql/YDzM+8g/pS+TCPxba0wZttl8m5DkrasbfnmJGHs4lQ2jTbcZ5azGhI7kK+w==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.1.0",
- "eslint-visitor-keys": "^3.0.0"
- }
- },
- "@ungap/promise-all-settled": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
- "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
- "dev": true
- },
- "abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
- "dev": true
- },
- "abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "dev": true,
- "requires": {
- "event-target-shim": "^5.0.0"
- }
- },
- "acorn": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
- "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true
- },
- "acorn-walk": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
- "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
- "dev": true
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "requires": {
- "debug": "4"
- }
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "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"
- }
- },
- "ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "aproba": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
- "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
- "dev": true
- },
- "are-we-there-yet": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
- "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
- "dev": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- }
- },
- "arg": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
- "dev": true
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- },
- "dependencies": {
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- }
- }
- },
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
- },
- "arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "dev": true
- },
- "ascli": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
- "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
- "dev": true,
- "requires": {
- "colour": "~0.7.1",
- "optjs": "~3.2.2"
- }
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true
- },
- "bignumber.js": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz",
- "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==",
- "dev": true
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "buffer-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=",
- "dev": true
- },
- "buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "bytebuffer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
- "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=",
- "dev": true,
- "requires": {
- "long": "~3"
- },
- "dependencies": {
- "long": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
- "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=",
- "dev": true
- }
- }
- },
- "call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
- "dev": true
- },
- "chai": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
- "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
- "dev": true,
- "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.1",
- "type-detect": "^4.0.5"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
- "dev": true
- },
- "chokidar": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
- "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "dependencies": {
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- }
- }
- },
- "chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "dev": true
- },
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "dev": true
- },
- "colour": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
- "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true
- },
- "create-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
- "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
- "dev": true
- },
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "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==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dev": true,
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "dev": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
- "dev": true
- },
- "diff": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
- "dev": true
- },
- "dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "requires": {
- "path-type": "^4.0.0"
- }
- },
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "duplexify": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
- "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.4.1",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1",
- "stream-shift": "^1.0.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==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.1"
- }
- },
- "es-abstract": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
- "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "get-symbol-description": "^1.0.0",
- "has": "^1.0.3",
- "has-symbols": "^1.0.2",
- "internal-slot": "^1.0.3",
- "is-callable": "^1.2.4",
- "is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.1",
- "is-string": "^1.0.7",
- "is-weakref": "^1.0.1",
- "object-inspect": "^1.11.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.1"
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "eslint": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz",
- "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==",
- "dev": true,
- "requires": {
- "@eslint/eslintrc": "^1.0.3",
- "@humanwhocodes/config-array": "^0.6.0",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^6.0.0",
- "eslint-utils": "^3.0.0",
- "eslint-visitor-keys": "^3.0.0",
- "espree": "^9.0.0",
- "esquery": "^1.4.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^6.0.1",
- "globals": "^13.6.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.0.4",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.2.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
- "strip-json-comments": "^3.1.0",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- }
- }
- },
- "eslint-scope": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz",
- "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- }
- },
- "eslint-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
- "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^2.0.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
- "dev": true
- }
- }
- },
- "eslint-visitor-keys": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz",
- "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==",
- "dev": true
- },
- "espree": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz",
- "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==",
- "dev": true,
- "requires": {
- "acorn": "^8.5.0",
- "acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^3.0.0"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esquery": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
- "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
- "dev": true,
- "requires": {
- "estraverse": "^5.1.0"
- }
- },
- "esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "requires": {
- "estraverse": "^5.2.0"
- }
- },
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "dev": true
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "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==",
- "dev": true
- },
- "fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "dependencies": {
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- }
- }
- },
- "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==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "fast-text-encoding": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
- "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==",
- "dev": true
- },
- "fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "dev": true,
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "requires": {
- "flat-cache": "^3.0.4"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true
- },
- "flat-cache": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
- "dev": true,
- "requires": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- }
- },
- "flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
- "dev": true
- },
- "fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "optional": true
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
- },
- "gauge": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.1.tgz",
- "integrity": "sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ==",
- "dev": true,
- "requires": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.2",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.1",
- "object-assign": "^4.1.1",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1 || ^2.0.0",
- "strip-ansi": "^3.0.1 || ^4.0.0",
- "wide-align": "^1.1.2"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "gaxios": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz",
- "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==",
- "dev": true,
- "requires": {
- "abort-controller": "^3.0.0",
- "extend": "^3.0.2",
- "https-proxy-agent": "^5.0.0",
- "is-stream": "^2.0.0",
- "node-fetch": "^2.6.1"
- }
- },
- "gcp-metadata": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz",
- "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==",
- "dev": true,
- "requires": {
- "gaxios": "^4.0.0",
- "json-bigint": "^1.0.0"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "get-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=",
- "dev": true
- },
- "get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- }
- },
- "get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
- }
- },
- "glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.3"
- }
- },
- "globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
- "dev": true,
- "requires": {
- "type-fest": "^0.20.2"
- }
- },
- "globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
- },
- "dependencies": {
- "ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
- "dev": true
- }
- }
- },
- "google-auth-library": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz",
- "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==",
- "dev": true,
- "requires": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- }
- },
- "google-gax": {
- "version": "2.28.0",
- "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.28.0.tgz",
- "integrity": "sha512-kuqc8a4+CTCMBcF3tlOL7Sa74JWkTzcZxatAQTCVK35WToXkHnJ0qncFOJuegUv3EbV9IQY4j/+NZdFLv+lbTA==",
- "dev": true,
- "requires": {
- "@grpc/grpc-js": "~1.4.0",
- "@grpc/proto-loader": "^0.6.1",
- "@types/long": "^4.0.0",
- "abort-controller": "^3.0.0",
- "duplexify": "^4.0.0",
- "fast-text-encoding": "^1.0.3",
- "google-auth-library": "^7.6.1",
- "is-stream-ended": "^0.1.4",
- "node-fetch": "^2.6.1",
- "object-hash": "^2.1.1",
- "proto3-json-serializer": "^0.1.1",
- "protobufjs": "6.11.2",
- "retry-request": "^4.0.0"
- },
- "dependencies": {
- "google-auth-library": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.1.tgz",
- "integrity": "sha512-nQxgM1ZopUMcpMnu95kOSzI+9tJl4YDOZJomSTBGlRLpxfBopdwto7WvzoI87HuN0nQqVETgOsHi/C/po1rppA==",
- "dev": true,
- "requires": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "google-p12-pem": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.2.tgz",
- "integrity": "sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==",
- "dev": true,
- "requires": {
- "node-forge": "^0.10.0"
- }
- },
- "growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "dev": true
- },
- "grpc": {
- "version": "1.24.11",
- "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.24.11.tgz",
- "integrity": "sha512-8/AQdFCzCeCDWW3SoaMNp6ccbRvTQEH1O1u1uFtt29eWsg5gSZCJ3m6fbkduEIh3smY7WAPP+LgVJ5n3nZRxcA==",
- "dev": true,
- "requires": {
- "@mapbox/node-pre-gyp": "^1.0.4",
- "@types/bytebuffer": "^5.0.40",
- "lodash.camelcase": "^4.3.0",
- "lodash.clone": "^4.5.0",
- "nan": "^2.13.2",
- "protobufjs": "^5.0.3"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "protobufjs": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz",
- "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==",
- "dev": true,
- "requires": {
- "ascli": "~1",
- "bytebuffer": "~5",
- "glob": "^7.0.5",
- "yargs": "^3.10.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- }
- },
- "y18n": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
- "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
- "dev": true
- },
- "yargs": {
- "version": "3.32.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
- "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
- "dev": true,
- "requires": {
- "camelcase": "^2.0.1",
- "cliui": "^3.0.3",
- "decamelize": "^1.1.1",
- "os-locale": "^1.4.0",
- "string-width": "^1.0.1",
- "window-size": "^0.1.4",
- "y18n": "^3.2.0"
- }
- }
- }
- },
- "gtoken": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz",
- "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==",
- "dev": true,
- "requires": {
- "gaxios": "^4.0.0",
- "google-p12-pem": "^3.0.3",
- "jws": "^4.0.0"
- }
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
- "dev": true
- },
- "has-tostringtag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
- "dev": true,
- "requires": {
- "has-symbols": "^1.0.2"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "dev": true,
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
- "i18n": {
- "version": "0.8.6",
- "resolved": "https://registry.npmjs.org/i18n/-/i18n-0.8.6.tgz",
- "integrity": "sha512-aMsJq8i1XXrb+BBsgmJBwak9mr69zPEIAUPb6c5yw2G/O4k1Q52lBxL+agZdQDN/RGf1ylQzrCswsOOgIiC1FA==",
- "dev": true,
- "requires": {
- "debug": "*",
- "make-plural": "^6.0.1",
- "math-interval-parser": "^2.0.1",
- "messageformat": "^2.3.0",
- "mustache": "*",
- "sprintf-js": "^1.1.2"
- }
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
- "import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "internal-slot": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
- "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.1.0",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
- }
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
- "dev": true
- },
- "is-bigint": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
- "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
- "dev": true,
- "requires": {
- "has-bigints": "^1.0.1"
- }
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-boolean-object": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
- "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-callable": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
- "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
- "dev": true
- },
- "is-date-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
- "dev": true,
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-negative-zero": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
- "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-number-object": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
- "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
- "dev": true,
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true
- },
- "is-regex": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-shared-array-buffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
- "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
- "dev": true
- },
- "is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true
- },
- "is-stream-ended": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz",
- "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==",
- "dev": true
- },
- "is-string": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
- "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
- "dev": true,
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-symbol": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
- "dev": true,
- "requires": {
- "has-symbols": "^1.0.2"
- }
- },
- "is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true
- },
- "is-weakref": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz",
- "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0"
- }
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "json-bigint": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
- "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
- "dev": true,
- "requires": {
- "bignumber.js": "^9.0.0"
- }
- },
- "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==",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "jwa": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
- "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
- "dev": true,
- "requires": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "jws": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
- "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
- "dev": true,
- "requires": {
- "jwa": "^2.0.0",
- "safe-buffer": "^5.0.1"
- }
- },
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "dev": true,
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
- "dev": true
- },
- "lodash.clone": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
- "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=",
- "dev": true
- },
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- }
- },
- "long": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==",
- "dev": true
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "make-error": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
- },
- "make-plural": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-6.2.2.tgz",
- "integrity": "sha512-8iTuFioatnTTmb/YJjywkVIHLjcwkFD9Ms0JpxjEm9Mo8eQYkh1z+55dwv4yc1jQ8ftVBxWQbihvZL1DfzGGWA==",
- "dev": true
- },
- "math-interval-parser": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-2.0.1.tgz",
- "integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==",
- "dev": true
- },
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true
- },
- "messageformat": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-2.3.0.tgz",
- "integrity": "sha512-uTzvsv0lTeQxYI2y1NPa1lItL5VRI8Gb93Y2K2ue5gBPyrbJxfDi/EYWxh2PKv5yO42AJeeqblS9MJSh/IEk4w==",
- "dev": true,
- "requires": {
- "make-plural": "^4.3.0",
- "messageformat-formatters": "^2.0.1",
- "messageformat-parser": "^4.1.2"
- },
- "dependencies": {
- "make-plural": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-4.3.0.tgz",
- "integrity": "sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- }
- }
- },
- "messageformat-formatters": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/messageformat-formatters/-/messageformat-formatters-2.0.1.tgz",
- "integrity": "sha512-E/lQRXhtHwGuiQjI7qxkLp8AHbMD5r2217XNe/SREbBlSawe0lOqsFb7rflZJmlQFSULNLIqlcjjsCPlB3m3Mg==",
- "dev": true
- },
- "messageformat-parser": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-4.1.3.tgz",
- "integrity": "sha512-2fU3XDCanRqeOCkn7R5zW5VQHWf+T3hH65SzuqRvjatBK7r4uyFa5mEX+k6F9Bd04LVM5G4/BHBTUJsOdW7uyg==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true
- },
- "minipass": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz",
- "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- }
- },
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true
- },
- "mocha": {
- "version": "9.1.3",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz",
- "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==",
- "dev": true,
- "requires": {
- "@ungap/promise-all-settled": "1.1.2",
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.2",
- "debug": "4.3.2",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.1.7",
- "growl": "1.10.5",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "3.0.4",
- "ms": "2.1.3",
- "nanoid": "3.1.25",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "which": "2.0.2",
- "workerpool": "6.1.5",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.0.0"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "diff": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
- "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
- "dev": true
- },
- "glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "yargs-parser": {
- "version": "20.2.4",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
- "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
- "dev": true
- }
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "mustache": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
- "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
- "dev": true
- },
- "nan": {
- "version": "2.15.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
- "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==",
- "dev": true
- },
- "nanoid": {
- "version": "3.1.25",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
- "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
- "dev": true
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "node-fetch": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
- "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
- "dev": true,
- "requires": {
- "whatwg-url": "^5.0.0"
- }
- },
- "node-forge": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
- "dev": true
- },
- "nopt": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
- "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
- "dev": true,
- "requires": {
- "abbrev": "1"
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "npmlog": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
- "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
- "dev": true,
- "requires": {
- "are-we-there-yet": "^2.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^3.0.0",
- "set-blocking": "^2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
- "object-hash": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
- "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
- "dev": true
- },
- "object-inspect": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
- "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==",
- "dev": true
- },
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true
- },
- "object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "optionator": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
- "dev": true,
- "requires": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- }
- },
- "optjs": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
- "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=",
- "dev": true
- },
- "os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
- "dev": true,
- "requires": {
- "lcid": "^1.0.0"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true
- },
- "picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
- "dev": true
- },
- "prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
- },
- "promise.prototype.finally": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz",
- "integrity": "sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- }
- },
- "proto3-json-serializer": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.4.tgz",
- "integrity": "sha512-bFzdsKU/zaTobWrRxRniMZIzzcgKYlmBWL1gAcTXZ2M7TQTGPI0JoYYs6bN7tpWj59ZCfwg7Ii/A2e8BbQGYnQ==",
- "dev": true
- },
- "protobufjs": {
- "version": "6.11.2",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz",
- "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==",
- "dev": true,
- "requires": {
- "@protobufjs/aspromise": "^1.1.2",
- "@protobufjs/base64": "^1.1.2",
- "@protobufjs/codegen": "^2.0.4",
- "@protobufjs/eventemitter": "^1.1.0",
- "@protobufjs/fetch": "^1.1.0",
- "@protobufjs/float": "^1.0.2",
- "@protobufjs/inquire": "^1.1.0",
- "@protobufjs/path": "^1.1.2",
- "@protobufjs/pool": "^1.1.0",
- "@protobufjs/utf8": "^1.1.0",
- "@types/long": "^4.0.1",
- "@types/node": ">=13.7.0",
- "long": "^4.0.0"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "regexpp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
- "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
- "dev": true
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- },
- "retry-request": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz",
- "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "extend": "^3.0.2"
- }
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- },
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- }
- },
- "signal-exit": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz",
- "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "source-map-support": {
- "version": "0.5.20",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
- "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "sprintf-js": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
- "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
- "dev": true
- },
- "stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "string.prototype.trimend": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
- "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
- "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "tar": {
- "version": "6.1.11",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
- "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
- "dev": true,
- "requires": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
- "dev": true
- },
- "ts-node": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz",
- "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==",
- "dev": true,
- "requires": {
- "@cspotcode/source-map-support": "0.7.0",
- "@tsconfig/node10": "^1.0.7",
- "@tsconfig/node12": "^1.0.7",
- "@tsconfig/node14": "^1.0.0",
- "@tsconfig/node16": "^1.0.2",
- "acorn": "^8.4.1",
- "acorn-walk": "^8.1.1",
- "arg": "^4.1.0",
- "create-require": "^1.1.0",
- "diff": "^4.0.1",
- "make-error": "^1.1.1",
- "yn": "3.1.1"
- },
- "dependencies": {
- "diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true
- },
- "yn": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
- "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
- "dev": true
- }
- }
- },
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- },
- "tsutils": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
- "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
- "dev": true,
- "requires": {
- "tslib": "^1.8.1"
- }
- },
- "type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- },
- "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==",
- "dev": true
- },
- "type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true
- },
- "typescript": {
- "version": "4.4.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
- "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
- "dev": true
- },
- "unbox-primitive": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
- "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
- "which-boxed-primitive": "^1.0.2"
- }
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "v8-compile-cache": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
- "dev": true
- },
- "webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
- "dev": true
- },
- "whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "dev": true,
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-boxed-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "dev": true,
- "requires": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- }
- },
- "wide-align": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
- "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
- "dev": true,
- "requires": {
- "string-width": "^1.0.2 || 2 || 3 || 4"
- }
- },
- "window-size": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
- "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=",
- "dev": true
- },
- "word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
- "dev": true
- },
- "workerpool": {
- "version": "6.1.5",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
- "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
- "dev": true
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true
- },
- "yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "requires": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
- "dev": true
- },
- "decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true
- }
- }
- },
- "yn": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz",
- "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=",
- "dev": true
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
- }
- }
-}
diff --git a/test/dev/package.json b/test/dev/package.json
deleted file mode 100644
index b06c8543..00000000
--- a/test/dev/package.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "lis-mon-livre-test",
- "version": "1.0.0",
- "description": "",
- "private": true,
- "scripts": {
- "lint": "eslint \"test/*.ts\"",
- "enable-activity-controls": "env GOOGLE_APPLICATION_CREDENTIALS=$PWD/service_account.json web-and-app-activity-controls",
- "test": "npm run lint && env GOOGLE_APPLICATION_CREDENTIALS=$PWD/service_account.json PROJECT_ID=$(cat $PWD/service_account.json| jq -r '.project_id') mocha --recursive --require ts-node/register test/*.ts"
- },
- "author": "",
- "license": "ISC",
- "devDependencies": {
- "@assistant/conversation-testing": "^1.0.0",
- "@types/mocha": "^9.0.0",
- "@types/node": "^16.11.4",
- "@typescript-eslint/eslint-plugin": "^5.1.0",
- "@typescript-eslint/parser": "^5.1.0",
- "chai": "^4.3.4",
- "eslint": "^8.1.0",
- "mocha": "^9.1.3",
- "ts-node": "^10.4.0",
- "typescript": "^4.4.4"
- }
-}
diff --git a/test/dev/test/test1.ts b/test/dev/test/test1.ts
deleted file mode 100644
index 18307e6c..00000000
--- a/test/dev/test/test1.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-import 'mocha';
-
-import {env} from 'process';
-import {ActionsOnGoogleTestManager} from '@assistant/conversation-testing';
-import {ok, rejects} from 'assert';
-import { inspect } from 'util';
-
-const DEFAULT_LOCALE = 'fr-FR';
-const DEFAULT_SURFACE = 'PHONE';
-const CONTINUE_CONVO_PROMPT = "Bienvenue dans l'application d'écoute de livre audio valentin hauy Que voulez-vous faire ? Vous pouvez dire informations ou espace membres";
-
-const PROJECT_ID = env['PROJECT_ID'] || '';
-const TRIGGER_PHRASE = 'Parler avec valentin audio';
-
-console.log(`PROJECT_ID=${PROJECT_ID}`);
-
-ok(PROJECT_ID, 'no PROJECT_ID');
-
-// tslint:disable:only-arrow-functions
-
-describe('My Action Test Suite', function () {
- // Set the timeout for each test run to 60s.
- this.timeout(60000);
- let test: ActionsOnGoogleTestManager;
-
- async function startConversation() {
- await test.sendQuery(TRIGGER_PHRASE);
- test.assertSpeech(CONTINUE_CONVO_PROMPT);
- test.assertText(CONTINUE_CONVO_PROMPT);
- test.assertIntent('actions.intent.MAIN');
- test.assertScene('home_lvl1');
-
- let se = await test.sendQuery("espace membres");
- console.log(se);
-
- // test.assertSpeech("Bienvenue dans l'espace membres. Les commandes possibles sont, sélection, lecture, recherche. Que voulez-vous faire ?");
- let resp = test.getLatestResponse();
- console.log(inspect(resp, {showHidden: false, depth: null, colors: true}));
-
- test.assertText("Pour continuer d'utiliser valentin audio, je dois associer votre compte valentin audio à Google. Êtes-vous d'accord ?");
-
- se = await test.sendQuery("oui");
- console.log(se);
-
- resp = test.getLatestResponse();
- console.dir(resp);
- }
-
- before('before all', async () => {
- // Load project settings to read project ID and trigger phrase.
- test = new ActionsOnGoogleTestManager({projectId: PROJECT_ID});
- await test.writePreviewFromDraft();
- test.setSuiteLocale(DEFAULT_LOCALE);
- test.setSuiteSurface(DEFAULT_SURFACE);
- });
-
- afterEach('post test cleans', async () => {
- test.cleanUpAfterTest();
- });
-
- it('trigger only', async () => {
- await startConversation();
- await test.sendQuery("quitter");
- // test.assertConversationEnded();
- });
-});
diff --git a/test/prod/.eslintrc.json b/test/prod/.eslintrc.json
deleted file mode 100644
index c5624c4e..00000000
--- a/test/prod/.eslintrc.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "env": {
- "browser": true,
- "es2021": true
- },
- "extends": [
- "eslint:recommended",
- "plugin:@typescript-eslint/recommended"
- ],
- "parser": "@typescript-eslint/parser",
- "parserOptions": {
- "ecmaVersion": 12,
- "sourceType": "module"
- },
- "plugins": [
- "@typescript-eslint"
- ],
- "rules": {
- }
-}
diff --git a/test/prod/package-lock.json b/test/prod/package-lock.json
deleted file mode 100644
index be66871b..00000000
--- a/test/prod/package-lock.json
+++ /dev/null
@@ -1,3161 +0,0 @@
-{
- "name": "lis-mon-livre-test",
- "version": "1.0.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@assistant/actions": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@assistant/actions/-/actions-0.1.0.tgz",
- "integrity": "sha512-V3PUGj7j/8Gq4VPFwP40k6AnsJaV2nnViuGskYnCe8sKLgCTzeGsOKnoGJgEEjI3ETm5mPd8ym3/HoksRODMNw==",
- "dev": true,
- "requires": {
- "google-gax": "^2.9.2"
- }
- },
- "@assistant/conversation-testing": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@assistant/conversation-testing/-/conversation-testing-1.0.0.tgz",
- "integrity": "sha512-9NZ3q1PI/FXegVaF+Kt2M/z2tWcDSPZ8aQ/UBYqtmYk0xSQX3ZRNhg9FWEGeAGL7+1tV4aRRkBylTvUUOGivrQ==",
- "dev": true,
- "requires": {
- "@assistant/actions": "0.1.0",
- "@types/chai": "^4.1.4",
- "@types/i18n": "^0.8.6",
- "@types/js-yaml": "^3.12.5",
- "@types/node": "^10.9.4",
- "@types/promise.prototype.finally": "^2.0.3",
- "chai": "^4.2.0",
- "google-auth-library": "^6.1.2",
- "grpc": "^1.24.0",
- "i18n": "^0.8.3",
- "js-yaml": "^3.14.0",
- "promise.prototype.finally": "^3.1.1",
- "ts-node": "^7.0.1"
- },
- "dependencies": {
- "@types/node": {
- "version": "10.17.60",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
- "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
- "dev": true
- },
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "ts-node": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz",
- "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==",
- "dev": true,
- "requires": {
- "arrify": "^1.0.0",
- "buffer-from": "^1.1.0",
- "diff": "^3.1.0",
- "make-error": "^1.1.1",
- "minimist": "^1.2.0",
- "mkdirp": "^0.5.1",
- "source-map-support": "^0.5.6",
- "yn": "^2.0.0"
- }
- }
- }
- },
- "@cspotcode/source-map-consumer": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
- "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
- "dev": true
- },
- "@cspotcode/source-map-support": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz",
- "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==",
- "dev": true,
- "requires": {
- "@cspotcode/source-map-consumer": "0.8.0"
- }
- },
- "@eslint/eslintrc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz",
- "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.0.0",
- "globals": "^13.9.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
- "strip-json-comments": "^3.1.1"
- }
- },
- "@grpc/grpc-js": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.4.1.tgz",
- "integrity": "sha512-/chkA48TdAvATHA7RXJPeHQLdfFhpu51974s8htjO/XTDHA41j5+SkR5Io+lr9XsLmkZD6HxLyRAFGmA9wjO2w==",
- "dev": true,
- "requires": {
- "@grpc/proto-loader": "^0.6.4",
- "@types/node": ">=12.12.47"
- }
- },
- "@grpc/proto-loader": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.6.tgz",
- "integrity": "sha512-cdMaPZ8AiFz6ua6PUbP+LKbhwJbFXnrQ/mlnKGUyzDUZ3wp7vPLksnmLCBX6SHgSmjX7CbNVNLFYD5GmmjO4GQ==",
- "dev": true,
- "requires": {
- "@types/long": "^4.0.1",
- "lodash.camelcase": "^4.3.0",
- "long": "^4.0.0",
- "protobufjs": "^6.10.0",
- "yargs": "^16.1.1"
- }
- },
- "@humanwhocodes/config-array": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz",
- "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==",
- "dev": true,
- "requires": {
- "@humanwhocodes/object-schema": "^1.2.0",
- "debug": "^4.1.1",
- "minimatch": "^3.0.4"
- }
- },
- "@humanwhocodes/object-schema": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
- "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
- "dev": true
- },
- "@mapbox/node-pre-gyp": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.6.tgz",
- "integrity": "sha512-qK1ECws8UxuPqOA8F5LFD90vyVU33W7N3hGfgsOVfrJaRVc8McC3JClTDHpeSbL9CBrOHly/4GsNPAvIgNZE+g==",
- "dev": true,
- "requires": {
- "detect-libc": "^1.0.3",
- "https-proxy-agent": "^5.0.0",
- "make-dir": "^3.1.0",
- "node-fetch": "^2.6.5",
- "nopt": "^5.0.0",
- "npmlog": "^5.0.1",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.11"
- }
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true
- },
- "@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- }
- },
- "@protobufjs/aspromise": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
- "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=",
- "dev": true
- },
- "@protobufjs/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
- "dev": true
- },
- "@protobufjs/codegen": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
- "dev": true
- },
- "@protobufjs/eventemitter": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
- "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=",
- "dev": true
- },
- "@protobufjs/fetch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
- "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
- "dev": true,
- "requires": {
- "@protobufjs/aspromise": "^1.1.1",
- "@protobufjs/inquire": "^1.1.0"
- }
- },
- "@protobufjs/float": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
- "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=",
- "dev": true
- },
- "@protobufjs/inquire": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
- "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=",
- "dev": true
- },
- "@protobufjs/path": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
- "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=",
- "dev": true
- },
- "@protobufjs/pool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
- "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=",
- "dev": true
- },
- "@protobufjs/utf8": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
- "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=",
- "dev": true
- },
- "@tsconfig/node10": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
- "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
- "dev": true
- },
- "@tsconfig/node12": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
- "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
- "dev": true
- },
- "@tsconfig/node14": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
- "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
- "dev": true
- },
- "@tsconfig/node16": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
- "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
- "dev": true
- },
- "@types/bytebuffer": {
- "version": "5.0.42",
- "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.42.tgz",
- "integrity": "sha512-lEgKojWUAc/MG2t649oZS5AfYFP2xRNPoDuwDBlBMjHXd8MaGPgFgtCXUK7inZdBOygmVf10qxc1Us8GXC96aw==",
- "dev": true,
- "requires": {
- "@types/long": "*",
- "@types/node": "*"
- }
- },
- "@types/chai": {
- "version": "4.2.22",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz",
- "integrity": "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==",
- "dev": true
- },
- "@types/i18n": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@types/i18n/-/i18n-0.8.8.tgz",
- "integrity": "sha512-RI4LFAraGrimMTxXkediCMXGVLC6ksXIIo3U+d3E4n+Mhw3uIDbmokO7DHlPB/eu6Tn6KBv4IUE1WrrEDRdNUQ==",
- "dev": true
- },
- "@types/js-yaml": {
- "version": "3.12.7",
- "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz",
- "integrity": "sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ==",
- "dev": true
- },
- "@types/json-schema": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
- "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
- "dev": true
- },
- "@types/long": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
- "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==",
- "dev": true
- },
- "@types/mocha": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz",
- "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==",
- "dev": true
- },
- "@types/node": {
- "version": "16.11.4",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.4.tgz",
- "integrity": "sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==",
- "dev": true
- },
- "@types/promise.prototype.finally": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@types/promise.prototype.finally/-/promise.prototype.finally-2.0.4.tgz",
- "integrity": "sha512-bkzsMz11tGI5r/ZhJIVI1+QSWKKBcX/Llv0zoM2ufOH+o/3sLXwE5xCW0OUX81xPa4EGOyPKFlNrH9GH+IF4lg==",
- "dev": true
- },
- "@typescript-eslint/eslint-plugin": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.2.0.tgz",
- "integrity": "sha512-qQwg7sqYkBF4CIQSyRQyqsYvP+g/J0To9ZPVNJpfxfekl5RmdvQnFFTVVwpRtaUDFNvjfe/34TgY/dpc3MgNTw==",
- "dev": true,
- "requires": {
- "@typescript-eslint/experimental-utils": "5.2.0",
- "@typescript-eslint/scope-manager": "5.2.0",
- "debug": "^4.3.2",
- "functional-red-black-tree": "^1.0.1",
- "ignore": "^5.1.8",
- "regexpp": "^3.2.0",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
- },
- "dependencies": {
- "@typescript-eslint/scope-manager": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.2.0.tgz",
- "integrity": "sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.2.0",
- "@typescript-eslint/visitor-keys": "5.2.0"
- }
- },
- "@typescript-eslint/types": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.2.0.tgz",
- "integrity": "sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ==",
- "dev": true
- },
- "@typescript-eslint/visitor-keys": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.2.0.tgz",
- "integrity": "sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.2.0",
- "eslint-visitor-keys": "^3.0.0"
- }
- },
- "ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
- "dev": true
- }
- }
- },
- "@typescript-eslint/experimental-utils": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.2.0.tgz",
- "integrity": "sha512-fWyT3Agf7n7HuZZRpvUYdFYbPk3iDCq6fgu3ulia4c7yxmPnwVBovdSOX7RL+k8u6hLbrXcdAehlWUVpGh6IEw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.2.0",
- "@typescript-eslint/types": "5.2.0",
- "@typescript-eslint/typescript-estree": "5.2.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^3.0.0"
- },
- "dependencies": {
- "@typescript-eslint/scope-manager": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.2.0.tgz",
- "integrity": "sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.2.0",
- "@typescript-eslint/visitor-keys": "5.2.0"
- }
- },
- "@typescript-eslint/types": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.2.0.tgz",
- "integrity": "sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ==",
- "dev": true
- },
- "@typescript-eslint/typescript-estree": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.2.0.tgz",
- "integrity": "sha512-RsdXq2XmVgKbm9nLsE3mjNUM7BTr/K4DYR9WfFVMUuozHWtH5gMpiNZmtrMG8GR385EOSQ3kC9HiEMJWimxd/g==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.2.0",
- "@typescript-eslint/visitor-keys": "5.2.0",
- "debug": "^4.3.2",
- "globby": "^11.0.4",
- "is-glob": "^4.0.3",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
- }
- },
- "@typescript-eslint/visitor-keys": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.2.0.tgz",
- "integrity": "sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.2.0",
- "eslint-visitor-keys": "^3.0.0"
- }
- },
- "eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- }
- }
- },
- "@typescript-eslint/parser": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.1.0.tgz",
- "integrity": "sha512-vx1P+mhCtYw3+bRHmbalq/VKP2Y3gnzNgxGxfEWc6OFpuEL7iQdAeq11Ke3Rhy8NjgB+AHsIWEwni3e+Y7djKA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/scope-manager": "5.1.0",
- "@typescript-eslint/types": "5.1.0",
- "@typescript-eslint/typescript-estree": "5.1.0",
- "debug": "^4.3.2"
- }
- },
- "@typescript-eslint/scope-manager": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.1.0.tgz",
- "integrity": "sha512-yYlyVjvn5lvwCL37i4hPsa1s0ORsjkauhTqbb8MnpvUs7xykmcjGqwlNZ2Q5QpoqkJ1odlM2bqHqJwa28qV6Tw==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.1.0",
- "@typescript-eslint/visitor-keys": "5.1.0"
- }
- },
- "@typescript-eslint/types": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.1.0.tgz",
- "integrity": "sha512-sEwNINVxcB4ZgC6Fe6rUyMlvsB2jvVdgxjZEjQUQVlaSPMNamDOwO6/TB98kFt4sYYfNhdhTPBEQqNQZjMMswA==",
- "dev": true
- },
- "@typescript-eslint/typescript-estree": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.1.0.tgz",
- "integrity": "sha512-SSz+l9YrIIsW4s0ZqaEfnjl156XQ4VRmJsbA0ZE1XkXrD3cRpzuZSVCyqeCMR3EBjF27IisWakbBDGhGNIOvfQ==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.1.0",
- "@typescript-eslint/visitor-keys": "5.1.0",
- "debug": "^4.3.2",
- "globby": "^11.0.4",
- "is-glob": "^4.0.3",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
- }
- },
- "@typescript-eslint/visitor-keys": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.1.0.tgz",
- "integrity": "sha512-uqNXepKBg81JVwjuqAxYrXa1Ql/YDzM+8g/pS+TCPxba0wZttl8m5DkrasbfnmJGHs4lQ2jTbcZ5azGhI7kK+w==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.1.0",
- "eslint-visitor-keys": "^3.0.0"
- }
- },
- "@ungap/promise-all-settled": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
- "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
- "dev": true
- },
- "abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
- "dev": true
- },
- "abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "dev": true,
- "requires": {
- "event-target-shim": "^5.0.0"
- }
- },
- "acorn": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
- "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true
- },
- "acorn-walk": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
- "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
- "dev": true
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "requires": {
- "debug": "4"
- }
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "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"
- }
- },
- "ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "aproba": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
- "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
- "dev": true
- },
- "are-we-there-yet": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
- "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
- "dev": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- }
- },
- "arg": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
- "dev": true
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- },
- "dependencies": {
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- }
- }
- },
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
- },
- "arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "dev": true
- },
- "ascli": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
- "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
- "dev": true,
- "requires": {
- "colour": "~0.7.1",
- "optjs": "~3.2.2"
- }
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true
- },
- "bignumber.js": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz",
- "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==",
- "dev": true
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "buffer-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=",
- "dev": true
- },
- "buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "bytebuffer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
- "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=",
- "dev": true,
- "requires": {
- "long": "~3"
- },
- "dependencies": {
- "long": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
- "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=",
- "dev": true
- }
- }
- },
- "call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
- "dev": true
- },
- "chai": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
- "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
- "dev": true,
- "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.1",
- "type-detect": "^4.0.5"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
- "dev": true
- },
- "chokidar": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
- "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "dependencies": {
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- }
- }
- },
- "chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "dev": true
- },
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "dev": true
- },
- "colour": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
- "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true
- },
- "create-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
- "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
- "dev": true
- },
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "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==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dev": true,
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "dev": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
- "dev": true
- },
- "diff": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
- "dev": true
- },
- "dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "requires": {
- "path-type": "^4.0.0"
- }
- },
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "duplexify": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
- "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.4.1",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1",
- "stream-shift": "^1.0.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==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.1"
- }
- },
- "es-abstract": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
- "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "get-symbol-description": "^1.0.0",
- "has": "^1.0.3",
- "has-symbols": "^1.0.2",
- "internal-slot": "^1.0.3",
- "is-callable": "^1.2.4",
- "is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.1",
- "is-string": "^1.0.7",
- "is-weakref": "^1.0.1",
- "object-inspect": "^1.11.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.1"
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "eslint": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz",
- "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==",
- "dev": true,
- "requires": {
- "@eslint/eslintrc": "^1.0.3",
- "@humanwhocodes/config-array": "^0.6.0",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^6.0.0",
- "eslint-utils": "^3.0.0",
- "eslint-visitor-keys": "^3.0.0",
- "espree": "^9.0.0",
- "esquery": "^1.4.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^6.0.1",
- "globals": "^13.6.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.0.4",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.2.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
- "strip-json-comments": "^3.1.0",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- }
- }
- },
- "eslint-scope": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz",
- "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- }
- },
- "eslint-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
- "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^2.0.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
- "dev": true
- }
- }
- },
- "eslint-visitor-keys": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz",
- "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==",
- "dev": true
- },
- "espree": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz",
- "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==",
- "dev": true,
- "requires": {
- "acorn": "^8.5.0",
- "acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^3.0.0"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esquery": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
- "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
- "dev": true,
- "requires": {
- "estraverse": "^5.1.0"
- }
- },
- "esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "requires": {
- "estraverse": "^5.2.0"
- }
- },
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "dev": true
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "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==",
- "dev": true
- },
- "fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "dependencies": {
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- }
- }
- },
- "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==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "fast-text-encoding": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
- "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==",
- "dev": true
- },
- "fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "dev": true,
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "requires": {
- "flat-cache": "^3.0.4"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true
- },
- "flat-cache": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
- "dev": true,
- "requires": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- }
- },
- "flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
- "dev": true
- },
- "fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "optional": true
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
- },
- "gauge": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.1.tgz",
- "integrity": "sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ==",
- "dev": true,
- "requires": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.2",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.1",
- "object-assign": "^4.1.1",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1 || ^2.0.0",
- "strip-ansi": "^3.0.1 || ^4.0.0",
- "wide-align": "^1.1.2"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "gaxios": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz",
- "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==",
- "dev": true,
- "requires": {
- "abort-controller": "^3.0.0",
- "extend": "^3.0.2",
- "https-proxy-agent": "^5.0.0",
- "is-stream": "^2.0.0",
- "node-fetch": "^2.6.1"
- }
- },
- "gcp-metadata": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz",
- "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==",
- "dev": true,
- "requires": {
- "gaxios": "^4.0.0",
- "json-bigint": "^1.0.0"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "get-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=",
- "dev": true
- },
- "get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- }
- },
- "get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
- }
- },
- "glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.3"
- }
- },
- "globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
- "dev": true,
- "requires": {
- "type-fest": "^0.20.2"
- }
- },
- "globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
- },
- "dependencies": {
- "ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
- "dev": true
- }
- }
- },
- "google-auth-library": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz",
- "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==",
- "dev": true,
- "requires": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- }
- },
- "google-gax": {
- "version": "2.28.0",
- "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.28.0.tgz",
- "integrity": "sha512-kuqc8a4+CTCMBcF3tlOL7Sa74JWkTzcZxatAQTCVK35WToXkHnJ0qncFOJuegUv3EbV9IQY4j/+NZdFLv+lbTA==",
- "dev": true,
- "requires": {
- "@grpc/grpc-js": "~1.4.0",
- "@grpc/proto-loader": "^0.6.1",
- "@types/long": "^4.0.0",
- "abort-controller": "^3.0.0",
- "duplexify": "^4.0.0",
- "fast-text-encoding": "^1.0.3",
- "google-auth-library": "^7.6.1",
- "is-stream-ended": "^0.1.4",
- "node-fetch": "^2.6.1",
- "object-hash": "^2.1.1",
- "proto3-json-serializer": "^0.1.1",
- "protobufjs": "6.11.2",
- "retry-request": "^4.0.0"
- },
- "dependencies": {
- "google-auth-library": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.1.tgz",
- "integrity": "sha512-nQxgM1ZopUMcpMnu95kOSzI+9tJl4YDOZJomSTBGlRLpxfBopdwto7WvzoI87HuN0nQqVETgOsHi/C/po1rppA==",
- "dev": true,
- "requires": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "google-p12-pem": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.2.tgz",
- "integrity": "sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==",
- "dev": true,
- "requires": {
- "node-forge": "^0.10.0"
- }
- },
- "growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "dev": true
- },
- "grpc": {
- "version": "1.24.11",
- "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.24.11.tgz",
- "integrity": "sha512-8/AQdFCzCeCDWW3SoaMNp6ccbRvTQEH1O1u1uFtt29eWsg5gSZCJ3m6fbkduEIh3smY7WAPP+LgVJ5n3nZRxcA==",
- "dev": true,
- "requires": {
- "@mapbox/node-pre-gyp": "^1.0.4",
- "@types/bytebuffer": "^5.0.40",
- "lodash.camelcase": "^4.3.0",
- "lodash.clone": "^4.5.0",
- "nan": "^2.13.2",
- "protobufjs": "^5.0.3"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "protobufjs": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz",
- "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==",
- "dev": true,
- "requires": {
- "ascli": "~1",
- "bytebuffer": "~5",
- "glob": "^7.0.5",
- "yargs": "^3.10.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- }
- },
- "y18n": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
- "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
- "dev": true
- },
- "yargs": {
- "version": "3.32.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
- "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
- "dev": true,
- "requires": {
- "camelcase": "^2.0.1",
- "cliui": "^3.0.3",
- "decamelize": "^1.1.1",
- "os-locale": "^1.4.0",
- "string-width": "^1.0.1",
- "window-size": "^0.1.4",
- "y18n": "^3.2.0"
- }
- }
- }
- },
- "gtoken": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz",
- "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==",
- "dev": true,
- "requires": {
- "gaxios": "^4.0.0",
- "google-p12-pem": "^3.0.3",
- "jws": "^4.0.0"
- }
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
- "dev": true
- },
- "has-tostringtag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
- "dev": true,
- "requires": {
- "has-symbols": "^1.0.2"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "dev": true,
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
- "i18n": {
- "version": "0.8.6",
- "resolved": "https://registry.npmjs.org/i18n/-/i18n-0.8.6.tgz",
- "integrity": "sha512-aMsJq8i1XXrb+BBsgmJBwak9mr69zPEIAUPb6c5yw2G/O4k1Q52lBxL+agZdQDN/RGf1ylQzrCswsOOgIiC1FA==",
- "dev": true,
- "requires": {
- "debug": "*",
- "make-plural": "^6.0.1",
- "math-interval-parser": "^2.0.1",
- "messageformat": "^2.3.0",
- "mustache": "*",
- "sprintf-js": "^1.1.2"
- }
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
- "import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "internal-slot": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
- "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.1.0",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
- }
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
- "dev": true
- },
- "is-bigint": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
- "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
- "dev": true,
- "requires": {
- "has-bigints": "^1.0.1"
- }
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-boolean-object": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
- "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-callable": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
- "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
- "dev": true
- },
- "is-date-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
- "dev": true,
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-negative-zero": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
- "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-number-object": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
- "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
- "dev": true,
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true
- },
- "is-regex": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-shared-array-buffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
- "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
- "dev": true
- },
- "is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true
- },
- "is-stream-ended": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz",
- "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==",
- "dev": true
- },
- "is-string": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
- "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
- "dev": true,
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-symbol": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
- "dev": true,
- "requires": {
- "has-symbols": "^1.0.2"
- }
- },
- "is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true
- },
- "is-weakref": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz",
- "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0"
- }
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "json-bigint": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
- "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
- "dev": true,
- "requires": {
- "bignumber.js": "^9.0.0"
- }
- },
- "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==",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "jwa": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
- "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
- "dev": true,
- "requires": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "jws": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
- "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
- "dev": true,
- "requires": {
- "jwa": "^2.0.0",
- "safe-buffer": "^5.0.1"
- }
- },
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "dev": true,
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
- "dev": true
- },
- "lodash.clone": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
- "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=",
- "dev": true
- },
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- }
- },
- "long": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==",
- "dev": true
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "make-error": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
- },
- "make-plural": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-6.2.2.tgz",
- "integrity": "sha512-8iTuFioatnTTmb/YJjywkVIHLjcwkFD9Ms0JpxjEm9Mo8eQYkh1z+55dwv4yc1jQ8ftVBxWQbihvZL1DfzGGWA==",
- "dev": true
- },
- "math-interval-parser": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-2.0.1.tgz",
- "integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==",
- "dev": true
- },
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true
- },
- "messageformat": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-2.3.0.tgz",
- "integrity": "sha512-uTzvsv0lTeQxYI2y1NPa1lItL5VRI8Gb93Y2K2ue5gBPyrbJxfDi/EYWxh2PKv5yO42AJeeqblS9MJSh/IEk4w==",
- "dev": true,
- "requires": {
- "make-plural": "^4.3.0",
- "messageformat-formatters": "^2.0.1",
- "messageformat-parser": "^4.1.2"
- },
- "dependencies": {
- "make-plural": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-4.3.0.tgz",
- "integrity": "sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- }
- }
- },
- "messageformat-formatters": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/messageformat-formatters/-/messageformat-formatters-2.0.1.tgz",
- "integrity": "sha512-E/lQRXhtHwGuiQjI7qxkLp8AHbMD5r2217XNe/SREbBlSawe0lOqsFb7rflZJmlQFSULNLIqlcjjsCPlB3m3Mg==",
- "dev": true
- },
- "messageformat-parser": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-4.1.3.tgz",
- "integrity": "sha512-2fU3XDCanRqeOCkn7R5zW5VQHWf+T3hH65SzuqRvjatBK7r4uyFa5mEX+k6F9Bd04LVM5G4/BHBTUJsOdW7uyg==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true
- },
- "minipass": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz",
- "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- }
- },
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true
- },
- "mocha": {
- "version": "9.1.3",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz",
- "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==",
- "dev": true,
- "requires": {
- "@ungap/promise-all-settled": "1.1.2",
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.2",
- "debug": "4.3.2",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.1.7",
- "growl": "1.10.5",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "3.0.4",
- "ms": "2.1.3",
- "nanoid": "3.1.25",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "which": "2.0.2",
- "workerpool": "6.1.5",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.0.0"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "diff": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
- "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
- "dev": true
- },
- "glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "yargs-parser": {
- "version": "20.2.4",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
- "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
- "dev": true
- }
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "mustache": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
- "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
- "dev": true
- },
- "nan": {
- "version": "2.15.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
- "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==",
- "dev": true
- },
- "nanoid": {
- "version": "3.1.25",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
- "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
- "dev": true
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "node-fetch": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
- "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
- "dev": true,
- "requires": {
- "whatwg-url": "^5.0.0"
- }
- },
- "node-forge": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
- "dev": true
- },
- "nopt": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
- "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
- "dev": true,
- "requires": {
- "abbrev": "1"
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "npmlog": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
- "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
- "dev": true,
- "requires": {
- "are-we-there-yet": "^2.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^3.0.0",
- "set-blocking": "^2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
- "object-hash": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
- "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
- "dev": true
- },
- "object-inspect": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
- "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==",
- "dev": true
- },
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true
- },
- "object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "optionator": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
- "dev": true,
- "requires": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- }
- },
- "optjs": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
- "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=",
- "dev": true
- },
- "os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
- "dev": true,
- "requires": {
- "lcid": "^1.0.0"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true
- },
- "picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
- "dev": true
- },
- "prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
- },
- "promise.prototype.finally": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz",
- "integrity": "sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- }
- },
- "proto3-json-serializer": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.4.tgz",
- "integrity": "sha512-bFzdsKU/zaTobWrRxRniMZIzzcgKYlmBWL1gAcTXZ2M7TQTGPI0JoYYs6bN7tpWj59ZCfwg7Ii/A2e8BbQGYnQ==",
- "dev": true
- },
- "protobufjs": {
- "version": "6.11.2",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz",
- "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==",
- "dev": true,
- "requires": {
- "@protobufjs/aspromise": "^1.1.2",
- "@protobufjs/base64": "^1.1.2",
- "@protobufjs/codegen": "^2.0.4",
- "@protobufjs/eventemitter": "^1.1.0",
- "@protobufjs/fetch": "^1.1.0",
- "@protobufjs/float": "^1.0.2",
- "@protobufjs/inquire": "^1.1.0",
- "@protobufjs/path": "^1.1.2",
- "@protobufjs/pool": "^1.1.0",
- "@protobufjs/utf8": "^1.1.0",
- "@types/long": "^4.0.1",
- "@types/node": ">=13.7.0",
- "long": "^4.0.0"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "regexpp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
- "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
- "dev": true
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- },
- "retry-request": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz",
- "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "extend": "^3.0.2"
- }
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- },
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- }
- },
- "signal-exit": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz",
- "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "source-map-support": {
- "version": "0.5.20",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
- "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "sprintf-js": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
- "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
- "dev": true
- },
- "stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "string.prototype.trimend": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
- "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
- "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "tar": {
- "version": "6.1.11",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
- "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
- "dev": true,
- "requires": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
- "dev": true
- },
- "ts-node": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz",
- "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==",
- "dev": true,
- "requires": {
- "@cspotcode/source-map-support": "0.7.0",
- "@tsconfig/node10": "^1.0.7",
- "@tsconfig/node12": "^1.0.7",
- "@tsconfig/node14": "^1.0.0",
- "@tsconfig/node16": "^1.0.2",
- "acorn": "^8.4.1",
- "acorn-walk": "^8.1.1",
- "arg": "^4.1.0",
- "create-require": "^1.1.0",
- "diff": "^4.0.1",
- "make-error": "^1.1.1",
- "yn": "3.1.1"
- },
- "dependencies": {
- "diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true
- },
- "yn": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
- "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
- "dev": true
- }
- }
- },
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- },
- "tsutils": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
- "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
- "dev": true,
- "requires": {
- "tslib": "^1.8.1"
- }
- },
- "type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- },
- "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==",
- "dev": true
- },
- "type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true
- },
- "typescript": {
- "version": "4.4.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
- "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
- "dev": true
- },
- "unbox-primitive": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
- "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
- "which-boxed-primitive": "^1.0.2"
- }
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "v8-compile-cache": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
- "dev": true
- },
- "webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
- "dev": true
- },
- "whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "dev": true,
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-boxed-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "dev": true,
- "requires": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- }
- },
- "wide-align": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
- "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
- "dev": true,
- "requires": {
- "string-width": "^1.0.2 || 2 || 3 || 4"
- }
- },
- "window-size": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
- "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=",
- "dev": true
- },
- "word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
- "dev": true
- },
- "workerpool": {
- "version": "6.1.5",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
- "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
- "dev": true
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true
- },
- "yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "requires": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
- "dev": true
- },
- "decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true
- }
- }
- },
- "yn": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz",
- "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=",
- "dev": true
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
- }
- }
-}
diff --git a/test/prod/package.json b/test/prod/package.json
deleted file mode 100644
index f55c007a..00000000
--- a/test/prod/package.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "lis-mon-livre-test",
- "version": "1.0.0",
- "description": "",
- "private": true,
- "scripts": {
- "lint": "eslint \"test/*.ts\"",
- "enable-activity-controls": "env GOOGLE_APPLICATION_CREDENTIALS=$PWD/service_account.json web-and-app-activity-controls",
- "test": "npm run lint && env GOOGLE_APPLICATION_CREDENTIALS=$PWD/service_account.json PROJECT_ID=$(cat $PWD/service_account.json| jq -r '.project_id') mocha --recursive --require ts-node/register test/*.ts"
- },
- "author": "",
- "license": "ISC",
- "devDependencies": {
- "@assistant/conversation-testing": "^1.0.0",
- "@types/mocha": "^9.0.0",
- "@types/node": "^16.11.4",
- "@typescript-eslint/eslint-plugin": "^5.2.0",
- "@typescript-eslint/parser": "^5.1.0",
- "chai": "^4.3.4",
- "eslint": "^8.1.0",
- "mocha": "^9.1.3",
- "ts-node": "^10.4.0",
- "typescript": "^4.4.4"
- }
-}
diff --git a/test/prod/test/test1.ts b/test/prod/test/test1.ts
deleted file mode 100644
index 775959f1..00000000
--- a/test/prod/test/test1.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import 'mocha';
-
-import {env} from 'process';
-import {ActionsOnGoogleTestManager} from '@assistant/conversation-testing';
-import {ok} from 'assert';
-
-const DEFAULT_LOCALE = 'fr-FR';
-const DEFAULT_SURFACE = 'PHONE';
-const CONTINUE_CONVO_PROMPT = "Bienvenue dans l'application d'écoute de livre audio valentin hauy Que voulez-vous faire ? Vous pouvez dire informations ou espace membres";
-
-const PROJECT_ID = env['PROJECT_ID'] || '';
-const TRIGGER_PHRASE = 'Parler avec valentin audio';
-
-console.log(`PROJECT_ID=${PROJECT_ID}`);
-
-ok(PROJECT_ID, 'no PROJECT_ID');
-
-// tslint:disable:only-arrow-functions
-
-describe('My Action Test Suite', function () {
- // Set the timeout for each test run to 60s.
- this.timeout(60000);
- let test: ActionsOnGoogleTestManager;
-
- async function startConversation() {
- await test.sendQuery(TRIGGER_PHRASE);
- test.assertSpeech(CONTINUE_CONVO_PROMPT);
- test.assertText(CONTINUE_CONVO_PROMPT);
- test.assertIntent('actions.intent.MAIN');
- test.assertScene('home_lvl1');
-
- await test.sendQuery("espace membres");
- test.assertText("Pour continuer d'utiliser valentin audio, je dois associer votre compte valentin audio à Google. Êtes-vous d'accord ?");
-
- await test.sendQuery("oui");
- test.assertText("");
-
- }
-
- before('before all', async () => {
- // Load project settings to read project ID and trigger phrase.
- test = new ActionsOnGoogleTestManager({projectId: PROJECT_ID});
- await test.writePreviewFromDraft();
- test.setSuiteLocale(DEFAULT_LOCALE);
- test.setSuiteSurface(DEFAULT_SURFACE);
- });
-
- afterEach('post test cleans', async () => {
- test.cleanUpAfterTest();
- });
-
- it('trigger only', async () => {
- await startConversation();
- // test.assertConversationEnded();
- });
-});
diff --git a/webhooks/.firebaserc b/webhooks/.firebaserc
deleted file mode 100644
index 6d5da75c..00000000
--- a/webhooks/.firebaserc
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "projects": {
- "default": "valentin-4"
- }
-}
diff --git a/webhooks/.gitignore b/webhooks/.gitignore
deleted file mode 100644
index dbb58ffb..00000000
--- a/webhooks/.gitignore
+++ /dev/null
@@ -1,66 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-firebase-debug.log*
-firebase-debug.*.log*
-
-# Firebase cache
-.firebase/
-
-# Firebase config
-
-# Uncomment this if you'd like others to create their own Firebase project.
-# For a team working on the same Firebase project(s), it is recommended to leave
-# it commented so all members can deploy to the same project(s) in .firebaserc.
-# .firebaserc
-
-# Runtime data
-pids
-*.pid
-*.seed
-*.pid.lock
-
-# Directory for instrumented libs generated by jscoverage/JSCover
-lib-cov
-
-# Coverage directory used by tools like istanbul
-coverage
-
-# nyc test coverage
-.nyc_output
-
-# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
-.grunt
-
-# Bower dependency directory (https://bower.io/)
-bower_components
-
-# node-waf configuration
-.lock-wscript
-
-# Compiled binary addons (http://nodejs.org/api/addons.html)
-build/Release
-
-# Dependency directories
-node_modules/
-
-# Optional npm cache directory
-.npm
-
-# Optional eslint cache
-.eslintcache
-
-# Optional REPL history
-.node_repl_history
-
-# Output of 'npm pack'
-*.tgz
-
-# Yarn Integrity file
-.yarn-integrity
-
-# dotenv environment variables file
-.env
diff --git a/webhooks/debug/test.js b/webhooks/debug/test.js
new file mode 100644
index 00000000..0f73022d
--- /dev/null
+++ b/webhooks/debug/test.js
@@ -0,0 +1,14 @@
+
+const opds = require('opds-fetcher-parser');
+const fs = require('fs');
+
+(async function () {
+
+ const o = new opds.OpdsFetcher();
+
+ const feed = await o.feedRequest("https://storage.googleapis.com/audiobook_edrlab/navigation/thematic_list.json");
+
+ console.log(feed);
+ fs.writeFileSync("/tmp/feed.json", JSON.stringify(feed));
+
+})()
\ No newline at end of file
diff --git a/webhooks/firebase.json b/webhooks/firebase.json
index ffde5d9f..0967ef42 100644
--- a/webhooks/firebase.json
+++ b/webhooks/firebase.json
@@ -1,19 +1 @@
-{
- "functions": {
- "predeploy": [
- "npm --prefix \"$RESOURCE_DIR\" run lint"
- ],
- "source": "functions"
- },
- "emulators": {
- "functions": {
- "port": 5001
- },
- "firestore": {
- "port": 8080
- },
- "ui": {
- "enabled": true
- }
- }
-}
+{}
diff --git a/webhooks/functions/.eslintrc.js b/webhooks/functions/.eslintrc.js
index e5639392..1554c48a 100644
--- a/webhooks/functions/.eslintrc.js
+++ b/webhooks/functions/.eslintrc.js
@@ -1,18 +1,21 @@
module.exports = {
- root: true,
- env: {
- es6: true,
- node: true,
- },
- "parserOptions": {
- "ecmaVersion": 2017
- },
- extends: [
- "eslint:recommended",
- // "google",
- ],
- rules: {
- quotes: ["error", "double"],
- "no-unused-vars": "off"
- },
+ "env": {
+ },
+ "extends": [
+ "google"
+ ],
+ "parser": "@typescript-eslint/parser",
+ "parserOptions": {
+ "ecmaVersion": 13,
+ "sourceType": "module"
+ },
+ "plugins": [
+ "@typescript-eslint"
+ ],
+ "rules": {
+ "max-len": 0,
+ "require-jsdoc": 0,
+ "camelcase": 0,
+ "new-cap": 0,
+ }
};
diff --git a/webhooks/functions/.gitignore b/webhooks/functions/.gitignore
index 40b878db..e568fe8e 100644
--- a/webhooks/functions/.gitignore
+++ b/webhooks/functions/.gitignore
@@ -1 +1,3 @@
-node_modules/
\ No newline at end of file
+node_modules/
+
+build/
diff --git a/webhooks/functions/cd.sh b/webhooks/functions/cd.sh
new file mode 100755
index 00000000..6e15b752
--- /dev/null
+++ b/webhooks/functions/cd.sh
@@ -0,0 +1,11 @@
+
+function cd {
+ # actually change the directory with all args passed to the function
+ builtin cd "$@"
+
+ case $PWD/ in
+ /Users/edrlab/Documents/edrlab/projects/lis-mon-livre-project/lis-mon-livre-edrlab/webhooks/functions/*)
+ node14
+ ;;
+ esac
+}
diff --git a/webhooks/functions/index.js b/webhooks/functions/index.js
deleted file mode 100644
index 4fd9cb0a..00000000
--- a/webhooks/functions/index.js
+++ /dev/null
@@ -1,604 +0,0 @@
-const {conversation, Media} = require("@assistant/conversation");
-const functions = require("firebase-functions");
-const admin = require("firebase-admin");
-
-admin.initializeApp();
-
-const db = admin.firestore();
-
-const {OpdsFetcher} = require("opds-fetcher-parser");
-const {ok} = require("assert");
-
-const app = conversation();
-
-const appHandle = app.handle.bind(app);
-
-app.handle = (path, fn) => {
-
- appHandle(path, async (conv) => {
-
- let pass = false;
- try {
-
- const id = conv.user.params.bearerToken;
-
- ok(id, "bearerToken not defined");
-
- const docRef = db.collection("user-storage").doc(id);
- await Promise.resolve(fn(conv));
- pass = true;
- await docRef.set(conv.user.params);
-
- } catch (e) {
- console.error(e);
- if (!pass)
- await Promise.resolve(fn(conv));
-
- }
- });
-};
-
-function isValidHttpUrl(string) {
- let url;
-
- try {
- url = new URL(string);
- } catch (_) {
- return false;
- }
-
- return url.protocol === "http:" || url.protocol === "https:";
-}
-
-async function getPubsFromFeed(url) {
-
- const opds = new OpdsFetcher();
- const feed = await opds.feedRequest(url);
-
- ok(Array.isArray(feed.publications), "no publications");
- const list = feed.publications
- .filter(({openAccessLinks: l}) /* : l is IOpdsLinkView[]*/ => {
- return (
- Array.isArray(l) &&
- l[0] &&
- isValidHttpUrl(l[0].url)
- );
- })
- .slice(0, 5)
- .map(({title, authors, openAccessLinks}) => ({
- title: title,
- author: Array.isArray(authors) ? authors[0].name : "",
- webpuburl: openAccessLinks[0].url,
- }));
-
- return list;
-}
-
-// ----------------
-//
-// CONVERSATION START
-//
-// ----------------
-
-app.handle("cancel", (conv) => {
- // Implement your code here
- // conv.add("cancel");
-});
-
-app.handle("test_webhook", (conv) => {
-
- conv.add("Webook works :", functions.config().debug.message || "");
- console.log("TEST OK");
-});
-
-// -----------
-// LVL2 MENU
-// SELECTION
-// -----------
-
-
-const WEBPUB_URL = "https://storage.googleapis.com/audiobook_edrlab/webpub/";
-
-const extract_name_from_url = (url) => {
-
- const name = /\/(?:.(?!\/))+$/.exec(url)[0];
-
- if (typeof name === "string")
- return name.slice(1);
-
- return "";
-};
-
-// -----------
-// LVL3 MENU
-// SELECTION
-// -----------
-
-app.handle("selection_genre_lvl3", async (conv) => {
-
- conv.add("sélection par genre");
-});
-
-app.handle("selection_thematic_list_lvl3", async (conv) => {
-
- conv.add("sélection par liste thématique");
-});
-
-const SELECTION_URL = "https://storage.googleapis.com/audiobook_edrlab/groups/popular.json"
-app.handle("selection_my_list_lvl3", async (conv) => {
-
- const url = SELECTION_URL;
- const list = await getPubsFromFeed(url);
-
- console.log("PUBs: ", list);
-
- const length = list.length;
- if (length > 1) {
- conv.scene.next.name = "select_pub_after_selection";
- conv.add(`Il y a ${length} publications :\n`);
-
- let text = "";
- list.map(({title, author}, i) => {
- text += `numero ${i + 1} : ${title} ${author ? `de ${author}` : ""}\n`;
- });
-
- conv.add(text);
- } else if (length === 1) {
- conv.scene.next.name = "ask_to_resume_listening_at_last_offset";
-
- conv.user.params.p_n = extract_name_from_url(list[0].webpuburl);
- } else {
- conv.scene.next.name = "home_members";
-
- conv.add("aucun résultat trouvé");
- }
-
- console.log("selection_my_list_lvl3 EXIT");
-
-});
-
-// ---------
-// LVL3 MENU
-// SELECTION
-// ---------
-
-app.handle("select_publication_number_after_selection", async (conv) => {
- console.log("select_publication_number START");
-
- const number = conv.intent.params.number.resolved;
-
- const url = SELECTION_URL;
- const list = await getPubsFromFeed(url);
- const pub = list[number - 1];
- if (pub) {
- console.log("PUB: ", pub);
-
- const url = extract_name_from_url(pub.webpuburl);
-
- if (!conv.user.params.player) {
- conv.user.params.player = {};
- }
-
- const history = conv.user.params.player[url];
- if (!history) {
- conv.user.params.p_i = 0;
- conv.user.params.p_t = 0;
- } else {
- conv.user.params.p_i = history.i;
- conv.user.params.p_t = history.t;
- }
- conv.user.params.p_n = url;
-
- // should be specified
- conv.scene.next.name = "ask_to_resume_listening_at_last_offset";
- } else {
- console.log("NO PUBS found !!");
- conv.add(`Le numéro ${number} est inconnu. Veuillez choisir un autre numéro.`);
- conv.scene.next.name = "select_pub_after_selection";
- }
-
- console.log("select_publication_number END");
-});
-
-
-// -----------
-// LVL2 MENU
-// SELECTION
-// -----------
-
-app.handle("reprendre_mon_livre_lvl2", (conv) => {
-
- // void
-
- const name = conv.user.params.p_n;
- if (!name) {
- conv.scene.next.name = "home_members";
- conv.add("aucune lecture en cours");
- }
-
-});
-
-app.handle("ecouter_livre_audio_lvl2", (conv) => {
- // void
-
- console.log("écouter_livre_audio_lvl2");
-
- // first entry point for search
- //
- // VOID
- //
- // search_livre_lvl2 is the main entry point
-});
-
-
-// ----------
-// LVL2 MENU
-// SEARCH
-// ----------
-
-const SEARCH_URL = "https://europe-west1-audiobooks-a6348.cloudfunctions.net/indexer?url=https://storage.googleapis.com/audiobook_edrlab/navigation/all.json&query={query}";
-
-// if scene.slot.status == "FINAL" => call search_livre_lvl2
-app.handle("search_livre_lvl2", async (conv) => {
- // void
-
- console.log("search_livre_lvl2 START");
-
- let query = null;
-
- try {
- query = conv.intent.params.query.resolved;
- } catch (_) {
- // ignore
- }
-
- ok(typeof query === "string", "aucune requete demandée");
- conv.session.params.query = query;
-
- const url = SEARCH_URL.replace("{query}", encodeURIComponent(query));
- console.log("search URL: ", url);
-
- const list = await getPubsFromFeed(url);
-
- console.log("PUBs: ");
- console.log(list);
-
- const length = list.length;
- if (length > 1) {
- conv.scene.next.name = "select_pub_after_search";
- conv.add(`Il y a ${length} publications :\n`);
-
- let text = "";
- list.map(({title, author}, i) => {
- text += `numero ${i + 1} : ${title} ${author ? `de ${author}` : ""}\n`;
- });
-
- conv.add(text);
- } else if (length === 1) {
- conv.scene.next.name = "ask_to_resume_listening_at_last_offset";
-
- conv.user.params.p_n = extract_name_from_url(list[0].webpuburl);
- } else {
- conv.scene.next.name = "search";
-
- conv.add("aucun résultat trouvé");
- }
-
- console.log("search_livre_lvl2 STOP");
-
- // slot available for research
-});
-
-app.handle("select_publication_number_after_search", async (conv) => {
- console.log("select_publication_number START");
-
- const number = conv.intent.params.number.resolved;
-
- console.log("NUMBER: ", number);
- const query = conv.session.params.query;
- ok(typeof query === "string", "aucune requete demandée");
-
- const url = SEARCH_URL.replace("{query}", encodeURIComponent(query));
- console.log("select_publication_number_after_search URL: ", url);
-
- const list = await getPubsFromFeed(url);
- const pub = list[number - 1];
- if (pub) {
- console.log("PUB: ", pub);
-
- const name = extract_name_from_url(pub.webpuburl);
-
- if (!conv.user.params.player) {
- conv.user.params.player = {};
- }
-
- const history = conv.user.params.player[name];
- if (!history) {
- conv.user.params.p_i= 0;
- conv.user.params.p_t = 0;
- } else {
- conv.user.params.p_i = history.i;
- conv.user.params.p_t = history.t;
- }
- conv.user.params.p_n = name;
-
- // should be specified
- conv.scene.next.name = "ask_to_resume_listening_at_last_offset";
- } else {
- console.log("NO PUBS found !!");
- conv.add(`Le numéro ${number} est inconnu. Veuillez choisir un autre numéro.`);
- conv.scene.next.name = "select_pub_after_search";
- }
-
- console.log("select_publication_number END");
-});
-
-
-// ----------
-// LVL2 MENU
-// SEARCH
-// ----------
-
-app.handle("ask_to_resume_listening_at_last_offset", async (conv) => {
-
- const { p_n: name, p_i, p_t } = conv.user.params;
- if (name && (p_i > 0 || p_t > 0)) {
- console.log("ask to resume enabled , wait yes or no");
- // ask yes or no in the no-code scene
- const history = conv.user.params.player[name];
- const date = history.d;
- // TODO: use the date info
-
- conv.add("Voulez-vous reprendre la lecture là où c'était arrêtée ?");
- } else {
- console.log("no need to ask to resume");
- conv.scene.next.name = "player";
- }
-
-});
-
-app.handle("ask_to_resume_listening_at_last_offset__yes", async (conv) => {
-
- // nothing
- // not used
- conv.scene.next.name = "player";
-
-});
-
-
-app.handle("ask_to_resume_listening_at_last_offset__no", async (conv) => {
-
- const name = conv.user.params.p_n;
- if (name) {
- console.log("erase ", name, " resume listening NO");
- conv.user.params.p_i = 0;
- conv.user.params.p_t = 0;
- }
- conv.scene.next.name = "player";
-
-});
-
-
-// ----------
-// PLAYER
-// ----------
-
-app.handle("player", async (conv) => {
- const name = conv.user.params.p_n;
-
- const url = WEBPUB_URL + name;
- console.log("Player URL:", url);
- ok(url, "url not defined");
- ok(isValidHttpUrl(url), "url not valid " + url);
-
- const opds = new OpdsFetcher();
- const webpub = await opds.webpubRequest(url);
- ok(webpub, "webpub not defined");
-
- const startIndexRaw = conv.user.params.p_i;
- const startIndex =
- typeof startIndexRaw === "number" &&
- startIndexRaw <= webpub.readingOrders.length ? startIndexRaw : 0;
-
- const startTimeRaw = conv.user.params.p_t;
- const startTime =
- typeof startTimeRaw === "number" &&
- startTimeRaw <= (webpub.readingOrders[startIndex].duration || Infinity) ? startTimeRaw : 0;
-
- const mediaObjects = webpub.readingOrders
- .map((v, i) => ({
- name: `${webpub.title || ""} - ${i + 1}`,
- url: v.url,
- image: {
- large: {
- alt: webpub.title,
- url: webpub.cover || "",
- },
- },
- })).slice(startIndex);
-
- console.log("Media list");
- console.log(mediaObjects);
- console.log("Start Index = ", startIndex, " Start Time = ", startTime, " Start Time");
-
- conv.add(
- new Media({
- mediaObjects: mediaObjects,
- mediaType: "AUDIO",
- optionalMediaControls: ["PAUSED", "STOPPED"],
- startOffset: `${startTime}s`,
- }),
- );
-});
-
-// ----------
-// PLAYER
-// ----------
-
-
-// ////////////////////////
-// Media PLAYET CONTEXT //
-// ////////////////////////
-
-function persistMediaPlayer(conv) {
- if (conv.request.context) {
- // Persist the media progress value
-
- const progress = parseInt(conv.request.context.media.progress, 10);
- const index = conv.request.context.media.index;
- const name = conv.user.params.p_n;
-
- conv.user.params.p_i = index;
- conv.user.params.p_t = progress;
-
- if (!conv.user.params.player) {
- conv.user.params.player = {};
- }
-
- conv.user.params.player[name] = {
- i: index,
- t: progress,
- d: new Date().getTime(),
- };
-
- console.log("player persistence :");
- console.log(conv.user.params.player);
- } else {
-
- console.log("NO conv.request.context !!");
- }
-}
-
-app.handle("reprendre_la_lecture", (conv) => {
- persistMediaPlayer(conv);
-
- // // Acknowledge pause/stop
- // conv.add(new Media({
- // mediaType: 'MEDIA_STATUS_ACK'
- // }));
-
- conv.scene.next.name = "player";
-});
-
-app.handle("remaining_time", async (conv) => {
- persistMediaPlayer(conv);
-
- const name = conv.user.params.p_n;
- ok(name, "titre non défini");
-
- const url = WEBPUB_URL + name;
- ok(isValidHttpUrl(url), "url not valid " + url);
-
- const opds = new OpdsFetcher();
- const webpub = await opds.webpubRequest(url);
- ok(webpub, "webpub not defined");
-
- const index = conv.user.params.player_startIndex || 0;
- const time = conv.user.params.player_startTime || 0;
-
- let minutes = 0;
- if (Array.isArray(webpub.readingOrders)) {
- let remainingTime = 0;
- for (let i = index + 1; i < webpub.readingOrders.length; i += 1) {
- remainingTime += webpub.readingOrders[i].duration || 0;
- }
- const pos = (v) => (v < 0 ? 0 : v);
- remainingTime += pos((webpub.readingOrders[index].duration || 0) - time);
-
- if (remainingTime >= 60) {
- minutes = Math.floor(remainingTime / 60);
- }
- }
-
- const hours = Math.floor(minutes / 60);
- if (hours) {
- minutes = minutes % 60;
- conv.add(`il reste ${hours} heures et ${minutes} minutes`);
- } else {
- conv.add(`il reste ${minutes} minutes`);
- }
-
- // // Acknowledge pause/stop
- // conv.add(new Media({
- // mediaType: 'MEDIA_STATUS_ACK'
- // }));
-
- conv.scene.next.name = "player";
-});
-
-// ////////////////////////
-// Media PLAYET CONTEXT //
-// ////////////////////////
-
-// Media status
-app.handle("media_status", (conv) => {
- console.log("MediaStatus START");
- const mediaStatus = conv.intent.params.MEDIA_STATUS.resolved;
- console.log("MediaStatus : ", mediaStatus);
- switch (mediaStatus) {
- case "FINISHED":
- persistMediaPlayer(conv);
- conv.scene.next.name = "home_members";
-
- // void
- break;
- case "FAILED":
-
- // void
- break;
- case "PAUSED":
- case "STOPPED":
- persistMediaPlayer(conv);
- // Acknowledge pause/stop
- conv.add(new Media({
- mediaType: "MEDIA_STATUS_ACK",
- }));
- break;
- default:
- conv.add("media status incorrect");
- }
-
- console.log("MediaStatus END");
-});
-
-
-// catch(catcher: ExceptionHandler): ConversationV3App
-// ExceptionHandler(conv: TConversation, error: Error): any
-app.catch((conv, error) => {
- conv.add("une erreur s'est produite");
-
- console.log("ERROR");
- console.log(error);
-});
-
-// middleware(middleware: ConversationV3Middleware): ConversationV3App
-// ConversationV3Middleware(conv: ConversationV3, framework: BuiltinFrameworkMetadata): void | ConversationV3 & TConversationPlugin | Promise | Promise
-app.middleware(async (conv) => {
-
- console.log(conv.user.params);
- console.log("==========");
- console.log(conv);
- console.log("----------");
-
- try {
-
- const id = conv.user.params.bearerToken;
- ok(id, "bearerToken not defined");
- const docRef = db.collection("user-storage").doc(id);
- const doc = await docRef.get();
- if (!doc.exists) {
- console.log("No such document!");
- } else {
- console.log("Document data:", doc.data());
- conv.user.params = doc.data();
- }
- } catch (e) {
-
- console.error("Middleware critical error firebase firestore");
- console.error(e);
- }
-
- // void
-});
-
-exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
diff --git a/webhooks/functions/package-lock.json b/webhooks/functions/package-lock.json
index a1593347..fe3b4d44 100644
--- a/webhooks/functions/package-lock.json
+++ b/webhooks/functions/package-lock.json
@@ -1,4648 +1,233 @@
{
"name": "functions",
- "lockfileVersion": 2,
"requires": true,
- "packages": {
- "": {
- "name": "functions",
- "dependencies": {
- "@assistant/conversation": "^3.0.0",
- "firebase-admin": "^9.11.1",
- "firebase-functions": "^3.14.1",
- "opds-fetcher-parser": "github:panaC/opds_fetcher_parser#efec695f50b386071ccf935396f0a8ea4750c9ae"
- },
- "devDependencies": {
- "eslint": "^7.6.0",
- "eslint-config-google": "^0.14.0",
- "firebase-functions-test": "^0.2.0"
- },
- "engines": {
- "node": ">14",
- "npm": ">6"
- }
- },
- "node_modules/@assistant/conversation": {
- "version": "3.8.1",
- "resolved": "https://registry.npmjs.org/@assistant/conversation/-/conversation-3.8.1.tgz",
- "integrity": "sha512-YEyQ33xD1VCkJP16GRdXiuG55Vklbds3yiPcGSSf0hj2dj7mprWybipEZvVA4qsgv/NHrLvXPBFTySJrUpV/7g==",
- "dependencies": {
- "@types/aws-lambda": "^0.0.33",
- "@types/debug": "^0.0.30",
- "@types/express": "^4.11.1",
- "@types/node": "12.12.24",
- "debug": "^3.1.0",
- "google-auth-library": "^6.1.0"
- },
- "engines": {
- "node": ">=10.18.0"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.15.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
- "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
- "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.14.5",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "node_modules/@babel/highlight/node_modules/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=",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
- "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
- "globals": "^13.9.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/@firebase/app": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.7.1.tgz",
- "integrity": "sha512-B4z6E1EPQc0mOjF35IPKdDRCFnT/fNQIHfM+v7F9obB7ItPhGILK3LxaQfuampSQpF6GG6TPFDbrWK6myXAq+g==",
- "peer": true,
- "dependencies": {
- "@firebase/component": "0.5.7",
- "@firebase/logger": "0.3.0",
- "@firebase/util": "1.4.0",
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@firebase/app-compat": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.2.tgz",
- "integrity": "sha512-kF1maoqA8bZqJ4v/ojVvA7kIyyXEPkJmL48otGrC8LIgdcen7xCx3JFDe0DGeQywg+qujvdkJz/TptFN1cvAgw==",
- "peer": true,
- "dependencies": {
- "@firebase/app": "0.7.1",
- "@firebase/component": "0.5.7",
- "@firebase/logger": "0.3.0",
- "@firebase/util": "1.4.0",
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@firebase/app-types": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.7.0.tgz",
- "integrity": "sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg=="
- },
- "node_modules/@firebase/auth-interop-types": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz",
- "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==",
- "peerDependencies": {
- "@firebase/app-types": "0.x",
- "@firebase/util": "1.x"
- }
- },
- "node_modules/@firebase/component": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.7.tgz",
- "integrity": "sha512-CiAHUPXh2hn/lpzMShNmfAxHNQhKQwmQUJSYMPCjf2bCCt4Z2vLGpS+UWEuNFm9Zf8LNmkS+Z+U/s4Obi5carg==",
- "dependencies": {
- "@firebase/util": "1.4.0",
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@firebase/database": {
- "version": "0.12.1",
- "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.12.1.tgz",
- "integrity": "sha512-Ethk0hc476qnkSKNBa+8Yc7iM8AO69HYWsaD+QUC983FZtnuMyNLHtEeSUbLQYvyHo7cOjcc52slop14WmfZeQ==",
- "dependencies": {
- "@firebase/auth-interop-types": "0.1.6",
- "@firebase/component": "0.5.7",
- "@firebase/logger": "0.3.0",
- "@firebase/util": "1.4.0",
- "faye-websocket": "0.11.4",
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@firebase/database-compat": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.1.1.tgz",
- "integrity": "sha512-K3DFWiw0YkLZtlfA9TOGPw6zVXKu5dQ1XqIGztUufFVRYW8IizReXVxzSSmJNR4Adr2LiU9j66Wenc6e5UfwaQ==",
- "dependencies": {
- "@firebase/component": "0.5.7",
- "@firebase/database": "0.12.1",
- "@firebase/database-types": "0.9.1",
- "@firebase/logger": "0.3.0",
- "@firebase/util": "1.4.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/database-compat/node_modules/@firebase/database-types": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.9.1.tgz",
- "integrity": "sha512-RUixK/YrbpxbfdE+nYP0wMcEsz1xPTnafP0q3UlSS/+fW744OITKtR1J0cMRaXbvY7EH0wUVTNVkrtgxYY8IgQ==",
- "dependencies": {
- "@firebase/app-types": "0.7.0",
- "@firebase/util": "1.4.0"
- }
- },
- "node_modules/@firebase/database-types": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.7.3.tgz",
- "integrity": "sha512-dSOJmhKQ0nL8O4EQMRNGpSExWCXeHtH57gGg0BfNAdWcKhC8/4Y+qfKLfWXzyHvrSecpLmO0SmAi/iK2D5fp5A==",
- "dependencies": {
- "@firebase/app-types": "0.6.3"
- }
- },
- "node_modules/@firebase/database-types/node_modules/@firebase/app-types": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.3.tgz",
- "integrity": "sha512-/M13DPPati7FQHEQ9Minjk1HGLm/4K4gs9bR4rzLCWJg64yGtVC0zNg9gDpkw9yc2cvol/mNFxqTtd4geGrwdw=="
- },
- "node_modules/@firebase/logger": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.3.0.tgz",
- "integrity": "sha512-7oQ+TctqekfgZImWkKuda50JZfkmAKMgh5qY4aR4pwRyqZXuJXN1H/BKkHvN1y0S4XWtF0f/wiCLKHhyi1ppPA==",
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@firebase/util": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.4.0.tgz",
- "integrity": "sha512-Qn58d+DVi1nGn0bA9RV89zkz0zcbt6aUcRdyiuub/SuEvjKYstWmHcHwh1C0qmE1wPf9a3a+AuaRtduaGaRT7A==",
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@google-cloud/common": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.7.2.tgz",
- "integrity": "sha512-5Q9f74IbZaY6xAwJSNFy5SrGwbm1j7mpv+6A/r+K2dymjsXBH5UauB0tziaMwWoVVaMq1IQnZF9lgtfqqvxcUg==",
- "optional": true,
- "dependencies": {
- "@google-cloud/projectify": "^2.0.0",
- "@google-cloud/promisify": "^2.0.0",
- "arrify": "^2.0.1",
- "duplexify": "^4.1.1",
- "ent": "^2.2.0",
- "extend": "^3.0.2",
- "google-auth-library": "^7.0.2",
- "retry-request": "^4.2.2",
- "teeny-request": "^7.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@google-cloud/common/node_modules/google-auth-library": {
- "version": "7.10.0",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.0.tgz",
- "integrity": "sha512-ICsqaU+lxMHVlDUzMrfVIEqnARw2AwBiZ/2KnNM6BcTf9Nott+Af87DTIzmlnW865p3REUP2MVL0xkPC3a61aQ==",
- "optional": true,
- "dependencies": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@google-cloud/firestore": {
- "version": "4.15.1",
- "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-4.15.1.tgz",
- "integrity": "sha512-2PWsCkEF1W02QbghSeRsNdYKN1qavrHBP3m72gPDMHQSYrGULOaTi7fSJquQmAtc4iPVB2/x6h80rdLHTATQtA==",
- "optional": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "functional-red-black-tree": "^1.0.1",
- "google-gax": "^2.24.1",
- "protobufjs": "^6.8.6"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@google-cloud/paginator": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.6.tgz",
- "integrity": "sha512-XCTm/GfQIlc1ZxpNtTSs/mnZxC2cePNhxU3X8EzHXKIJ2JFncmJj2Fcd2IP+gbmZaSZnY0juFxbUCkIeuu/2eQ==",
- "optional": true,
- "dependencies": {
- "arrify": "^2.0.0",
- "extend": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@google-cloud/projectify": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz",
- "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==",
- "optional": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@google-cloud/promisify": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz",
- "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==",
- "optional": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@google-cloud/storage": {
- "version": "5.14.4",
- "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.14.4.tgz",
- "integrity": "sha512-CjpGuk+ZZB7b3yMXPQrPb0TMIhXqbDzrGxngeSl2S2fItFp2pZDnYhvFuB0/8S73cA2T/4x3g1tl6PB1OuuaoQ==",
- "optional": true,
- "dependencies": {
- "@google-cloud/common": "^3.7.0",
- "@google-cloud/paginator": "^3.0.0",
- "@google-cloud/promisify": "^2.0.0",
- "arrify": "^2.0.0",
- "async-retry": "^1.3.1",
- "compressible": "^2.0.12",
- "date-and-time": "^2.0.0",
- "duplexify": "^4.0.0",
- "extend": "^3.0.2",
- "gcs-resumable-upload": "^3.3.0",
- "get-stream": "^6.0.0",
- "hash-stream-validation": "^0.2.2",
- "mime": "^2.2.0",
- "mime-types": "^2.0.8",
- "p-limit": "^3.0.1",
- "pumpify": "^2.0.0",
- "snakeize": "^0.1.0",
- "stream-events": "^1.0.1",
- "xdg-basedir": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@grpc/grpc-js": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz",
- "integrity": "sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA==",
- "optional": true,
- "dependencies": {
- "@types/node": ">=12.12.47"
- },
- "engines": {
- "node": "^8.13.0 || >=10.10.0"
- }
- },
- "node_modules/@grpc/grpc-js/node_modules/@types/node": {
- "version": "16.10.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz",
- "integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ==",
- "optional": true
- },
- "node_modules/@grpc/proto-loader": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.5.tgz",
- "integrity": "sha512-GZdzyVQI1Bln/kCzIYgTKu+rQJ5dno0gVrfmLe4jqQu7T2e7svSwJzpCBqVU5hhBSJP3peuPjOMWsj5GR61YmQ==",
- "optional": true,
- "dependencies": {
- "@types/long": "^4.0.1",
- "lodash.camelcase": "^4.3.0",
- "long": "^4.0.0",
- "protobufjs": "^6.10.0",
- "yargs": "^16.1.1"
- },
- "bin": {
- "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
- "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
- "dev": true,
- "dependencies": {
- "@humanwhocodes/object-schema": "^1.2.0",
- "debug": "^4.1.1",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/config-array/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@humanwhocodes/config-array/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
- "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
- "dev": true
- },
- "node_modules/@panva/asn1.js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz",
- "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==",
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/@protobufjs/aspromise": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
- "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=",
- "optional": true
- },
- "node_modules/@protobufjs/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
- "optional": true
- },
- "node_modules/@protobufjs/codegen": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
- "optional": true
- },
- "node_modules/@protobufjs/eventemitter": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
- "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=",
- "optional": true
- },
- "node_modules/@protobufjs/fetch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
- "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
- "optional": true,
- "dependencies": {
- "@protobufjs/aspromise": "^1.1.1",
- "@protobufjs/inquire": "^1.1.0"
- }
- },
- "node_modules/@protobufjs/float": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
- "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=",
- "optional": true
- },
- "node_modules/@protobufjs/inquire": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
- "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=",
- "optional": true
- },
- "node_modules/@protobufjs/path": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
- "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=",
- "optional": true
- },
- "node_modules/@protobufjs/pool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
- "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=",
- "optional": true
- },
- "node_modules/@protobufjs/utf8": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
- "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=",
- "optional": true
- },
- "node_modules/@tootallnate/once": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
- "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
- "optional": true,
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@types/aws-lambda": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-0.0.33.tgz",
- "integrity": "sha512-p13MzAb/1ZJK1h0jDhRjdFqlRHC44HAOS7qYuVpn7NnFDv8UdNbRjExfhK69syvI9IoIR4NN4dRGjpVDsN6tEQ=="
- },
- "node_modules/@types/body-parser": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.1.tgz",
- "integrity": "sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==",
- "dependencies": {
- "@types/connect": "*",
- "@types/node": "*"
- }
- },
- "node_modules/@types/connect": {
- "version": "3.4.35",
- "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
- "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/cors": {
- "version": "2.8.12",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
- "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
- },
- "node_modules/@types/debug": {
- "version": "0.0.30",
- "resolved": "https://registry.npmjs.org/@types/debug/-/debug-0.0.30.tgz",
- "integrity": "sha512-orGL5LXERPYsLov6CWs3Fh6203+dXzJkR7OnddIr2514Hsecwc8xRpzCapshBbKFImCsvS/mk6+FWiN5LyZJAQ=="
- },
- "node_modules/@types/express": {
- "version": "4.17.13",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
- "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==",
- "dependencies": {
- "@types/body-parser": "*",
- "@types/express-serve-static-core": "^4.17.18",
- "@types/qs": "*",
- "@types/serve-static": "*"
- }
- },
- "node_modules/@types/express-jwt": {
- "version": "0.0.42",
- "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.42.tgz",
- "integrity": "sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag==",
- "dependencies": {
- "@types/express": "*",
- "@types/express-unless": "*"
- }
- },
- "node_modules/@types/express-serve-static-core": {
- "version": "4.17.24",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz",
- "integrity": "sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==",
- "dependencies": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*"
- }
- },
- "node_modules/@types/express-unless": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.2.tgz",
- "integrity": "sha512-Q74UyYRX/zIgl1HSp9tUX2PlG8glkVm+59r7aK4KGKzC5jqKIOX6rrVLRQrzpZUQ84VukHtRoeAuon2nIssHPQ==",
- "dependencies": {
- "@types/express": "*"
- }
- },
- "node_modules/@types/lodash": {
- "version": "4.14.175",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz",
- "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==",
- "dev": true
- },
- "node_modules/@types/long": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
- "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==",
- "optional": true
- },
- "node_modules/@types/mime": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
- "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
- },
- "node_modules/@types/node": {
- "version": "12.12.24",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.24.tgz",
- "integrity": "sha512-1Ciqv9pqwVtW6FsIUKSZNB82E5Cu1I2bBTj1xuIHXLe/1zYLl3956Nbhg2MzSYHVfl9/rmanjbQIb7LibfCnug=="
- },
- "node_modules/@types/qs": {
- "version": "6.9.7",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
- "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
- },
- "node_modules/@types/range-parser": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
- "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="
- },
- "node_modules/@types/serve-static": {
- "version": "1.13.10",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz",
- "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==",
- "dependencies": {
- "@types/mime": "^1",
- "@types/node": "*"
- }
- },
- "node_modules/@types/xmldom": {
- "version": "0.1.31",
- "resolved": "https://registry.npmjs.org/@types/xmldom/-/xmldom-0.1.31.tgz",
- "integrity": "sha512-bVy7s0nvaR5D1mT1a8ZkByHWNOGb6Vn4yi5TWhEdmyKlAG+08SA7Md6+jH+tYmMLueAwNeWvHHpeKrr6S4c4BA=="
- },
- "node_modules/abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "dependencies": {
- "event-target-shim": "^5.0.0"
- },
- "engines": {
- "node": ">=6.5"
- }
- },
- "node_modules/accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "dependencies": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/agent-base/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/agent-base/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "devOptional": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "devOptional": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
- },
- "node_modules/arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dependencies": {
- "safer-buffer": "~2.1.0"
- }
- },
- "node_modules/assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/async-retry": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz",
- "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==",
- "optional": true,
- "dependencies": {
- "retry": "0.13.1"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- },
- "node_modules/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=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "dependencies": {
- "tweetnacl": "^0.14.3"
- }
- },
- "node_modules/big-integer": {
- "version": "1.6.49",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz",
- "integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/bignumber.js": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz",
- "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/binary": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
- "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
- "dependencies": {
- "buffers": "~0.1.1",
- "chainsaw": "~0.1.0"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/bindings": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
- "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
- "dependencies": {
- "file-uri-to-path": "1.0.0"
- }
- },
- "node_modules/bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
- },
- "node_modules/body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
- "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.17"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/body-parser/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/body-parser/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/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="
- },
- "node_modules/buffer-indexof-polyfill": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
- "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==",
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/buffers": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
- "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=",
- "engines": {
- "node": ">=0.2.0"
- }
- },
- "node_modules/bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
- },
- "node_modules/chainsaw": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
- "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
- "dependencies": {
- "traverse": ">=0.3.0 <0.4"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "optional": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "devOptional": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "devOptional": true
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/compressible": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
- "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
- "optional": true,
- "dependencies": {
- "mime-db": ">= 1.43.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "node_modules/configstore": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
- "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
- "optional": true,
- "dependencies": {
- "dot-prop": "^5.2.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "unique-string": "^2.0.0",
- "write-file-atomic": "^3.0.0",
- "xdg-basedir": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
- "dependencies": {
- "safe-buffer": "5.1.2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
- },
- "node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "node_modules/cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
- "dependencies": {
- "object-assign": "^4",
- "vary": "^1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
- "optional": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dependencies": {
- "assert-plus": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/date-and-time": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-2.0.0.tgz",
- "integrity": "sha512-HJSzj25iPm8E01nt+rSmCIlwjsmjvKfUivG/kXBglpymcHF1FolWAqWwTEV4FvN1Lx5UjPf0J1W4H8yQsVBfFg==",
- "optional": true
- },
- "node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
- },
- "node_modules/dicer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz",
- "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==",
- "dependencies": {
- "streamsearch": "0.1.2"
- },
- "engines": {
- "node": ">=4.5.0"
- }
- },
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/dot-prop": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
- "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
- "optional": true,
- "dependencies": {
- "is-obj": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/duplexer2": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
- "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
- "dependencies": {
- "readable-stream": "^2.0.2"
- }
- },
- "node_modules/duplexer2/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/duplexer2/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/duplexify": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
- "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
- "optional": true,
- "dependencies": {
- "end-of-stream": "^1.4.1",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "dependencies": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "node_modules/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==",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "devOptional": true
- },
- "node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "optional": true,
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "dev": true,
- "dependencies": {
- "ansi-colors": "^4.1.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/ent": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
- "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
- "optional": true
- },
- "node_modules/err-code": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz",
- "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA="
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "optional": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "7.32.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
- "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.3",
- "@humanwhocodes/config-array": "^0.5.0",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
- "esquery": "^1.4.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.1.2",
- "globals": "^13.6.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.0.4",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
- "strip-json-comments": "^3.1.0",
- "table": "^6.0.9",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-config-google": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz",
- "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- },
- "peerDependencies": {
- "eslint": ">=5.16.0"
- }
- },
- "node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- }
- },
- "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/eslint/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/eslint/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
- "dev": true,
- "dependencies": {
- "acorn": "^7.4.0",
- "acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/espree/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true,
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esquery": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
- "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esquery/node_modules/estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esrecurse/node_modules/estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
- "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"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/express/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/express/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "node_modules/extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "engines": [
- "node >=0.6.0"
- ]
- },
- "node_modules/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=="
- },
- "node_modules/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=="
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "node_modules/fast-text-encoding": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
- "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig=="
- },
- "node_modules/faye-websocket": {
- "version": "0.11.4",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
- "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
- "dependencies": {
- "websocket-driver": ">=0.5.1"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
- "dependencies": {
- "pend": "~1.2.0"
- }
- },
- "node_modules/fetch-cookie": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-1.0.0.tgz",
- "integrity": "sha512-SWcAhkDe4yVBFtwRqJNmot6k1XjjzI7tw3aRHepxXrK6FQp6obBhqcnsdm2aNUzrtE71607crNAYodtKMq3TjA==",
- "dependencies": {
- "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/file-js": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/file-js/-/file-js-0.3.0.tgz",
- "integrity": "sha1-+rRr94I0bJKUSZ8fDSrQfYOPJdE=",
- "dependencies": {
- "bluebird": "^3.4.7",
- "minimatch": "^3.0.3",
- "proper-lockfile": "^1.2.0"
- }
- },
- "node_modules/file-uri-to-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
- "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
- },
- "node_modules/filehound": {
- "version": "1.17.5",
- "resolved": "https://registry.npmjs.org/filehound/-/filehound-1.17.5.tgz",
- "integrity": "sha512-BsNTM3xoscYKgv0quE9RWPVhu5ZTb7BNu3H/IbZQbOfQeA7ZyOV/hIYfo60H3Jhorw/J5vbg59KHS1UCHt4FAw==",
- "dependencies": {
- "bluebird": "^3.7.2",
- "file-js": "0.3.0",
- "lodash": "^4.17.21",
- "minimatch": "^3.0.4",
- "moment": "^2.29.1",
- "unit-compare": "^1.0.1"
- }
- },
- "node_modules/finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "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"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/finalhandler/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/finalhandler/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/firebase-admin": {
- "version": "9.12.0",
- "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-9.12.0.tgz",
- "integrity": "sha512-AtA7OH5RbIFGoc0gZOQgaYC6cdjdhZv4w3XgWoupkPKO1HY+0GzixOuXDa75kFeoVyhIyo4PkLg/GAC1dC1P6w==",
- "dependencies": {
- "@firebase/database-compat": "^0.1.1",
- "@firebase/database-types": "^0.7.2",
- "@types/node": ">=12.12.47",
- "dicer": "^0.3.0",
- "jsonwebtoken": "^8.5.1",
- "jwks-rsa": "^2.0.2",
- "node-forge": "^0.10.0"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "optionalDependencies": {
- "@google-cloud/firestore": "^4.5.0",
- "@google-cloud/storage": "^5.3.0"
- }
- },
- "node_modules/firebase-admin/node_modules/@types/node": {
- "version": "16.10.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz",
- "integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ=="
- },
- "node_modules/firebase-functions": {
- "version": "3.15.7",
- "resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-3.15.7.tgz",
- "integrity": "sha512-ZD7r8eoWWebgs+mTqfH8NLUT2C0f7/cyAvIA1RSUdBVQZN7MBBt3oSlN/rL3e+m6tdlJz6YbQ3hrOKOGjOVYvQ==",
- "dependencies": {
- "@types/cors": "^2.8.5",
- "@types/express": "4.17.3",
- "cors": "^2.8.5",
- "express": "^4.17.1",
- "lodash": "^4.17.14"
- },
- "engines": {
- "node": "^8.13.0 || >=10.10.0"
- },
- "peerDependencies": {
- "firebase-admin": "^8.0.0 || ^9.0.0"
- }
- },
- "node_modules/firebase-functions-test": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/firebase-functions-test/-/firebase-functions-test-0.2.3.tgz",
- "integrity": "sha512-zYX0QTm53wCazuej7O0xqbHl90r/v1PTXt/hwa0jo1YF8nDM+iBKnLDlkIoW66MDd0R6aGg4BvKzTTdJpvigUA==",
- "dev": true,
- "dependencies": {
- "@types/lodash": "^4.14.104",
- "lodash": "^4.17.5"
- },
- "engines": {
- "node": ">=8.0.0"
- },
- "peerDependencies": {
- "firebase-admin": ">=6.0.0",
- "firebase-functions": ">=2.0.0"
- }
- },
- "node_modules/firebase-functions/node_modules/@types/express": {
- "version": "4.17.3",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.3.tgz",
- "integrity": "sha512-I8cGRJj3pyOLs/HndoP+25vOqhqWkAZsWMEmq1qXy/b/M3ppufecUwaK2/TVDVxcV61/iSdhykUjQQ2DLSrTdg==",
- "dependencies": {
- "@types/body-parser": "*",
- "@types/express-serve-static-core": "*",
- "@types/serve-static": "*"
- }
- },
- "node_modules/flat-cache": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
- "dev": true,
- "dependencies": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
- "dev": true
- },
- "node_modules/forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 0.12"
- }
- },
- "node_modules/forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "node_modules/fstream": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
- "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
- },
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/fstream/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "devOptional": true
- },
- "node_modules/gaxios": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz",
- "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==",
- "dependencies": {
- "abort-controller": "^3.0.0",
- "extend": "^3.0.2",
- "https-proxy-agent": "^5.0.0",
- "is-stream": "^2.0.0",
- "node-fetch": "^2.6.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/gcp-metadata": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz",
- "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==",
- "dependencies": {
- "gaxios": "^4.0.0",
- "json-bigint": "^1.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/gcs-resumable-upload": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-3.3.1.tgz",
- "integrity": "sha512-WyC0i4VkslIdrdmeM5PNuGzANALLXTG5RoHb08OE30gYT+FEvCDPiA8KOjV2s1wOu9ngEW4+IuzBjtP/ni7UdQ==",
- "optional": true,
- "dependencies": {
- "abort-controller": "^3.0.0",
- "configstore": "^5.0.0",
- "extend": "^3.0.2",
- "gaxios": "^4.0.0",
- "google-auth-library": "^7.0.0",
- "pumpify": "^2.0.0",
- "stream-events": "^1.0.4"
- },
- "bin": {
- "gcs-upload": "build/src/cli.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/gcs-resumable-upload/node_modules/google-auth-library": {
- "version": "7.10.0",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.0.tgz",
- "integrity": "sha512-ICsqaU+lxMHVlDUzMrfVIEqnARw2AwBiZ/2KnNM6BcTf9Nott+Af87DTIzmlnW865p3REUP2MVL0xkPC3a61aQ==",
- "optional": true,
- "dependencies": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "optional": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "optional": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dependencies": {
- "assert-plus": "^1.0.0"
- }
- },
- "node_modules/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/google-auth-library": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz",
- "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==",
- "dependencies": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/google-gax": {
- "version": "2.26.0",
- "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.26.0.tgz",
- "integrity": "sha512-D/8fjTydl9p3ejxuW3ZVHVZqKzz6zYaz5MMEucijsJonJ4RHqWAzHFKZMKSc7yyUiTEBGqG7nU2S8NUPUUYDEA==",
- "optional": true,
- "dependencies": {
- "@grpc/grpc-js": "~1.3.0",
- "@grpc/proto-loader": "^0.6.1",
- "@types/long": "^4.0.0",
- "abort-controller": "^3.0.0",
- "duplexify": "^4.0.0",
- "fast-text-encoding": "^1.0.3",
- "google-auth-library": "^7.6.1",
- "is-stream-ended": "^0.1.4",
- "node-fetch": "^2.6.1",
- "object-hash": "^2.1.1",
- "proto3-json-serializer": "^0.1.1",
- "protobufjs": "6.11.2",
- "retry-request": "^4.0.0"
- },
- "bin": {
- "compileProtos": "build/tools/compileProtos.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/google-gax/node_modules/google-auth-library": {
- "version": "7.10.0",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.0.tgz",
- "integrity": "sha512-ICsqaU+lxMHVlDUzMrfVIEqnARw2AwBiZ/2KnNM6BcTf9Nott+Af87DTIzmlnW865p3REUP2MVL0xkPC3a61aQ==",
- "optional": true,
- "dependencies": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/google-p12-pem": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.2.tgz",
- "integrity": "sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==",
- "dependencies": {
- "node-forge": "^0.10.0"
- },
- "bin": {
- "gp12-pem": "build/src/bin/gp12-pem.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
- },
- "node_modules/gtoken": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz",
- "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==",
- "dependencies": {
- "gaxios": "^4.0.0",
- "google-p12-pem": "^3.0.3",
- "jws": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "deprecated": "this library is no longer supported",
- "dependencies": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/hash-stream-validation": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz",
- "integrity": "sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==",
- "optional": true
- },
- "node_modules/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==",
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/http-errors/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "node_modules/http-parser-js": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz",
- "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg=="
- },
- "node_modules/http-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
- "optional": true,
- "dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/http-proxy-agent/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "optional": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/http-proxy-agent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- },
- "node_modules/http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dependencies": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- },
- "engines": {
- "node": ">=0.8",
- "npm": ">=1.3.7"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/https-proxy-agent/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/https-proxy-agent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/image-size": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz",
- "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==",
- "dependencies": {
- "queue": "6.0.2"
- },
- "bin": {
- "image-size": "bin/image-size.js"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "devOptional": true,
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "devOptional": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
- "optional": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-stream-ended": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz",
- "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==",
- "optional": true
- },
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- },
- "node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "node_modules/isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
- },
- "node_modules/jose": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz",
- "integrity": "sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==",
- "dependencies": {
- "@panva/asn1.js": "^1.0.0"
- },
- "engines": {
- "node": ">=10.13.0 < 13 || >=13.7.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/panva"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
- },
- "node_modules/json-bigint": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
- "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
- "dependencies": {
- "bignumber.js": "^9.0.0"
- }
- },
- "node_modules/json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
- },
- "node_modules/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=="
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
- },
- "node_modules/jsonwebtoken": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
- "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
- "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.0.0",
- "ms": "^2.1.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=4",
- "npm": ">=1.4.28"
- }
- },
- "node_modules/jsonwebtoken/node_modules/jwa": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
- "dependencies": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jsonwebtoken/node_modules/jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "dependencies": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jsonwebtoken/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "engines": [
- "node >=0.6.0"
- ],
- "dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "node_modules/jwa": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
- "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
- "dependencies": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jwks-rsa": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-2.0.4.tgz",
- "integrity": "sha512-iJqVCECYZZ+3oPmY1qXv3Fq+3ywDtuNEVBvG41pPlaR0zyGxa12nC0beAOBBUhETJmc05puS50mRQN4NkCGhmg==",
- "dependencies": {
- "@types/express-jwt": "0.0.42",
- "debug": "^4.3.2",
- "jose": "^2.0.5",
- "limiter": "^1.1.5",
- "lru-memoizer": "^2.1.4"
- },
- "engines": {
- "node": ">=10 < 13 || >=14"
- }
- },
- "node_modules/jwks-rsa/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/jwks-rsa/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/jws": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
- "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
- "dependencies": {
- "jwa": "^2.0.0",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/limiter": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
- "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA=="
- },
- "node_modules/listenercount": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
- "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc="
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "node_modules/lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
- "optional": true
- },
- "node_modules/lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
- },
- "node_modules/lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
- },
- "node_modules/lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
- },
- "node_modules/lodash.isinteger": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
- },
- "node_modules/lodash.isnumber": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
- },
- "node_modules/lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
- },
- "node_modules/lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "node_modules/lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
- },
- "node_modules/lodash.truncate": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
- "dev": true
- },
- "node_modules/long": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==",
- "optional": true
- },
- "node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/lru-memoizer": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.1.4.tgz",
- "integrity": "sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==",
- "dependencies": {
- "lodash.clonedeep": "^4.5.0",
- "lru-cache": "~4.0.0"
- }
- },
- "node_modules/lru-memoizer/node_modules/lru-cache": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz",
- "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=",
- "dependencies": {
- "pseudomap": "^1.0.1",
- "yallist": "^2.0.0"
- }
- },
- "node_modules/lru-memoizer/node_modules/yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
- },
- "node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "optional": true,
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "optional": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
- },
- "node_modules/methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
- "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
- "optional": true,
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/mime-db": {
- "version": "1.50.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz",
- "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==",
- "optional": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.32",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
- "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
- "dependencies": {
- "mime-db": "1.49.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types/node_modules/mime-db": {
- "version": "1.49.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
- "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
- },
- "node_modules/mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/moment": {
- "version": "2.29.1",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
- "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/nanoid": {
- "version": "3.1.28",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.28.tgz",
- "integrity": "sha512-gSu9VZ2HtmoKYe/lmyPFES5nknFrHa+/DT9muUFWFMi6Jh9E1I7bkvlQ8xxf1Kos9pi9o8lBnIOkatMhKX/YUw==",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "node_modules/negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/node-fetch": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
- "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- }
- },
- "node_modules/node-forge": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/node-stream-zip": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz",
- "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==",
- "engines": {
- "node": ">=0.12.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/antelle"
- }
- },
- "node_modules/oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-hash": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
- "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
- "optional": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/opds-fetcher-parser": {
- "version": "0.1.0",
- "resolved": "git+ssh://git@github.com/panaC/opds_fetcher_parser.git#efec695f50b386071ccf935396f0a8ea4750c9ae",
- "integrity": "sha512-vhOHEBu7Bs9y0XHgGo8u6ntgrjAtclGZE61cP11F1HBwBnF8s7w+Vlagc7MJq2xMy0RuMN45lzVoco8Rl9petQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "moment": "^2.29.1",
- "nanoid": "^3.1.23",
- "r2-lcp-js": "^1.0.30",
- "r2-opds-js": "^1.0.35",
- "r2-shared-js": "^1.0.51",
- "ts-fetch": "github:panaC/ts_fetch#7f585951111aa0e9cb7fe7f99bdd927a9261cd7b"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
- "dev": true,
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "optional": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
- },
- "node_modules/pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
- },
- "node_modules/performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "node_modules/progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/proper-lockfile": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-1.2.0.tgz",
- "integrity": "sha1-zv9d2J0+XxD7deHo52vHWAGlnDQ=",
- "dependencies": {
- "err-code": "^1.0.0",
- "extend": "^3.0.0",
- "graceful-fs": "^4.1.2",
- "retry": "^0.10.0"
- }
- },
- "node_modules/proper-lockfile/node_modules/retry": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz",
- "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/proto3-json-serializer": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.4.tgz",
- "integrity": "sha512-bFzdsKU/zaTobWrRxRniMZIzzcgKYlmBWL1gAcTXZ2M7TQTGPI0JoYYs6bN7tpWj59ZCfwg7Ii/A2e8BbQGYnQ==",
- "optional": true
- },
- "node_modules/protobufjs": {
- "version": "6.11.2",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz",
- "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==",
- "hasInstallScript": true,
- "optional": true,
- "dependencies": {
- "@protobufjs/aspromise": "^1.1.2",
- "@protobufjs/base64": "^1.1.2",
- "@protobufjs/codegen": "^2.0.4",
- "@protobufjs/eventemitter": "^1.1.0",
- "@protobufjs/fetch": "^1.1.0",
- "@protobufjs/float": "^1.0.2",
- "@protobufjs/inquire": "^1.1.0",
- "@protobufjs/path": "^1.1.2",
- "@protobufjs/pool": "^1.1.0",
- "@protobufjs/utf8": "^1.1.0",
- "@types/long": "^4.0.1",
- "@types/node": ">=13.7.0",
- "long": "^4.0.0"
- },
- "bin": {
- "pbjs": "bin/pbjs",
- "pbts": "bin/pbts"
- }
- },
- "node_modules/protobufjs/node_modules/@types/node": {
- "version": "16.10.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz",
- "integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ==",
- "optional": true
- },
- "node_modules/proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "dependencies": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
- },
- "node_modules/psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "optional": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/pumpify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz",
- "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==",
- "optional": true,
- "dependencies": {
- "duplexify": "^4.1.1",
- "inherits": "^2.0.3",
- "pump": "^3.0.0"
- }
- },
- "node_modules/punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/queue": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
- "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
- "dependencies": {
- "inherits": "~2.0.3"
- }
- },
- "node_modules/r2-lcp-js": {
- "version": "1.0.32",
- "resolved": "https://registry.npmjs.org/r2-lcp-js/-/r2-lcp-js-1.0.32.tgz",
- "integrity": "sha512-cNpOc9ZWatCe7WPMQxVfA7p1xtynrU7eWZ/Cw41+zkKRUsOU4b+CTtwq1APMut+dMhnEHNIjDVUqxGBnFUa7dw==",
- "dependencies": {
- "bindings": "^1.5.0",
- "debug": "^4.3.2",
- "moment": "^2.29.1",
- "r2-utils-js": "^1.0.26",
- "request": "^2.88.2",
- "request-promise-native": "^1.0.9",
- "ta-json-x": "^2.5.3",
- "tslib": "^2.3.1",
- "urijs": "^1.19.7"
- },
- "engines": {
- "node": ">=12",
- "npm": ">=6",
- "yarn": ">=1.0"
- }
- },
- "node_modules/r2-lcp-js/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/r2-lcp-js/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/r2-opds-js": {
- "version": "1.0.36",
- "resolved": "https://registry.npmjs.org/r2-opds-js/-/r2-opds-js-1.0.36.tgz",
- "integrity": "sha512-JQB92qGzJWTO1l8NkZ3AhsQXm197Ny2pnU2NtakjWPnASnw60DJxs14yxXHKjTDZZzLI+XzsWYJJ6BKitIN55w==",
- "dependencies": {
- "debug": "^4.3.2",
- "r2-lcp-js": "^1.0.31",
- "r2-shared-js": "^1.0.52",
- "r2-utils-js": "^1.0.26",
- "ta-json-x": "^2.5.3",
- "tslib": "^2.3.1",
- "xmldom": "^0.6.0"
- },
- "engines": {
- "node": ">=6",
- "npm": ">=3",
- "yarn": ">=1.0"
- }
- },
- "node_modules/r2-opds-js/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/r2-opds-js/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/r2-shared-js": {
- "version": "1.0.52",
- "resolved": "https://registry.npmjs.org/r2-shared-js/-/r2-shared-js-1.0.52.tgz",
- "integrity": "sha512-GYPdqK7FPUSczC68ZHqz3gFL98VZU/UCQtlgknxvJdDrM7+2Pz805X6iMUMzr1mkL203/Wl8mm+O5BsjQnc8tw==",
- "dependencies": {
- "debug": "^4.3.2",
- "fast-deep-equal": "^3.1.3",
- "image-size": "^1.0.0",
- "mime-types": "^2.1.32",
- "moment": "^2.29.1",
- "r2-lcp-js": "^1.0.31",
- "r2-utils-js": "^1.0.26",
- "slugify": "^1.6.0",
- "ta-json-x": "^2.5.3",
- "tslib": "^2.3.1",
- "xmldom": "^0.6.0",
- "xpath": "^0.0.32",
- "yazl": "^2.5.1"
- },
- "bin": {
- "r2-shared-js-cli": "dist/es6-es2015/src/_utils/cli.js"
- },
- "engines": {
- "node": ">=6",
- "npm": ">=3",
- "yarn": ">=1.0"
- }
- },
- "node_modules/r2-shared-js/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/r2-shared-js/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/r2-utils-js": {
- "version": "1.0.26",
- "resolved": "https://registry.npmjs.org/r2-utils-js/-/r2-utils-js-1.0.26.tgz",
- "integrity": "sha512-8t9JIafLP1IXtpCcEqRxSlLtHrGPai3qidAq3Xe3sQTCNv29WZtHPglGSZX95BPPFDhIQfM9CiVvkbgReFFZ4Q==",
- "dependencies": {
- "@types/xmldom": "^0.1.31",
- "debug": "^4.3.2",
- "filehound": "^1.17.4",
- "node-stream-zip": "^1.14.0",
- "reflect-metadata": "^0.1.13",
- "request": "^2.88.2",
- "request-promise-native": "^1.0.9",
- "ta-json-x": "^2.5.3",
- "tslib": "^2.3.1",
- "unzipper": "^0.10.11",
- "xpath": "^0.0.32",
- "yauzl": "^2.10.0",
- "yazl": "^2.5.1"
- },
- "engines": {
- "node": ">=6",
- "npm": ">=3",
- "yarn": ">=1.0"
- }
- },
- "node_modules/r2-utils-js/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/r2-utils-js/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
- "dependencies": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "optional": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/reflect-metadata": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
- "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
- },
- "node_modules/regexpp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
- "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- }
- },
- "node_modules/request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
- "dependencies": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "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"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/request-promise-core": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
- "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
- "dependencies": {
- "lodash": "^4.17.19"
- },
- "engines": {
- "node": ">=0.10.0"
- },
- "peerDependencies": {
- "request": "^2.34"
- }
- },
- "node_modules/request-promise-native": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
- "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
- "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142",
- "dependencies": {
- "request-promise-core": "1.1.4",
- "stealthy-require": "^1.1.1",
- "tough-cookie": "^2.3.3"
- },
- "engines": {
- "node": ">=0.12.0"
- },
- "peerDependencies": {
- "request": "^2.34"
- }
- },
- "node_modules/request/node_modules/qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/retry": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
- "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
- "optional": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/retry-request": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz",
- "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==",
- "optional": true,
- "dependencies": {
- "debug": "^4.1.1",
- "extend": "^3.0.2"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/retry-request/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "optional": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/retry-request/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/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=="
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
- "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.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/send/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/send/node_modules/debug/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/send/node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/send/node_modules/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=="
- },
- "node_modules/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==",
- "dependencies": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
- },
- "node_modules/setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/signal-exit": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz",
- "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==",
- "optional": true
- },
- "node_modules/slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
- }
- },
- "node_modules/slugify": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz",
- "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/snakeize": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz",
- "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=",
- "optional": true
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "node_modules/sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "dependencies": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "bin": {
- "sshpk-conv": "bin/sshpk-conv",
- "sshpk-sign": "bin/sshpk-sign",
- "sshpk-verify": "bin/sshpk-verify"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/stealthy-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
- "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/stream-events": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz",
- "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==",
- "optional": true,
- "dependencies": {
- "stubs": "^3.0.0"
- }
- },
- "node_modules/stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "optional": true
- },
- "node_modules/streamsearch": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
- "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "optional": true,
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "optional": true
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "devOptional": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "devOptional": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/stubs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz",
- "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=",
- "optional": true
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ta-json-x": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/ta-json-x/-/ta-json-x-2.5.3.tgz",
- "integrity": "sha512-zhn9oZJVUOj73/WmLFoLszp8+zl8RZAU995dTQWhZK/2eSvFiz2eZ3nN6Kk7B6lRg2GUWnW1v3S3IUhFNbwYQA==",
- "dependencies": {
- "reflect-metadata": "^0.1.13"
- }
- },
- "node_modules/table": {
- "version": "6.7.1",
- "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
- "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==",
- "dev": true,
- "dependencies": {
- "ajv": "^8.0.1",
- "lodash.clonedeep": "^4.5.0",
- "lodash.truncate": "^4.4.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/table/node_modules/ajv": {
- "version": "8.6.3",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz",
- "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/table/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/teeny-request": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.3.tgz",
- "integrity": "sha512-Ew3aoFzgQEatLA5OBIjdr1DWJUaC1xardG+qbPPo5k/y/3fMwXLxpjh5UB5dVfElktLaQbbMs80chkz53ByvSg==",
- "optional": true,
- "dependencies": {
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "node-fetch": "^2.6.1",
- "stream-events": "^1.0.5",
- "uuid": "^8.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/teeny-request/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "optional": true,
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "node_modules/toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/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==",
- "dependencies": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
- },
- "node_modules/traverse": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
- "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ts-fetch": {
- "version": "0.1.0",
- "resolved": "git+ssh://git@github.com/panaC/ts_fetch.git#7f585951111aa0e9cb7fe7f99bdd927a9261cd7b",
- "integrity": "sha512-2/l4Nka27XgPGCK7PZL8DNFW1BYcf28uPaoYAmF05L94bmvgYx0vkqTAXVRWz2hle7AE5xdBRfk7/06w0nWikg==",
- "license": "Apache-2.0",
- "dependencies": {
- "fetch-cookie": "^1.0.0",
- "node-fetch": "^2.6.1",
- "tough-cookie": "^4.0.0"
- }
- },
- "node_modules/ts-fetch/node_modules/tough-cookie": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
- "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
- "dependencies": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.1.2"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tslib": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
- "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
- },
- "node_modules/tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "optional": true,
- "dependencies": {
- "is-typedarray": "^1.0.0"
- }
- },
- "node_modules/unique-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
- "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
- "optional": true,
- "dependencies": {
- "crypto-random-string": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/unit-compare": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unit-compare/-/unit-compare-1.0.1.tgz",
- "integrity": "sha1-DHRZ8OW/U2N+qHPKPO4Y3i7so4Y=",
- "dependencies": {
- "moment": "^2.14.1"
- }
- },
- "node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/unzipper": {
- "version": "0.10.11",
- "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz",
- "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==",
- "dependencies": {
- "big-integer": "^1.6.17",
- "binary": "~0.3.0",
- "bluebird": "~3.4.1",
- "buffer-indexof-polyfill": "~1.0.0",
- "duplexer2": "~0.1.4",
- "fstream": "^1.0.12",
- "graceful-fs": "^4.2.2",
- "listenercount": "~1.0.1",
- "readable-stream": "~2.3.6",
- "setimmediate": "~1.0.4"
- }
- },
- "node_modules/unzipper/node_modules/bluebird": {
- "version": "3.4.7",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
- "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM="
- },
- "node_modules/unzipper/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/unzipper/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/urijs": {
- "version": "1.19.7",
- "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.7.tgz",
- "integrity": "sha512-Id+IKjdU0Hx+7Zx717jwLPsPeUqz7rAtuVBRLLs+qn+J2nf9NGITWVCxcijgYxBqe83C7sqsQPs6H1pyz3x9gA=="
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "node_modules/utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
- "bin": {
- "uuid": "bin/uuid"
- }
- },
- "node_modules/v8-compile-cache": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
- "dev": true
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "engines": [
- "node >=0.6.0"
- ],
- "dependencies": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@ampproject/remapping": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz",
+ "integrity": "sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "^0.3.0"
}
},
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
- },
- "node_modules/websocket-driver": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
- "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
- "dependencies": {
- "http-parser-js": ">=0.5.1",
- "safe-buffer": ">=5.1.0",
- "websocket-extensions": ">=0.1.1"
+ "@assistant/conversation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@assistant/conversation/-/conversation-3.8.1.tgz",
+ "integrity": "sha512-YEyQ33xD1VCkJP16GRdXiuG55Vklbds3yiPcGSSf0hj2dj7mprWybipEZvVA4qsgv/NHrLvXPBFTySJrUpV/7g==",
+ "requires": {
+ "@types/aws-lambda": "^0.0.33",
+ "@types/debug": "^0.0.30",
+ "@types/express": "^4.11.1",
+ "@types/node": "12.12.24",
+ "debug": "^3.1.0",
+ "google-auth-library": "^6.1.0"
},
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/websocket-extensions": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
- "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
"dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
+ "@types/node": {
+ "version": "12.12.24",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.24.tgz",
+ "integrity": "sha512-1Ciqv9pqwVtW6FsIUKSZNB82E5Cu1I2bBTj1xuIHXLe/1zYLl3956Nbhg2MzSYHVfl9/rmanjbQIb7LibfCnug=="
+ },
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "google-auth-library": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz",
+ "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==",
+ "requires": {
+ "arrify": "^2.0.0",
+ "base64-js": "^1.3.0",
+ "ecdsa-sig-formatter": "^1.0.11",
+ "fast-text-encoding": "^1.0.0",
+ "gaxios": "^4.0.0",
+ "gcp-metadata": "^4.2.0",
+ "gtoken": "^5.0.4",
+ "jws": "^4.0.0",
+ "lru-cache": "^6.0.0"
+ }
+ }
}
},
- "node_modules/word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "@babel/code-frame": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
+ "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "optional": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "requires": {
+ "@babel/highlight": "^7.16.7"
}
},
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "node_modules/write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "optional": true,
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
+ "@babel/compat-data": {
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz",
+ "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==",
+ "dev": true
},
- "node_modules/xdg-basedir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
- "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
- "optional": true,
- "engines": {
- "node": ">=8"
+ "@babel/core": {
+ "version": "7.17.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz",
+ "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==",
+ "dev": true,
+ "requires": {
+ "@ampproject/remapping": "^2.0.0",
+ "@babel/code-frame": "^7.16.7",
+ "@babel/generator": "^7.17.0",
+ "@babel/helper-compilation-targets": "^7.16.7",
+ "@babel/helper-module-transforms": "^7.16.7",
+ "@babel/helpers": "^7.17.2",
+ "@babel/parser": "^7.17.0",
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.17.0",
+ "@babel/types": "^7.17.0",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.1.2",
+ "semver": "^6.3.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz",
+ "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.17.0",
+ "jsesc": "^2.5.1",
+ "source-map": "^0.5.0"
}
},
- "node_modules/xmldom": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz",
- "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg==",
- "engines": {
- "node": ">=10.0.0"
+ "@babel/helper-compilation-targets": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz",
+ "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.16.4",
+ "@babel/helper-validator-option": "^7.16.7",
+ "browserslist": "^4.17.5",
+ "semver": "^6.3.0"
}
},
- "node_modules/xpath": {
- "version": "0.0.32",
- "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz",
- "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==",
- "engines": {
- "node": ">=0.6.0"
+ "@babel/helper-environment-visitor": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz",
+ "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.7"
}
},
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "optional": true,
- "engines": {
- "node": ">=10"
+ "@babel/helper-function-name": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz",
+ "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.16.7",
+ "@babel/template": "^7.16.7",
+ "@babel/types": "^7.16.7"
}
},
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
- "node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "optional": true,
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
+ "@babel/helper-get-function-arity": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz",
+ "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.7"
}
},
- "node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "optional": true,
- "engines": {
- "node": ">=10"
+ "@babel/helper-hoist-variables": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz",
+ "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.7"
}
},
- "node_modules/yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
- "dependencies": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
+ "@babel/helper-module-imports": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
+ "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.7"
}
},
- "node_modules/yazl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
- "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
- "dependencies": {
- "buffer-crc32": "~0.2.3"
+ "@babel/helper-module-transforms": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz",
+ "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.16.7",
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/helper-simple-access": "^7.16.7",
+ "@babel/helper-split-export-declaration": "^7.16.7",
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.16.7",
+ "@babel/types": "^7.16.7"
}
},
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "optional": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- },
- "dependencies": {
- "@assistant/conversation": {
- "version": "3.8.1",
- "resolved": "https://registry.npmjs.org/@assistant/conversation/-/conversation-3.8.1.tgz",
- "integrity": "sha512-YEyQ33xD1VCkJP16GRdXiuG55Vklbds3yiPcGSSf0hj2dj7mprWybipEZvVA4qsgv/NHrLvXPBFTySJrUpV/7g==",
+ "@babel/helper-simple-access": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz",
+ "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==",
+ "dev": true,
"requires": {
- "@types/aws-lambda": "^0.0.33",
- "@types/debug": "^0.0.30",
- "@types/express": "^4.11.1",
- "@types/node": "12.12.24",
- "debug": "^3.1.0",
- "google-auth-library": "^6.1.0"
+ "@babel/types": "^7.16.7"
}
},
- "@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "@babel/helper-split-export-declaration": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz",
+ "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.10.4"
+ "@babel/types": "^7.16.7"
}
},
"@babel/helper-validator-identifier": {
- "version": "7.15.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
- "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz",
+ "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==",
"dev": true
},
+ "@babel/helpers": {
+ "version": "7.17.2",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz",
+ "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.17.0",
+ "@babel/types": "^7.17.0"
+ }
+ },
"@babel/highlight": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
- "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+ "version": "7.16.10",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
+ "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.14.5",
+ "@babel/helper-validator-identifier": "^7.16.7",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
},
@@ -4705,65 +290,117 @@
}
}
},
+ "@babel/parser": {
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz",
+ "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==",
+ "dev": true
+ },
+ "@babel/runtime": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz",
+ "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==",
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/template": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
+ "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.7",
+ "@babel/parser": "^7.16.7",
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz",
+ "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.7",
+ "@babel/generator": "^7.17.0",
+ "@babel/helper-environment-visitor": "^7.16.7",
+ "@babel/helper-function-name": "^7.16.7",
+ "@babel/helper-hoist-variables": "^7.16.7",
+ "@babel/helper-split-export-declaration": "^7.16.7",
+ "@babel/parser": "^7.17.0",
+ "@babel/types": "^7.17.0",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
+ "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@cspotcode/source-map-consumer": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
+ "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
+ "dev": true
+ },
+ "@cspotcode/source-map-support": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz",
+ "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==",
+ "dev": true,
+ "requires": {
+ "@cspotcode/source-map-consumer": "0.8.0"
+ }
+ },
+ "@dsherret/to-absolute-glob": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@dsherret/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
+ "integrity": "sha1-H2R13IvZdM6gei2vOGSzF7HdMyw=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "is-negated-glob": "^1.0.0"
+ }
+ },
"@eslint/eslintrc": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
- "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz",
+ "integrity": "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
+ "debug": "^4.3.2",
+ "espree": "^9.0.0",
"globals": "^13.9.0",
"ignore": "^4.0.6",
"import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
+ "js-yaml": "^4.1.0",
"minimatch": "^3.0.4",
"strip-json-comments": "^3.1.1"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ },
+ "dependencies": {
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
}
}
},
- "@firebase/app": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.7.1.tgz",
- "integrity": "sha512-B4z6E1EPQc0mOjF35IPKdDRCFnT/fNQIHfM+v7F9obB7ItPhGILK3LxaQfuampSQpF6GG6TPFDbrWK6myXAq+g==",
- "peer": true,
- "requires": {
- "@firebase/component": "0.5.7",
- "@firebase/logger": "0.3.0",
- "@firebase/util": "1.4.0",
- "tslib": "^2.1.0"
- }
- },
- "@firebase/app-compat": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.2.tgz",
- "integrity": "sha512-kF1maoqA8bZqJ4v/ojVvA7kIyyXEPkJmL48otGrC8LIgdcen7xCx3JFDe0DGeQywg+qujvdkJz/TptFN1cvAgw==",
- "peer": true,
- "requires": {
- "@firebase/app": "0.7.1",
- "@firebase/component": "0.5.7",
- "@firebase/logger": "0.3.0",
- "@firebase/util": "1.4.0",
- "tslib": "^2.1.0"
- }
- },
"@firebase/app-types": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.7.0.tgz",
@@ -4772,8 +409,7 @@
"@firebase/auth-interop-types": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz",
- "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==",
- "requires": {}
+ "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g=="
},
"@firebase/component": {
"version": "0.5.7",
@@ -4785,9 +421,9 @@
}
},
"@firebase/database": {
- "version": "0.12.1",
- "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.12.1.tgz",
- "integrity": "sha512-Ethk0hc476qnkSKNBa+8Yc7iM8AO69HYWsaD+QUC983FZtnuMyNLHtEeSUbLQYvyHo7cOjcc52slop14WmfZeQ==",
+ "version": "0.12.2",
+ "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.12.2.tgz",
+ "integrity": "sha512-Y1LZR1LIQM8YKMkeUPpAq3/e53hcfcXO+JEZ6vCzBeD6xRawqmpw6B5/DzePdCNNvjcqheXzSaR7T39eRZo/wA==",
"requires": {
"@firebase/auth-interop-types": "0.1.6",
"@firebase/component": "0.5.7",
@@ -4798,12 +434,12 @@
}
},
"@firebase/database-compat": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.1.1.tgz",
- "integrity": "sha512-K3DFWiw0YkLZtlfA9TOGPw6zVXKu5dQ1XqIGztUufFVRYW8IizReXVxzSSmJNR4Adr2LiU9j66Wenc6e5UfwaQ==",
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.1.2.tgz",
+ "integrity": "sha512-sV32QIRSNIBj/6OYtpmPzA/SfQz1/NBZbhxg9dIhGaSt9e5HaMxXRuz2lImudX0Sd/v8DKdExrxa++K6rKrRtA==",
"requires": {
"@firebase/component": "0.5.7",
- "@firebase/database": "0.12.1",
+ "@firebase/database": "0.12.2",
"@firebase/database-types": "0.9.1",
"@firebase/logger": "0.3.0",
"@firebase/util": "1.4.0",
@@ -4853,9 +489,9 @@
}
},
"@google-cloud/common": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.7.2.tgz",
- "integrity": "sha512-5Q9f74IbZaY6xAwJSNFy5SrGwbm1j7mpv+6A/r+K2dymjsXBH5UauB0tziaMwWoVVaMq1IQnZF9lgtfqqvxcUg==",
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.7.4.tgz",
+ "integrity": "sha512-JO4a8l/N6fkHZ+vWgNYgcNoZh1/m6kqv8F7+NpBkGqs7NzUtkmE9WdvHaNUwAOm1mIqbuX2wXKNfAZfqZr+vMg==",
"optional": true,
"requires": {
"@google-cloud/projectify": "^2.0.0",
@@ -4864,28 +500,9 @@
"duplexify": "^4.1.1",
"ent": "^2.2.0",
"extend": "^3.0.2",
- "google-auth-library": "^7.0.2",
+ "google-auth-library": "^7.9.2",
"retry-request": "^4.2.2",
"teeny-request": "^7.0.0"
- },
- "dependencies": {
- "google-auth-library": {
- "version": "7.10.0",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.0.tgz",
- "integrity": "sha512-ICsqaU+lxMHVlDUzMrfVIEqnARw2AwBiZ/2KnNM6BcTf9Nott+Af87DTIzmlnW865p3REUP2MVL0xkPC3a61aQ==",
- "optional": true,
- "requires": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- }
- }
}
},
"@google-cloud/firestore": {
@@ -4923,12 +540,12 @@
"optional": true
},
"@google-cloud/storage": {
- "version": "5.14.4",
- "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.14.4.tgz",
- "integrity": "sha512-CjpGuk+ZZB7b3yMXPQrPb0TMIhXqbDzrGxngeSl2S2fItFp2pZDnYhvFuB0/8S73cA2T/4x3g1tl6PB1OuuaoQ==",
+ "version": "5.15.3",
+ "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.15.3.tgz",
+ "integrity": "sha512-a2Y+mvfbzznWorQiv6c+qdPDlBpe47tikV8tpQSnvYXz1Ed/rjin41k2nKUQUcAPGHtYeTzGfKnCNKC+lv8qRg==",
"optional": true,
"requires": {
- "@google-cloud/common": "^3.7.0",
+ "@google-cloud/common": "^3.7.4",
"@google-cloud/paginator": "^3.0.0",
"@google-cloud/promisify": "^2.0.0",
"arrify": "^2.0.0",
@@ -4950,26 +567,19 @@
}
},
"@grpc/grpc-js": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz",
- "integrity": "sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA==",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.4.2.tgz",
+ "integrity": "sha512-aUN6oGk9un8rfYWz73nQgFxPCYJQYd8LpIGguZHBsNduBMyqG6EWANrsVBuTG+nl/l4dKb3x+qi1l9+oxDxqGg==",
"optional": true,
"requires": {
+ "@grpc/proto-loader": "^0.6.4",
"@types/node": ">=12.12.47"
- },
- "dependencies": {
- "@types/node": {
- "version": "16.10.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz",
- "integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ==",
- "optional": true
- }
}
},
"@grpc/proto-loader": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.5.tgz",
- "integrity": "sha512-GZdzyVQI1Bln/kCzIYgTKu+rQJ5dno0gVrfmLe4jqQu7T2e7svSwJzpCBqVU5hhBSJP3peuPjOMWsj5GR61YmQ==",
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.6.tgz",
+ "integrity": "sha512-cdMaPZ8AiFz6ua6PUbP+LKbhwJbFXnrQ/mlnKGUyzDUZ3wp7vPLksnmLCBX6SHgSmjX7CbNVNLFYD5GmmjO4GQ==",
"optional": true,
"requires": {
"@types/long": "^4.0.1",
@@ -4980,39 +590,159 @@
}
},
"@humanwhocodes/config-array": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
- "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz",
+ "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==",
"dev": true,
"requires": {
"@humanwhocodes/object-schema": "^1.2.0",
"debug": "^4.1.1",
"minimatch": "^3.0.4"
+ }
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
},
"dependencies": {
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
- "ms": "2.1.2"
+ "sprintf-js": "~1.0.2"
}
},
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true
}
}
},
- "@humanwhocodes/object-schema": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
- "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
+ "@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
+ "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==",
+ "dev": true
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.11",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
+ "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==",
+ "dev": true
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
+ "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true
},
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
"@panva/asn1.js": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz",
@@ -5082,12 +812,71 @@
"integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=",
"optional": true
},
+ "@sinonjs/commons": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
+ "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "@sinonjs/fake-timers": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz",
+ "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ },
+ "@sinonjs/samsam": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz",
+ "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.6.0",
+ "lodash.get": "^4.4.2",
+ "type-detect": "^4.0.8"
+ }
+ },
+ "@sinonjs/text-encoding": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
+ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
+ "dev": true
+ },
"@tootallnate/once": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
"optional": true
},
+ "@tsconfig/node10": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
+ "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
+ "dev": true
+ },
+ "@tsconfig/node12": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
+ "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
+ "dev": true
+ },
+ "@tsconfig/node14": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
+ "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
+ "dev": true
+ },
+ "@tsconfig/node16": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
+ "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
+ "dev": true
+ },
"@types/aws-lambda": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-0.0.33.tgz",
@@ -5102,6 +891,12 @@
"@types/node": "*"
}
},
+ "@types/chai": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz",
+ "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==",
+ "dev": true
+ },
"@types/connect": {
"version": "3.4.35",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
@@ -5158,10 +953,35 @@
"@types/express": "*"
}
},
+ "@types/fs-extra": {
+ "version": "8.1.2",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz",
+ "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
+ "dev": true,
+ "requires": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/json-schema": {
+ "version": "7.0.9",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
+ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
+ "dev": true
+ },
"@types/lodash": {
- "version": "4.14.175",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz",
- "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==",
+ "version": "4.14.176",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.176.tgz",
+ "integrity": "sha512-xZmuPTa3rlZoIbtDUyJKZQimJV3bxCmzMIO2c9Pz9afyDro6kr7R79GwcB6mRhuoPmV2p1Vb66WOJH7F886WKQ==",
"dev": true
},
"@types/long": {
@@ -5175,10 +995,28 @@
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
"integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
},
+ "@types/minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
+ "dev": true
+ },
+ "@types/mocha": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz",
+ "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==",
+ "dev": true
+ },
"@types/node": {
- "version": "12.12.24",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.24.tgz",
- "integrity": "sha512-1Ciqv9pqwVtW6FsIUKSZNB82E5Cu1I2bBTj1xuIHXLe/1zYLl3956Nbhg2MzSYHVfl9/rmanjbQIb7LibfCnug=="
+ "version": "16.11.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz",
+ "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w=="
+ },
+ "@types/proxyquire": {
+ "version": "1.3.28",
+ "resolved": "https://registry.npmjs.org/@types/proxyquire/-/proxyquire-1.3.28.tgz",
+ "integrity": "sha512-SQaNzWQ2YZSr7FqAyPPiA3FYpux2Lqh3HWMZQk47x3xbMCqgC/w0dY3dw9rGqlweDDkrySQBcaScXWeR+Yb11Q==",
+ "dev": true
},
"@types/qs": {
"version": "6.9.7",
@@ -5199,10 +1037,135 @@
"@types/node": "*"
}
},
- "@types/xmldom": {
- "version": "0.1.31",
- "resolved": "https://registry.npmjs.org/@types/xmldom/-/xmldom-0.1.31.tgz",
- "integrity": "sha512-bVy7s0nvaR5D1mT1a8ZkByHWNOGb6Vn4yi5TWhEdmyKlAG+08SA7Md6+jH+tYmMLueAwNeWvHHpeKrr6S4c4BA=="
+ "@types/sinon": {
+ "version": "10.0.9",
+ "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.9.tgz",
+ "integrity": "sha512-xGZVAe61omKnVGedBdTbAveuJ5QyI0LrMIcp0hc1LmVI5IEjs5qG4fM0sv9GIBA2JVoKuf7332IjQX4y5qqMMQ==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/fake-timers": "^7.1.0"
+ }
+ },
+ "@types/validator": {
+ "version": "13.7.1",
+ "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.1.tgz",
+ "integrity": "sha512-I6OUIZ5cYRk5lp14xSOAiXjWrfVoMZVjDuevBYgQDYzZIjsf2CAISpEcXOkFAtpAHbmWIDLcZObejqny/9xq5Q=="
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.1.tgz",
+ "integrity": "sha512-cFImaoIr5Ojj358xI/SDhjog57OK2NqlpxwdcgyxDA3bJlZcJq5CPzUXtpD7CxI2Hm6ATU7w5fQnnkVnmwpHqw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/experimental-utils": "5.3.1",
+ "@typescript-eslint/scope-manager": "5.3.1",
+ "debug": "^4.3.2",
+ "functional-red-black-tree": "^1.0.1",
+ "ignore": "^5.1.8",
+ "regexpp": "^3.2.0",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/experimental-utils": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz",
+ "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.3.1",
+ "@typescript-eslint/types": "5.3.1",
+ "@typescript-eslint/typescript-estree": "5.3.1",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.3.1.tgz",
+ "integrity": "sha512-TD+ONlx5c+Qhk21x9gsJAMRohWAUMavSOmJgv3JGy9dgPhuBd5Wok0lmMClZDyJNLLZK1JRKiATzCKZNUmoyfw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.3.1",
+ "@typescript-eslint/types": "5.3.1",
+ "@typescript-eslint/typescript-estree": "5.3.1",
+ "debug": "^4.3.2"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz",
+ "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.3.1",
+ "@typescript-eslint/visitor-keys": "5.3.1"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz",
+ "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz",
+ "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.3.1",
+ "@typescript-eslint/visitor-keys": "5.3.1",
+ "debug": "^4.3.2",
+ "globby": "^11.0.4",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz",
+ "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.3.1",
+ "eslint-visitor-keys": "^3.0.0"
+ }
+ },
+ "@ungap/promise-all-settled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
+ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
+ "dev": true
+ },
+ "@xmldom/xmldom": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.1.tgz",
+ "integrity": "sha512-4wOae+5N2RZ+CZXd9ZKwkaDi55IxrSTOjHpxTvQQ4fomtOJmqVxbmICA9jE1jvnqNhpfgz8cnfFagG86wV/xLQ=="
},
"abort-controller": {
"version": "3.0.0",
@@ -5222,17 +1185,22 @@
}
},
"acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
+ "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
"dev": true
},
"acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "requires": {}
+ "dev": true
+ },
+ "acorn-walk": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+ "dev": true
},
"agent-base": {
"version": "6.0.2",
@@ -5240,21 +1208,16 @@
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
"requires": {
"debug": "4"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
+ }
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
}
},
"ajv": {
@@ -5277,41 +1240,79 @@
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "devOptional": true
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
},
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "devOptional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "append-transform": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
+ "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
"dev": true,
"requires": {
- "sprintf-js": "~1.0.2"
+ "default-require-extensions": "^3.0.0"
}
},
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "array-differ": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
+ "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
+ "dev": true
+ },
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
"arrify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
"integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="
},
"asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"requires": {
"safer-buffer": "~2.1.0"
}
@@ -5321,10 +1322,10 @@
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
- "astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true
},
"async-retry": {
@@ -5370,9 +1371,9 @@
}
},
"big-integer": {
- "version": "1.6.49",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz",
- "integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw=="
+ "version": "1.6.51",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
+ "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg=="
},
"bignumber.js": {
"version": "9.0.1",
@@ -5388,6 +1389,12 @@
"chainsaw": "~0.1.0"
}
},
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true
+ },
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
@@ -5442,6 +1449,34 @@
"concat-map": "0.0.1"
}
},
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
+ },
+ "browserslist": {
+ "version": "4.19.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
+ "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001286",
+ "electron-to-chromium": "^1.4.17",
+ "escalade": "^3.1.1",
+ "node-releases": "^2.0.1",
+ "picocolors": "^1.0.0"
+ }
+ },
"buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
@@ -5467,17 +1502,56 @@
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
},
+ "caching-transform": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
+ "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
+ "dev": true,
+ "requires": {
+ "hasha": "^5.0.0",
+ "make-dir": "^3.0.0",
+ "package-hash": "^4.0.0",
+ "write-file-atomic": "^3.0.0"
+ }
+ },
"callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true
},
+ "camelcase": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
+ "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001312",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz",
+ "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==",
+ "dev": true
+ },
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
+ "chai": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
+ "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
+ "dev": true,
+ "requires": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^3.0.1",
+ "get-func-name": "^2.0.0",
+ "loupe": "^2.3.1",
+ "pathval": "^1.1.1",
+ "type-detect": "^4.0.5"
+ }
+ },
"chainsaw": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
@@ -5496,22 +1570,69 @@
"supports-color": "^7.1.0"
}
},
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
+ "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
+ "class-transformer": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.4.0.tgz",
+ "integrity": "sha512-ETWD/H2TbWbKEi7m9N4Km5+cw1hNcqJSxlSYhsLsNjQzWWiZIYA1zafxpK9PwVfaZ6AqR5rrjPVUBGESm5tQUA=="
+ },
+ "class-validator": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.1.tgz",
+ "integrity": "sha512-zWIeYFhUitvAHBwNhDdCRK09hWx+P0HUwFE8US8/CxFpMVzkUK8RJl7yOIE+BVu2lxyPNgeOaFv78tLE47jBIg==",
+ "requires": {
+ "@types/validator": "^13.1.3",
+ "libphonenumber-js": "^1.9.7",
+ "validator": "^13.5.2"
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true
+ },
"cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "optional": true,
"requires": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^7.0.0"
}
},
+ "code-block-writer": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-10.1.1.tgz",
+ "integrity": "sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==",
+ "dev": true
+ },
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "devOptional": true,
"requires": {
"color-name": "~1.1.4"
}
@@ -5519,8 +1640,7 @@
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "devOptional": true
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"combined-stream": {
"version": "1.0.8",
@@ -5530,6 +1650,18 @@
"delayed-stream": "~1.0.0"
}
},
+ "commander": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
+ "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
"compressible": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -5564,6 +1696,13 @@
"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": {
@@ -5571,6 +1710,23 @@
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
},
+ "convert-source-map": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
+ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ },
+ "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==",
+ "dev": true
+ }
+ }
+ },
"cookie": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
@@ -5595,6 +1751,12 @@
"vary": "^1"
}
},
+ "create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true
+ },
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -5621,17 +1783,32 @@
}
},
"date-and-time": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-2.0.0.tgz",
- "integrity": "sha512-HJSzj25iPm8E01nt+rSmCIlwjsmjvKfUivG/kXBglpymcHF1FolWAqWwTEV4FvN1Lx5UjPf0J1W4H8yQsVBfFg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-2.0.1.tgz",
+ "integrity": "sha512-O7Xe5dLaqvY/aF/MFWArsAM1J4j7w1CSZlPCX9uHgmb+6SbkPd8Q4YOvfvH/cZGvFlJFfHOZKxQtmMUOoZhc/w==",
"optional": true
},
"debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
"requires": {
- "ms": "^2.1.1"
+ "type-detect": "^4.0.0"
}
},
"deep-is": {
@@ -5640,6 +1817,15 @@
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
+ "default-require-extensions": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
+ "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==",
+ "dev": true,
+ "requires": {
+ "strip-bom": "^4.0.0"
+ }
+ },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -5663,6 +1849,21 @@
"streamsearch": "0.1.2"
}
},
+ "diff": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+ "dev": true
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
"doctrine": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@@ -5703,6 +1904,11 @@
"util-deprecate": "~1.0.1"
}
},
+ "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=="
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -5747,11 +1953,16 @@
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
+ "electron-to-chromium": {
+ "version": "1.4.68",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz",
+ "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==",
+ "dev": true
+ },
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "devOptional": true
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"encodeurl": {
"version": "1.0.2",
@@ -5787,11 +1998,16 @@
"resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz",
"integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA="
},
+ "es6-error": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
+ "dev": true
+ },
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "optional": true
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
},
"escape-html": {
"version": "1.0.3",
@@ -5805,37 +2021,36 @@
"dev": true
},
"eslint": {
- "version": "7.32.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
- "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.2.0.tgz",
+ "integrity": "sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw==",
"dev": true,
"requires": {
- "@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.3",
- "@humanwhocodes/config-array": "^0.5.0",
+ "@eslint/eslintrc": "^1.0.4",
+ "@humanwhocodes/config-array": "^0.6.0",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
+ "debug": "^4.3.2",
"doctrine": "^3.0.0",
"enquirer": "^2.3.5",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
+ "eslint-scope": "^6.0.0",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.0.0",
+ "espree": "^9.0.0",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.1.2",
+ "glob-parent": "^6.0.1",
"globals": "^13.6.0",
"ignore": "^4.0.6",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
+ "js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
@@ -5843,29 +2058,53 @@
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
"progress": "^2.0.0",
- "regexpp": "^3.1.0",
+ "regexpp": "^3.2.0",
"semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
+ "strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0",
- "table": "^6.0.9",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "eslint-scope": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz",
+ "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==",
"dev": true,
"requires": {
- "ms": "2.1.2"
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
}
},
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
@@ -5873,8 +2112,7 @@
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz",
"integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"eslint-scope": {
"version": "5.1.1",
@@ -5887,45 +2125,37 @@
}
},
"eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
"dev": true,
"requires": {
- "eslint-visitor-keys": "^1.1.0"
+ "eslint-visitor-keys": "^2.0.0"
},
"dependencies": {
"eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
"dev": true
}
}
},
"eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz",
+ "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==",
"dev": true
},
"espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz",
+ "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==",
"dev": true,
"requires": {
- "acorn": "^7.4.0",
+ "acorn": "^8.5.0",
"acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
+ "eslint-visitor-keys": "^3.0.0"
}
},
"esprima": {
@@ -5944,9 +2174,9 @@
},
"dependencies": {
"estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
}
}
@@ -5961,9 +2191,9 @@
},
"dependencies": {
"estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
}
}
@@ -6039,9 +2269,23 @@
"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=="
}
}
},
+ "express-request-mock": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/express-request-mock/-/express-request-mock-3.1.0.tgz",
+ "integrity": "sha512-Ep1uuqCRUc2nTjwAeaVuviDGPCOU2xIhyVHQoN6+xDc9ANJJY42auiAO0guJTvnyyHY/8Q3/hZWEjHf1eo6hSQ==",
+ "dev": true,
+ "requires": {
+ "node-mocks-http": "^1.9.0"
+ }
+ },
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -6057,6 +2301,19 @@
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
+ "fast-glob": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
+ "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ }
+ },
"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",
@@ -6073,6 +2330,15 @@
"resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
"integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig=="
},
+ "fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
"faye-websocket": {
"version": "0.11.4",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
@@ -6090,9 +2356,9 @@
}
},
"fetch-cookie": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-1.0.0.tgz",
- "integrity": "sha512-SWcAhkDe4yVBFtwRqJNmot6k1XjjzI7tw3aRHepxXrK6FQp6obBhqcnsdm2aNUzrtE71607crNAYodtKMq3TjA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-1.0.1.tgz",
+ "integrity": "sha512-gfQjp/UOsjHeuFzkOqjcYtJ20qhRzyhdK5fV2i7Qh+8bT0+HH2TKPl1ql+u39gsTcmehFX9vhvULZAsXACApgQ==",
"requires": {
"tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0"
}
@@ -6134,6 +2400,25 @@
"unit-compare": "^1.0.1"
}
},
+ "fill-keys": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz",
+ "integrity": "sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA=",
+ "dev": true,
+ "requires": {
+ "is-object": "~1.0.1",
+ "merge-descriptors": "~1.0.0"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
"finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
@@ -6163,6 +2448,27 @@
}
}
},
+ "find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
"firebase-admin": {
"version": "9.12.0",
"resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-9.12.0.tgz",
@@ -6177,19 +2483,12 @@
"jsonwebtoken": "^8.5.1",
"jwks-rsa": "^2.0.2",
"node-forge": "^0.10.0"
- },
- "dependencies": {
- "@types/node": {
- "version": "16.10.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz",
- "integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ=="
- }
}
},
"firebase-functions": {
- "version": "3.15.7",
- "resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-3.15.7.tgz",
- "integrity": "sha512-ZD7r8eoWWebgs+mTqfH8NLUT2C0f7/cyAvIA1RSUdBVQZN7MBBt3oSlN/rL3e+m6tdlJz6YbQ3hrOKOGjOVYvQ==",
+ "version": "3.16.0",
+ "resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-3.16.0.tgz",
+ "integrity": "sha512-6ISOn0JckMtpA3aJ/+wCCGhThUhBUrpZD+tSkUeolx0Vr+NoYFXA0+2YzJZa/A2MDU8gotPzUtnauLSEQvfClQ==",
"requires": {
"@types/cors": "^2.8.5",
"@types/express": "4.17.3",
@@ -6220,6 +2519,12 @@
"lodash": "^4.17.5"
}
},
+ "flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true
+ },
"flat-cache": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
@@ -6228,14 +2533,35 @@
"requires": {
"flatted": "^3.1.0",
"rimraf": "^3.0.2"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
}
},
"flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz",
+ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==",
"dev": true
},
+ "foreground-child": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
+ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -6261,11 +2587,35 @@
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
+ "fromentries": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz",
+ "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true
+ },
"fstream": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
@@ -6287,11 +2637,16 @@
}
}
},
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
"functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "devOptional": true
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
},
"gaxios": {
"version": "4.3.2",
@@ -6327,32 +2682,30 @@
"google-auth-library": "^7.0.0",
"pumpify": "^2.0.0",
"stream-events": "^1.0.4"
- },
- "dependencies": {
- "google-auth-library": {
- "version": "7.10.0",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.0.tgz",
- "integrity": "sha512-ICsqaU+lxMHVlDUzMrfVIEqnARw2AwBiZ/2KnNM6BcTf9Nott+Af87DTIzmlnW865p3REUP2MVL0xkPC3a61aQ==",
- "optional": true,
- "requires": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- }
- }
}
},
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true
+ },
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "optional": true
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+ },
+ "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=",
+ "dev": true
+ },
+ "get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true
},
"get-stream": {
"version": "6.0.1",
@@ -6391,18 +2744,33 @@
}
},
"globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
+ "version": "13.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
+ "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
}
},
+ "globby": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
+ "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.1.1",
+ "ignore": "^5.1.4",
+ "merge2": "^1.3.0",
+ "slash": "^3.0.0"
+ }
+ },
"google-auth-library": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz",
- "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.1.tgz",
+ "integrity": "sha512-nQxgM1ZopUMcpMnu95kOSzI+9tJl4YDOZJomSTBGlRLpxfBopdwto7WvzoI87HuN0nQqVETgOsHi/C/po1rppA==",
+ "optional": true,
"requires": {
"arrify": "^2.0.0",
"base64-js": "^1.3.0",
@@ -6416,12 +2784,12 @@
}
},
"google-gax": {
- "version": "2.26.0",
- "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.26.0.tgz",
- "integrity": "sha512-D/8fjTydl9p3ejxuW3ZVHVZqKzz6zYaz5MMEucijsJonJ4RHqWAzHFKZMKSc7yyUiTEBGqG7nU2S8NUPUUYDEA==",
+ "version": "2.28.0",
+ "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.28.0.tgz",
+ "integrity": "sha512-kuqc8a4+CTCMBcF3tlOL7Sa74JWkTzcZxatAQTCVK35WToXkHnJ0qncFOJuegUv3EbV9IQY4j/+NZdFLv+lbTA==",
"optional": true,
"requires": {
- "@grpc/grpc-js": "~1.3.0",
+ "@grpc/grpc-js": "~1.4.0",
"@grpc/proto-loader": "^0.6.1",
"@types/long": "^4.0.0",
"abort-controller": "^3.0.0",
@@ -6429,30 +2797,11 @@
"fast-text-encoding": "^1.0.3",
"google-auth-library": "^7.6.1",
"is-stream-ended": "^0.1.4",
- "node-fetch": "^2.6.1",
- "object-hash": "^2.1.1",
- "proto3-json-serializer": "^0.1.1",
- "protobufjs": "6.11.2",
- "retry-request": "^4.0.0"
- },
- "dependencies": {
- "google-auth-library": {
- "version": "7.10.0",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.0.tgz",
- "integrity": "sha512-ICsqaU+lxMHVlDUzMrfVIEqnARw2AwBiZ/2KnNM6BcTf9Nott+Af87DTIzmlnW865p3REUP2MVL0xkPC3a61aQ==",
- "optional": true,
- "requires": {
- "arrify": "^2.0.0",
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "fast-text-encoding": "^1.0.0",
- "gaxios": "^4.0.0",
- "gcp-metadata": "^4.2.0",
- "gtoken": "^5.0.4",
- "jws": "^4.0.0",
- "lru-cache": "^6.0.0"
- }
- }
+ "node-fetch": "^2.6.1",
+ "object-hash": "^2.1.1",
+ "proto3-json-serializer": "^0.1.1",
+ "protobufjs": "6.11.2",
+ "retry-request": "^4.0.0"
}
},
"google-p12-pem": {
@@ -6468,6 +2817,12 @@
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
},
+ "growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+ "dev": true
+ },
"gtoken": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz",
@@ -6492,6 +2847,15 @@
"har-schema": "^2.0.0"
}
},
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -6504,6 +2868,35 @@
"integrity": "sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==",
"optional": true
},
+ "hasha": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz",
+ "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==",
+ "dev": true,
+ "requires": {
+ "is-stream": "^2.0.0",
+ "type-fest": "^0.8.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ }
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
+ },
+ "html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
"http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
@@ -6537,23 +2930,6 @@
"@tootallnate/once": "2",
"agent-base": "6",
"debug": "4"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "optional": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- }
}
},
"http-signature": {
@@ -6573,21 +2949,14 @@
"requires": {
"agent-base": "6",
"debug": "4"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
+ }
+ },
+ "i18next": {
+ "version": "21.5.3",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.5.3.tgz",
+ "integrity": "sha512-9R8127a0/N5okiD7eeo6XBPQsHgHsLr1GdQEa35Pcw305ArC9KZDLs9kbgdn3xuVUNYlVu8+gWzz73eVkna0gA==",
+ "requires": {
+ "@babel/runtime": "^7.12.0"
}
},
"iconv-lite": {
@@ -6599,15 +2968,15 @@
}
},
"ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "version": "5.1.9",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz",
+ "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==",
"dev": true
},
"image-size": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz",
- "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.1.tgz",
+ "integrity": "sha512-VAwkvNSNGClRw9mDHhc5Efax8PLlsOGcUTh0T/LIriC8vPA3U5PdqXWqkz406MoYHMKW8Uf9gWr05T/rYB44kQ==",
"requires": {
"queue": "6.0.2"
}
@@ -6625,8 +2994,13 @@
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "devOptional": true
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true
},
"inflight": {
"version": "1.0.6",
@@ -6647,6 +3021,34 @@
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "requires": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -6656,8 +3058,7 @@
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "devOptional": true
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
},
"is-glob": {
"version": "4.0.3",
@@ -6668,12 +3069,45 @@
"is-extglob": "^2.1.1"
}
},
+ "is-negated-glob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
+ "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
"is-obj": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
"optional": true
},
+ "is-object": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz",
+ "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "dev": true
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "^1.0.0"
+ }
+ },
"is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -6690,6 +3124,27 @@
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "^0.1.2"
+ }
+ },
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -6706,6 +3161,96 @@
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
+ "istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
+ "dev": true
+ },
+ "istanbul-lib-hook": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
+ "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
+ "dev": true,
+ "requires": {
+ "append-transform": "^2.0.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
+ "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.7.5",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.0.0",
+ "semver": "^6.3.0"
+ }
+ },
+ "istanbul-lib-processinfo": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
+ "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
+ "dev": true,
+ "requires": {
+ "archy": "^1.0.0",
+ "cross-spawn": "^7.0.0",
+ "istanbul-lib-coverage": "^3.0.0-alpha.1",
+ "make-dir": "^3.0.0",
+ "p-map": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "uuid": "^3.3.3"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz",
+ "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==",
+ "dev": true,
+ "requires": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
"jose": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz",
@@ -6721,13 +3266,12 @@
"dev": true
},
"js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
"requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "argparse": "^2.0.1"
}
},
"jsbn": {
@@ -6735,6 +3279,12 @@
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
},
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
"json-bigint": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
@@ -6744,9 +3294,9 @@
}
},
"json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
},
"json-schema-traverse": {
"version": "0.4.1",
@@ -6764,6 +3314,24 @@
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
+ "json5": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
+ "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
"jsonwebtoken": {
"version": "8.5.1",
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
@@ -6808,16 +3376,22 @@
}
},
"jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
- "json-schema": "0.2.3",
+ "json-schema": "0.4.0",
"verror": "1.10.0"
}
},
+ "just-extend": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
+ "dev": true
+ },
"jwa": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
@@ -6829,30 +3403,15 @@
}
},
"jwks-rsa": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-2.0.4.tgz",
- "integrity": "sha512-iJqVCECYZZ+3oPmY1qXv3Fq+3ywDtuNEVBvG41pPlaR0zyGxa12nC0beAOBBUhETJmc05puS50mRQN4NkCGhmg==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-2.0.5.tgz",
+ "integrity": "sha512-fliHfsiBRzEU0nXzSvwnh0hynzGB0WihF+CinKbSRlaqRxbqqKf2xbBPgwc8mzf18/WgwlG8e5eTpfSTBcU4DQ==",
"requires": {
"@types/express-jwt": "0.0.42",
"debug": "^4.3.2",
"jose": "^2.0.5",
"limiter": "^1.1.5",
"lru-memoizer": "^2.1.4"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
}
},
"jws": {
@@ -6874,6 +3433,11 @@
"type-check": "~0.4.0"
}
},
+ "libphonenumber-js": {
+ "version": "1.9.42",
+ "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.9.42.tgz",
+ "integrity": "sha512-UBtU0ylpZPKPT8NLIyQJWj/DToMFxmo3Fm5m6qDc0LATvf0SY0qUhaurCEvukAB9Fo+Ia2Anjzqwoupaa64fXg=="
+ },
"limiter": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
@@ -6884,6 +3448,15 @@
"resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
"integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc="
},
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
@@ -6900,6 +3473,18 @@
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
},
+ "lodash.flattendeep": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
+ "dev": true
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "dev": true
+ },
"lodash.includes": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
@@ -6941,10 +3526,26 @@
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
},
- "lodash.truncate": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
+ "log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ }
+ },
+ "loglevel": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz",
+ "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==",
+ "dev": true
+ },
+ "loglevel-plugin-prefix": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz",
+ "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==",
"dev": true
},
"long": {
@@ -6953,6 +3554,15 @@
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==",
"optional": true
},
+ "loupe": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz",
+ "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==",
+ "dev": true,
+ "requires": {
+ "get-func-name": "^2.0.0"
+ }
+ },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -6990,19 +3600,16 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "optional": true,
"requires": {
"semver": "^6.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "optional": true
- }
}
},
+ "make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true
+ },
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -7013,11 +3620,27 @@
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
},
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
},
+ "micromatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.2.3"
+ }
+ },
"mime": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
@@ -7027,22 +3650,14 @@
"mime-db": {
"version": "1.50.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz",
- "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==",
- "optional": true
+ "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A=="
},
"mime-types": {
- "version": "2.1.32",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
- "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
+ "version": "2.1.33",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz",
+ "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==",
"requires": {
- "mime-db": "1.49.0"
- },
- "dependencies": {
- "mime-db": {
- "version": "1.49.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
- "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA=="
- }
+ "mime-db": "1.50.0"
}
},
"minimatch": {
@@ -7056,30 +3671,132 @@
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
},
"mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"requires": {
- "minimist": "^1.2.5"
+ "minimist": "^1.2.6"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+ }
+ }
+ },
+ "mocha": {
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz",
+ "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==",
+ "dev": true,
+ "requires": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.2",
+ "debug": "4.3.2",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.1.7",
+ "growl": "1.10.5",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "3.0.4",
+ "ms": "2.1.3",
+ "nanoid": "3.1.25",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "which": "2.0.2",
+ "workerpool": "6.1.5",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "3.1.25",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
+ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+ "dev": true
+ }
}
},
+ "module-not-found-error": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz",
+ "integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=",
+ "dev": true
+ },
"moment": {
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
},
"ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "multimatch": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz",
+ "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==",
+ "dev": true,
+ "requires": {
+ "@types/minimatch": "^3.0.3",
+ "array-differ": "^3.0.0",
+ "array-union": "^2.1.0",
+ "arrify": "^2.0.1",
+ "minimatch": "^3.0.4"
+ }
},
"nanoid": {
- "version": "3.1.28",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.28.tgz",
- "integrity": "sha512-gSu9VZ2HtmoKYe/lmyPFES5nknFrHa+/DT9muUFWFMi6Jh9E1I7bkvlQ8xxf1Kos9pi9o8lBnIOkatMhKX/YUw=="
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz",
+ "integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA=="
},
"natural-compare": {
"version": "1.4.0",
@@ -7092,10 +3809,40 @@
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
+ "nise": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz",
+ "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.8.3",
+ "@sinonjs/fake-timers": ">=5",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "path-to-regexp": "^1.7.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ }
+ }
+ },
"node-fetch": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
- "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
"requires": {
"whatwg-url": "^5.0.0"
}
@@ -7105,11 +3852,207 @@
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
"integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
},
+ "node-mocks-http": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/node-mocks-http/-/node-mocks-http-1.11.0.tgz",
+ "integrity": "sha512-jS/WzSOcKbOeGrcgKbenZeNhxUNnP36Yw11+hL4TTxQXErGfqYZ+MaYNNvhaTiGIJlzNSqgQkk9j8dSu1YWSuw==",
+ "dev": true,
+ "requires": {
+ "accepts": "^1.3.7",
+ "content-disposition": "^0.5.3",
+ "depd": "^1.1.0",
+ "fresh": "^0.5.2",
+ "merge-descriptors": "^1.0.1",
+ "methods": "^1.1.2",
+ "mime": "^1.3.4",
+ "parseurl": "^1.3.3",
+ "range-parser": "^1.2.0",
+ "type-is": "^1.6.18"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ }
+ }
+ },
+ "node-preload": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
+ "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
+ "dev": true,
+ "requires": {
+ "process-on-spawn": "^1.0.0"
+ }
+ },
+ "node-releases": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
+ "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==",
+ "dev": true
+ },
"node-stream-zip": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz",
"integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw=="
},
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "nyc": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
+ "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
+ "dev": true,
+ "requires": {
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "caching-transform": "^4.0.0",
+ "convert-source-map": "^1.7.0",
+ "decamelize": "^1.2.0",
+ "find-cache-dir": "^3.2.0",
+ "find-up": "^4.1.0",
+ "foreground-child": "^2.0.0",
+ "get-package-type": "^0.1.0",
+ "glob": "^7.1.6",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-hook": "^3.0.0",
+ "istanbul-lib-instrument": "^4.0.0",
+ "istanbul-lib-processinfo": "^2.0.2",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.0.2",
+ "make-dir": "^3.0.0",
+ "node-preload": "^0.2.1",
+ "p-map": "^3.0.0",
+ "process-on-spawn": "^1.0.0",
+ "resolve-from": "^5.0.0",
+ "rimraf": "^3.0.0",
+ "signal-exit": "^3.0.2",
+ "spawn-wrap": "^2.0.0",
+ "test-exclude": "^6.0.0",
+ "yargs": "^15.0.2"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "dev": true,
+ "requires": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
@@ -7143,16 +4086,15 @@
}
},
"opds-fetcher-parser": {
- "version": "git+ssh://git@github.com/panaC/opds_fetcher_parser.git#efec695f50b386071ccf935396f0a8ea4750c9ae",
- "integrity": "sha512-vhOHEBu7Bs9y0XHgGo8u6ntgrjAtclGZE61cP11F1HBwBnF8s7w+Vlagc7MJq2xMy0RuMN45lzVoco8Rl9petQ==",
- "from": "opds-fetcher-parser@github:panaC/opds_fetcher_parser#efec695f50b386071ccf935396f0a8ea4750c9ae",
+ "version": "git+https://github.com/edrlab/opds_fetcher_parser.git#be1b96f67499102675676b03a5aee4d267924972",
+ "from": "git+https://github.com/edrlab/opds_fetcher_parser.git#be1b96f67499102675676b03a5aee4d267924972",
"requires": {
"moment": "^2.29.1",
"nanoid": "^3.1.23",
"r2-lcp-js": "^1.0.30",
"r2-opds-js": "^1.0.35",
"r2-shared-js": "^1.0.51",
- "ts-fetch": "github:panaC/ts_fetch#7f585951111aa0e9cb7fe7f99bdd927a9261cd7b"
+ "ts-fetch": "github:edrlab/ts_fetch#bdb3444e608e6ae894a01cd703805e06ec991d66"
}
},
"optionator": {
@@ -7173,11 +4115,46 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "optional": true,
"requires": {
"yocto-queue": "^0.1.0"
}
},
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "p-map": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "package-hash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
+ "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.15",
+ "hasha": "^5.0.0",
+ "lodash.flattendeep": "^4.4.0",
+ "release-zalgo": "^1.0.0"
+ }
+ },
"parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -7192,6 +4169,12 @@
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -7203,11 +4186,29 @@
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true
},
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
"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="
},
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ },
+ "pathval": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
+ "dev": true
+ },
"pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
@@ -7218,6 +4219,66 @@
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
+ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ }
+ }
+ },
"prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -7229,6 +4290,15 @@
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
+ "process-on-spawn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
+ "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
+ "dev": true,
+ "requires": {
+ "fromentries": "^1.2.0"
+ }
+ },
"progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -7254,9 +4324,9 @@
}
},
"proto3-json-serializer": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.4.tgz",
- "integrity": "sha512-bFzdsKU/zaTobWrRxRniMZIzzcgKYlmBWL1gAcTXZ2M7TQTGPI0JoYYs6bN7tpWj59ZCfwg7Ii/A2e8BbQGYnQ==",
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.5.tgz",
+ "integrity": "sha512-G395jcZkgNXNeS+6FGqd09TsXeoCs9wmBWByDiwFy7Yd7HD8pyfyvf6q+rGh7PhT4AshRpG4NowzoKYUtkNjKg==",
"optional": true
},
"protobufjs": {
@@ -7278,14 +4348,6 @@
"@types/long": "^4.0.1",
"@types/node": ">=13.7.0",
"long": "^4.0.0"
- },
- "dependencies": {
- "@types/node": {
- "version": "16.10.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz",
- "integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ==",
- "optional": true
- }
}
},
"proxy-addr": {
@@ -7297,6 +4359,17 @@
"ipaddr.js": "1.9.1"
}
},
+ "proxyquire": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz",
+ "integrity": "sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==",
+ "dev": true,
+ "requires": {
+ "fill-keys": "^1.0.2",
+ "module-not-found-error": "^1.0.1",
+ "resolve": "^1.11.1"
+ }
+ },
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
@@ -7346,15 +4419,21 @@
"inherits": "~2.0.3"
}
},
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
"r2-lcp-js": {
- "version": "1.0.32",
- "resolved": "https://registry.npmjs.org/r2-lcp-js/-/r2-lcp-js-1.0.32.tgz",
- "integrity": "sha512-cNpOc9ZWatCe7WPMQxVfA7p1xtynrU7eWZ/Cw41+zkKRUsOU4b+CTtwq1APMut+dMhnEHNIjDVUqxGBnFUa7dw==",
+ "version": "1.0.35",
+ "resolved": "https://registry.npmjs.org/r2-lcp-js/-/r2-lcp-js-1.0.35.tgz",
+ "integrity": "sha512-e/mrvjhA4W3eRbZsVP3eUn66wncIlK9tTROQARwmtasd2B7Q1csmfpypdWkMTMlJR1u68dduYVNMU4BUkCcKsg==",
"requires": {
"bindings": "^1.5.0",
- "debug": "^4.3.2",
+ "debug": "^4.3.3",
"moment": "^2.29.1",
- "r2-utils-js": "^1.0.26",
+ "r2-utils-js": "^1.0.31",
"request": "^2.88.2",
"request-promise-native": "^1.0.9",
"ta-json-x": "^2.5.3",
@@ -7363,93 +4442,91 @@
},
"dependencies": {
"debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"r2-opds-js": {
- "version": "1.0.36",
- "resolved": "https://registry.npmjs.org/r2-opds-js/-/r2-opds-js-1.0.36.tgz",
- "integrity": "sha512-JQB92qGzJWTO1l8NkZ3AhsQXm197Ny2pnU2NtakjWPnASnw60DJxs14yxXHKjTDZZzLI+XzsWYJJ6BKitIN55w==",
- "requires": {
- "debug": "^4.3.2",
- "r2-lcp-js": "^1.0.31",
- "r2-shared-js": "^1.0.52",
- "r2-utils-js": "^1.0.26",
+ "version": "1.0.39",
+ "resolved": "https://registry.npmjs.org/r2-opds-js/-/r2-opds-js-1.0.39.tgz",
+ "integrity": "sha512-x7Ds5sY0w/N65DQ/OQAUy8wpBXTODklVEurHlt7peO0MeGki4PMYsnM9FUitrWxqJj0NQtNDOkS24GF8GbFPdA==",
+ "requires": {
+ "@xmldom/xmldom": "^0.8.0",
+ "debug": "^4.3.3",
+ "r2-lcp-js": "^1.0.34",
+ "r2-shared-js": "^1.0.55",
+ "r2-utils-js": "^1.0.30",
"ta-json-x": "^2.5.3",
- "tslib": "^2.3.1",
- "xmldom": "^0.6.0"
+ "tslib": "^2.3.1"
},
"dependencies": {
"debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"r2-shared-js": {
- "version": "1.0.52",
- "resolved": "https://registry.npmjs.org/r2-shared-js/-/r2-shared-js-1.0.52.tgz",
- "integrity": "sha512-GYPdqK7FPUSczC68ZHqz3gFL98VZU/UCQtlgknxvJdDrM7+2Pz805X6iMUMzr1mkL203/Wl8mm+O5BsjQnc8tw==",
+ "version": "1.0.59",
+ "resolved": "https://registry.npmjs.org/r2-shared-js/-/r2-shared-js-1.0.59.tgz",
+ "integrity": "sha512-hcSc9a00zWaETKSRcDk8qhAT9zUXfVGgnD1g+BLS/bMvUnl7wkn3JdowXGwMyYS1bb985tCSIwzq215LRhYhzQ==",
"requires": {
- "debug": "^4.3.2",
+ "@xmldom/xmldom": "^0.8.1",
+ "debug": "^4.3.4",
"fast-deep-equal": "^3.1.3",
- "image-size": "^1.0.0",
- "mime-types": "^2.1.32",
+ "he": "^1.2.0",
+ "image-size": "^1.0.1",
+ "mime-types": "^2.1.35",
"moment": "^2.29.1",
- "r2-lcp-js": "^1.0.31",
- "r2-utils-js": "^1.0.26",
- "slugify": "^1.6.0",
+ "r2-lcp-js": "^1.0.35",
+ "r2-utils-js": "^1.0.31",
+ "slugify": "^1.6.5",
"ta-json-x": "^2.5.3",
"tslib": "^2.3.1",
- "xmldom": "^0.6.0",
"xpath": "^0.0.32",
"yazl": "^2.5.1"
},
"dependencies": {
"debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
}
}
},
"r2-utils-js": {
- "version": "1.0.26",
- "resolved": "https://registry.npmjs.org/r2-utils-js/-/r2-utils-js-1.0.26.tgz",
- "integrity": "sha512-8t9JIafLP1IXtpCcEqRxSlLtHrGPai3qidAq3Xe3sQTCNv29WZtHPglGSZX95BPPFDhIQfM9CiVvkbgReFFZ4Q==",
+ "version": "1.0.31",
+ "resolved": "https://registry.npmjs.org/r2-utils-js/-/r2-utils-js-1.0.31.tgz",
+ "integrity": "sha512-MUtInLoqkwxNFJa9s7vjY2uDpxz1+ei3/x6KVefbuOEDE7KYKtuSUIwPhXgn6uSizZeN/A+2hZK/zi7s5q9fpA==",
"requires": {
- "@types/xmldom": "^0.1.31",
- "debug": "^4.3.2",
- "filehound": "^1.17.4",
- "node-stream-zip": "^1.14.0",
+ "debug": "^4.3.3",
+ "filehound": "^1.17.5",
+ "node-stream-zip": "^1.15.0",
"reflect-metadata": "^0.1.13",
"request": "^2.88.2",
"request-promise-native": "^1.0.9",
@@ -7462,20 +4539,24 @@
},
"dependencies": {
"debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -7503,17 +4584,40 @@
"util-deprecate": "^1.0.1"
}
},
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
"reflect-metadata": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
"integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
},
+ "regenerator-runtime": {
+ "version": "0.13.9",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
+ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
+ },
"regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
"dev": true
},
+ "release-zalgo": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
+ "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=",
+ "dev": true,
+ "requires": {
+ "es6-error": "^4.0.1"
+ }
+ },
"request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@@ -7542,9 +4646,14 @@
},
"dependencies": {
"qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
}
}
},
@@ -7569,15 +4678,25 @@
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "optional": true
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
},
- "require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true
},
+ "resolve": {
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
"resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -7598,25 +4717,14 @@
"requires": {
"debug": "^4.1.1",
"extend": "^3.0.2"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "optional": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- }
}
},
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -7626,10 +4734,19 @@
"glob": "^7.1.3"
}
},
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
"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=="
+ "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",
@@ -7637,13 +4754,9 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
},
"send": {
"version": "0.17.1",
@@ -7692,6 +4805,15 @@
}
}
},
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
"serve-static": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
@@ -7703,6 +4825,12 @@
"send": "0.17.1"
}
},
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
@@ -7731,24 +4859,43 @@
"signal-exit": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz",
- "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==",
- "optional": true
+ "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ=="
},
- "slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "sinon": {
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.1.tgz",
+ "integrity": "sha512-8yx2wIvkBjIq/MGY1D9h1LMraYW+z1X0mb648KZnKSdvLasvDu7maa0dFaNYdTDczFgbjNw2tOmWdTk9saVfwQ==",
"dev": true,
"requires": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
+ "@sinonjs/commons": "^1.8.3",
+ "@sinonjs/fake-timers": "^9.0.0",
+ "@sinonjs/samsam": "^6.1.1",
+ "diff": "^5.0.0",
+ "nise": "^5.1.1",
+ "supports-color": "^7.2.0"
+ },
+ "dependencies": {
+ "@sinonjs/fake-timers": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.0.0.tgz",
+ "integrity": "sha512-+shXA2X7KNP7H7qNbQTJ3SA+NQc0pZDSBrdvFSRwF8sAo/ohw+ZQFD8Moc+gnz51+1eRXtEQBpKWPiQ4jsRC/w==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ }
}
},
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
"slugify": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz",
- "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang=="
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz",
+ "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ=="
},
"snakeize": {
"version": "0.1.0",
@@ -7756,6 +4903,26 @@
"integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=",
"optional": true
},
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "spawn-wrap": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
+ "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
+ "dev": true,
+ "requires": {
+ "foreground-child": "^2.0.0",
+ "is-windows": "^1.0.2",
+ "make-dir": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "signal-exit": "^3.0.2",
+ "which": "^2.0.1"
+ }
+ },
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -7763,9 +4930,9 @@
"dev": true
},
"sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
@@ -7808,43 +4975,39 @@
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
"integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
},
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "optional": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- },
- "dependencies": {
- "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==",
- "optional": true
- }
- }
- },
"string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "devOptional": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
}
},
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
"strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "devOptional": true,
"requires": {
"ansi-regex": "^5.0.1"
}
},
+ "strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true
+ },
"strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -7866,6 +5029,12 @@
"has-flag": "^4.0.0"
}
},
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true
+ },
"ta-json-x": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/ta-json-x/-/ta-json-x-2.5.3.tgz",
@@ -7874,40 +5043,6 @@
"reflect-metadata": "^0.1.13"
}
},
- "table": {
- "version": "6.7.1",
- "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
- "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==",
- "dev": true,
- "requires": {
- "ajv": "^8.0.1",
- "lodash.clonedeep": "^4.5.0",
- "lodash.truncate": "^4.4.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ajv": {
- "version": "8.6.3",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz",
- "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- }
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- }
- }
- },
"teeny-request": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.3.tgz",
@@ -7919,14 +5054,17 @@
"node-fetch": "^2.6.1",
"stream-events": "^1.0.5",
"uuid": "^8.0.0"
- },
- "dependencies": {
- "uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "optional": true
- }
+ }
+ },
+ "test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "requires": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
}
},
"text-table": {
@@ -7935,6 +5073,21 @@
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
@@ -7960,12 +5113,11 @@
"integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk="
},
"ts-fetch": {
- "version": "git+ssh://git@github.com/panaC/ts_fetch.git#7f585951111aa0e9cb7fe7f99bdd927a9261cd7b",
- "integrity": "sha512-2/l4Nka27XgPGCK7PZL8DNFW1BYcf28uPaoYAmF05L94bmvgYx0vkqTAXVRWz2hle7AE5xdBRfk7/06w0nWikg==",
- "from": "ts-fetch@github:panaC/ts_fetch#7f585951111aa0e9cb7fe7f99bdd927a9261cd7b",
+ "version": "github:edrlab/ts_fetch#bdb3444e608e6ae894a01cd703805e06ec991d66",
+ "from": "github:edrlab/ts_fetch#bdb3444e608e6ae894a01cd703805e06ec991d66",
"requires": {
"fetch-cookie": "^1.0.0",
- "node-fetch": "^2.6.1",
+ "node-fetch": "^2.6.7",
"tough-cookie": "^4.0.0"
},
"dependencies": {
@@ -7981,11 +5133,153 @@
}
}
},
+ "ts-morph": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-4.3.3.tgz",
+ "integrity": "sha512-yauxRJM4Vo+KvpJFgL4Mp9PtFjwZVrt54eP3RkLIXnaaAY5TGVHTLqN2OnLGwf6YjyqkDLAKprZVOUTvVEz6ZQ==",
+ "dev": true,
+ "requires": {
+ "@dsherret/to-absolute-glob": "^2.0.2",
+ "chalk": "^2.4.2",
+ "code-block-writer": "^10.0.0",
+ "fs-extra": "^8.1.0",
+ "glob-parent": "^5.1.0",
+ "globby": "^10.0.1",
+ "is-negated-glob": "^1.0.0",
+ "multimatch": "^4.0.0",
+ "typescript": "3.0.1 - 3.6.4"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "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=",
+ "dev": true
+ },
+ "globby": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz",
+ "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.0.3",
+ "glob": "^7.1.3",
+ "ignore": "^5.1.1",
+ "merge2": "^1.2.3",
+ "slash": "^3.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "typescript": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz",
+ "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==",
+ "dev": true
+ }
+ }
+ },
+ "ts-node": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz",
+ "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==",
+ "dev": true,
+ "requires": {
+ "@cspotcode/source-map-support": "0.7.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "yn": "3.1.1"
+ },
+ "dependencies": {
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true
+ }
+ }
+ },
"tslib": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
},
+ "tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.8.1"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ }
+ }
+ },
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@@ -8008,6 +5302,12 @@
"prelude-ls": "^1.2.1"
}
},
+ "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==",
+ "dev": true
+ },
"type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
@@ -8023,15 +5323,106 @@
"mime-types": "~2.1.24"
}
},
+ "typed-i18next": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/typed-i18next/-/typed-i18next-0.1.2.tgz",
+ "integrity": "sha512-3Zn04Enaz55WSLKKxj31+pYSvWicYpFAMdIClcErtxLdwU6p1aZ9QU9vhMwYE0qrXSxBTIvViZSy5J54arhJqQ==",
+ "dev": true,
+ "requires": {
+ "@types/fs-extra": "^8.0.0",
+ "chalk": "^2.4.2",
+ "commander": "^3.0.2",
+ "fs-extra": "^8.1.0",
+ "loglevel": "^1.6.4",
+ "loglevel-plugin-prefix": "^0.8.4",
+ "ts-morph": "^4.2.0",
+ "upath": "^1.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "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=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
"typedarray-to-buffer": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "optional": true,
"requires": {
"is-typedarray": "^1.0.0"
}
},
+ "typescript": {
+ "version": "4.4.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
+ "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
+ "dev": true
+ },
+ "typescript-eslint": {
+ "version": "0.0.1-alpha.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-0.0.1-alpha.0.tgz",
+ "integrity": "sha512-1hNKM37dAWML/2ltRXupOq2uqcdRQyDFphl+341NTPXFLLLiDhErXx8VtaSLh3xP7SyHZdcCgpt9boYYVb3fQg==",
+ "dev": true
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true
+ },
"unique-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
@@ -8095,6 +5486,11 @@
"util-deprecate": "~1.0.1"
}
},
+ "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=="
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -8105,6 +5501,12 @@
}
}
},
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+ "dev": true
+ },
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -8114,9 +5516,9 @@
}
},
"urijs": {
- "version": "1.19.7",
- "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.7.tgz",
- "integrity": "sha512-Id+IKjdU0Hx+7Zx717jwLPsPeUqz7rAtuVBRLLs+qn+J2nf9NGITWVCxcijgYxBqe83C7sqsQPs6H1pyz3x9gA=="
+ "version": "1.19.10",
+ "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.10.tgz",
+ "integrity": "sha512-EzauQlgKuJgsXOqoMrCiePBf4At5jVqRhXykF3Wfb8ZsOBMxPcfiVBcsHXug4Aepb/ICm2PIgqAUGMelgdrWEg=="
},
"util-deprecate": {
"version": "1.0.2",
@@ -8129,9 +5531,10 @@
"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=="
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "optional": true
},
"v8-compile-cache": {
"version": "2.3.0",
@@ -8139,6 +5542,11 @@
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
"dev": true
},
+ "validator": {
+ "version": "13.7.0",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz",
+ "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw=="
+ },
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -8192,17 +5600,28 @@
"isexe": "^2.0.0"
}
},
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
"word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true
},
+ "workerpool": {
+ "version": "6.1.5",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
+ "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
+ "dev": true
+ },
"wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "optional": true,
"requires": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -8218,7 +5637,6 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
"integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "optional": true,
"requires": {
"imurmurhash": "^0.1.4",
"is-typedarray": "^1.0.0",
@@ -8232,11 +5650,6 @@
"integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
"optional": true
},
- "xmldom": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz",
- "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg=="
- },
"xpath": {
"version": "0.0.32",
"resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz",
@@ -8245,8 +5658,7 @@
"y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "optional": true
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
},
"yallist": {
"version": "4.0.0",
@@ -8257,7 +5669,6 @@
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "optional": true,
"requires": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
@@ -8271,8 +5682,19 @@
"yargs-parser": {
"version": "20.2.9",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "optional": true
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
+ },
+ "yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ }
},
"yauzl": {
"version": "2.10.0",
@@ -8291,11 +5713,16 @@
"buffer-crc32": "~0.2.3"
}
},
+ "yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true
+ },
"yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "optional": true
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
}
}
}
diff --git a/webhooks/functions/package.json b/webhooks/functions/package.json
index 358c68f6..1ac1996a 100644
--- a/webhooks/functions/package.json
+++ b/webhooks/functions/package.json
@@ -1,29 +1,60 @@
{
"name": "functions",
- "version": "0.1.0",
"description": "Cloud Functions for Firebase",
"scripts": {
- "lint": "eslint .",
"serve": "firebase emulators:start --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
- "logs": "firebase functions:log"
+ "logs": "firebase functions:log",
+ "build": "tsc",
+ "test:run": "mocha --recursive --require ts-node/register",
+ "test": "nyc npm run test:run -- src/**/*.test.ts",
+ "lint": "eslint src/**/*.ts",
+ "lint:fix": "eslint src/**/*.ts --fix",
+ "scene-typed": "echo \"// npm run scene-typed \n\n\nexport type TSdkScene = \"$(for I in `ls ../../sdk/custom/scenes | cut -d \".\" -f1`; do echo \"'$I' |\"; done) | sed 's/..$/;/' > src/typings/sdkScene.d.ts",
+ "handler-typed": "echo \"// npm run handler-typed \n\n\nexport type TSdkHandler = \"$(for I in `cat ../../sdk/webhooks/ActionsOnGoogleFulfillment.yaml | grep \"name:\" | cut -d' ' -s -f3`; do echo \"'$I' |\"; done) | sed 's/..$/;/' > src/typings/sdkHandler.d.ts",
+ "i18n-typed": "typed-i18next -i src/translation -o src/typings/i18n.d.ts",
+ "typed": "npm run i18n-typed && npm run handler-typed && npm run scene-typed"
},
"engines": {
- "node": "16"
+ "node": "14"
},
- "main": "index.js",
+ "main": "build/index.js",
"dependencies": {
"@assistant/conversation": "^3.0.0",
- "firebase-admin": "^9.11.1",
- "firebase-functions": "^3.14.1",
- "opds-fetcher-parser": "github:panaC/opds_fetcher_parser#efec695f50b386071ccf935396f0a8ea4750c9ae"
+ "class-transformer": "^0.4.0",
+ "class-validator": "^0.13.1",
+ "firebase-admin": "^9.8.0",
+ "firebase-functions": "^3.16.0",
+ "i18next": "^21.5.3",
+ "opds-fetcher-parser": "git+https://github.com/edrlab/opds_fetcher_parser.git#be1b96f67499102675676b03a5aee4d267924972",
+ "reflect-metadata": "^0.1.13",
+ "validator": "^13.7.0"
},
"devDependencies": {
- "eslint": "^7.6.0",
+ "@types/chai": "^4.3.0",
+ "@types/mocha": "^9.0.0",
+ "@types/proxyquire": "^1.3.28",
+ "@types/sinon": "^10.0.9",
+ "@types/validator": "^13.7.1",
+ "@typescript-eslint/eslint-plugin": "^5.3.1",
+ "@typescript-eslint/parser": "^5.3.1",
+ "chai": "^4.3.6",
+ "eslint": "^8.2.0",
"eslint-config-google": "^0.14.0",
- "firebase-functions-test": "^0.2.0"
+ "express-request-mock": "^3.1.0",
+ "firebase-functions-test": "^0.2.0",
+ "mocha": "^9.1.3",
+ "node-mocks-http": "^1.11.0",
+ "nyc": "^15.1.0",
+ "proxyquire": "^2.1.3",
+ "rimraf": "^3.0.2",
+ "sinon": "^13.0.1",
+ "ts-node": "^10.4.0",
+ "typed-i18next": "^0.1.2",
+ "typescript": "^4.4.4",
+ "typescript-eslint": "0.0.1-alpha.0"
},
"private": true
}
diff --git a/webhooks/functions/src/constants.ts b/webhooks/functions/src/constants.ts
new file mode 100644
index 00000000..0baf83ea
--- /dev/null
+++ b/webhooks/functions/src/constants.ts
@@ -0,0 +1,31 @@
+
+export let NAME = "";
+export const NAME_EN = "EDRLAB";
+export const NAME_FR = "EDRLAB";
+export const setName = (lang: TLang) => NAME = lang === 'fr' ? NAME_FR : NAME_EN;
+
+export const API_BASE_URL = "https://storage.googleapis.com/audiobook_edrlab/feed.json";
+export const EDRLAB_FUNCTION_URL = "https://storage.googleapis.com/audiobook_edrlab/feed.json";
+// export const ALL_PUBLICATION_LIST_URL = "https://storage.googleapis.com/audiobook_edrlab/navigation/all.json";
+export const BOOKSHELF_URL = 'https://storage.googleapis.com/audiobook_edrlab/groups/popular.json';
+export const SEARCH_URL = 'https://europe-west1-audiobooks-a6348.cloudfunctions.net/indexer?url=https://storage.googleapis.com/audiobook_edrlab/navigation/all.json&query={query}';
+export const SEARCH_URL_FN = (value: string) => SEARCH_URL.replace("{query}", value);
+export const THEMATIC_LIST_URL = 'https://storage.googleapis.com/audiobook_edrlab/navigation/thematic_list.json';
+export const GENRE_LIST_URL = 'https://storage.googleapis.com/audiobook_edrlab/navigation/genre_list.json';
+export const DEFAULT_LANGUAGE: TDefaultLanguage = 'en';
+
+export type TDefaultLanguage = Extract;
+
+export const PADDING_GROUP = 5;
+export const PADDING_PUB = 3;
+export const LAST_SEEN_THRESHOLD = 72;
+
+export const PROJECT_ID = 'edrlab-1';
+
+export const TIMER = 8000;
+
+export type TLang = 'fr' | 'en';
+
+
+// init
+setName(DEFAULT_LANGUAGE);
diff --git a/webhooks/functions/src/controller/Assistant.ts b/webhooks/functions/src/controller/Assistant.ts
new file mode 100644
index 00000000..b32684f3
--- /dev/null
+++ b/webhooks/functions/src/controller/Assistant.ts
@@ -0,0 +1,126 @@
+import {BaseApp, conversation, ConversationV3, ConversationV3App, OmniHandler} from '@assistant/conversation';
+import {OpdsFetcher} from 'opds-fetcher-parser';
+import {DEFAULT_LANGUAGE, PROJECT_ID, setName, TIMER, TLang} from '../constants';
+import {StorageModel} from '../model/storage.model';
+import {THandlerFn} from '../type';
+import {TSdkHandler} from '../typings/sdkHandler';
+import {TSdkScene} from '../typings/sdkScene';
+import {enter as selectionEnter} from './handler/selection';
+import {Machine} from './Machine';
+import {ok} from 'assert';
+import {WebpubError} from '../error';
+import {AccountLinkingStatus} from '@assistant/conversation/dist/api/schema';
+
+export class Assistant {
+ private _app: OmniHandler & BaseApp & ConversationV3App;
+ private _storageModel: StorageModel | undefined;
+ private _fetcher: OpdsFetcher | undefined;
+ private _locale: TLang;
+
+ constructor({
+ storageModel,
+ fetcher,
+ }: {
+ storageModel?: StorageModel,
+ fetcher?: OpdsFetcher,
+ }) {
+ this._app = conversation({
+ verification: process.env['NODE_ENV'] === 'PRODUCTION' ? PROJECT_ID : undefined,
+ debug: process.env['NODE_ENV'] === 'development' ? true : false,
+ });
+
+ this._locale = DEFAULT_LANGUAGE;
+
+ this._app.catch((conv, error) => {
+ console.error('APP CATCH ERROR', error);
+
+ if (conv.scene.next) {
+ conv.scene.next.name = 'actions.scene.END_CONVERSATION';
+ }
+
+ // error instanceOf WebpubError !== True ?! why?
+ if ((error as WebpubError).code === 401) {
+ console.log('WEBPUB ERROR code 401');
+
+ if (this._locale === 'en') {
+ conv.add('Sorry, it is not possible to go further. Please unlink your EDRLAB account from your assistant, then link them again.');
+ } else if (this._locale === 'fr') {
+ conv.add('Désolé, impossible d\'aller plus loin : dissociez votre compte CAÉB de votre assistant puis ré-associez les.');
+ }
+ } else {
+ if (this._locale === 'en') {
+ conv.add('Oops, something went wrong. I will exit the app. Feel free to reopen it as soon as possible.');
+ } else if (this._locale === 'fr') {
+ conv.add('Oups, quelque chose s\'est mal passé.');
+ }
+ }
+ });
+
+ if (storageModel) {
+ this._storageModel = storageModel;
+ }
+
+ if (fetcher) {
+ this._fetcher = fetcher;
+ }
+
+ // app.middleware((_conv, _framework) => {});
+ }
+
+ public handle = (path: TSdkHandler, fn: THandlerFn) => {
+ this._app.handle(path, async (conv) => {
+ const timerP = new Promise((_, rej) => setTimeout(() => rej(new Error('TIMEOUT')), TIMER));
+ const machine = new Machine(conv);
+
+ const locale = (conv.user.locale || '').split('-')[0];
+ console.log('LOCALE=', locale);
+ ok(locale === 'fr' || locale === 'en', 'locale not known ' + locale);
+ setName(locale);
+ this._locale = locale;
+
+ await machine.setLanguage(locale);
+
+ const sceneName = conv.scene.name;
+ const linkingStatus = conv.user.accountLinkingStatus;
+ const linked = linkingStatus === AccountLinkingStatus.Linked;
+ const notLinked = !linked;
+ const bearerToken = linked ? conv.user.params.bearerToken : undefined;
+
+ console.info('ASSISTANT:', path);
+ console.info('scene.name=', sceneName);
+ console.info('linkingStatus', linkingStatus);
+ ok(sceneName, 'scene name not found');
+ ok(linkingStatus, 'linking status not found');
+
+ const sceneWhereYouHaveToBeAuthenticated: TSdkScene[] = [
+ 'collections', 'home_user', 'player', 'player_prequel', 'search', 'selection',
+ ];
+ const linkedScene = sceneWhereYouHaveToBeAuthenticated.findIndex((v) => v === sceneName) > -1;
+ if (notLinked && linkedScene) {
+ machine.say('error.noBearerTokenInLinkedScene');
+
+ console.error('NOT_LINKED IN LINKED_SCENE', linkingStatus, bearerToken, sceneName, path);
+ machine.nextScene = 'actions.scene.END_CONVERSATION';
+ return;
+ }
+
+ await machine.begin({bearerToken, storageModel: this._storageModel, fetcher: this._fetcher, path});
+
+ await Promise.race([timerP, Promise.resolve(fn(machine))]);
+
+ // HACK
+ // google actions platform doesn't allow to set the same next scene name than the actual in the 'on_enter' handler scene
+ // it's a platform limitation for a basic infinite loop I think
+ if (path === 'selection__intent__selects_book' && conv.scene.next?.name as TSdkScene === 'selection' && machine.getSessionState('selection') === 'FINISH') {
+ await Promise.race([timerP, Promise.resolve(selectionEnter(machine))]);
+ }
+
+ await machine.end();
+ });
+ };
+
+ public get app() {
+ return this._app;
+ }
+}
+
diff --git a/webhooks/functions/src/controller/Machine.ts b/webhooks/functions/src/controller/Machine.ts
new file mode 100644
index 00000000..2386688f
--- /dev/null
+++ b/webhooks/functions/src/controller/Machine.ts
@@ -0,0 +1,736 @@
+import {ok} from 'assert';
+import {AuthenticationStorage, http as httpOpdsFetcherParser, OpdsFetcher} from 'opds-fetcher-parser';
+import {API_BASE_URL, DEFAULT_LANGUAGE, EDRLAB_FUNCTION_URL, LAST_SEEN_THRESHOLD, PADDING_GROUP, PADDING_PUB, TLang} from '../constants';
+import {ISessionScene, TKeySessionScene, TKindSelection, TStateAuthentication} from '../model/storage.interface';
+import {StorageModel} from '../model/storage.model';
+import {i18n, TI18n, TI18nKey} from '../translation';
+import {IConversationV3, TSdkScene2} from '../type';
+import {resetSelection} from './handler/selection.helper';
+import validator from 'validator';
+import {Media} from '@assistant/conversation';
+import {MediaType, OptionalMediaControl} from '@assistant/conversation/dist/api/schema';
+import {IOpdsPublicationView, IOpdsResultView} from 'opds-fetcher-parser/build/src/interface/opds';
+import {TSdkHandler} from '../typings/sdkHandler';
+import {WebpubError} from '../error';
+import {stall} from '../tools';
+import {IWebPubView} from 'opds-fetcher-parser/build/src/interface/webpub';
+
+export class Machine {
+ private _conv: IConversationV3;
+ private _i18n: TI18n;
+ private _model: StorageModel | undefined;
+ private _fetcher: OpdsFetcher | undefined;
+ private _locale: TLang;
+
+ private _sayAcc: string;
+
+ constructor(conv: IConversationV3) {
+ ok(conv);
+
+ this._i18n = i18n;
+ this._model = undefined;
+ this._fetcher = undefined;
+ this._conv = conv;
+
+ this._sayAcc = '';
+ this._locale = DEFAULT_LANGUAGE;
+ }
+
+ public async begin({
+ storageModel,
+ bearerToken,
+ fetcher,
+ path,
+ }: {
+ storageModel?: StorageModel,
+ bearerToken?: string,
+ fetcher?: OpdsFetcher;
+ path: TSdkHandler;
+ }) {
+ console.info('Machine BEGIN');
+
+ if (storageModel) {
+ this._model = storageModel;
+ } else {
+ if (typeof bearerToken === 'string') {
+ const Reset = '\x1b[0m';
+ const FgRed = '\x1b[31m';
+
+ console.log(`${FgRed}BEARER=${bearerToken}${Reset}`);
+
+ this._model = await StorageModel.create(bearerToken);
+ } else {
+ console.info('No Bearer Token Available');
+ }
+ }
+
+ if (fetcher) {
+ this._fetcher = fetcher;
+ } else {
+ if (typeof bearerToken === 'string') {
+ const authenticationStorage = new AuthenticationStorage();
+ authenticationStorage.setAuthenticationToken({
+ accessToken: bearerToken,
+ authenticationUrl: API_BASE_URL,
+ });
+ authenticationStorage.setAuthenticationToken({
+ accessToken: bearerToken,
+ authenticationUrl: EDRLAB_FUNCTION_URL,
+ });
+ const http = new httpOpdsFetcherParser(undefined, authenticationStorage, this._locale);
+ this._fetcher = new OpdsFetcher(http);
+ }
+ }
+
+ // check new Session and keep or remove the data session
+ this.removeSessionDataWhenNewUserSession(path);
+ }
+
+ public async end() {
+ console.info('Machine END');
+
+ if (this._model) {
+ await this._model.save();
+ }
+
+ if (this._sayAcc) {
+ if (/.*<.*>.*<\/.*>.*/.test(this._sayAcc)) {
+ this._sayAcc = '' + this._sayAcc + '';
+ }
+ console.info('SAY: ', this._sayAcc);
+ this._conv.add(this._sayAcc);
+ }
+ }
+
+ public say(key: TI18nKey, options?: object) {
+ this._sayAcc += this._i18n.t(key, options) + '\n';
+ }
+
+ public t(key: TI18nKey, options?: object) {
+ ok(this._i18n);
+ return this._i18n.t(key, options);
+ }
+
+ public saidSomething(): boolean {
+ return !!this._sayAcc;
+ }
+
+ public get isLinked() {
+ return this._conv.user.accountLinkingStatus;
+ }
+
+ public setLanguage(locale: TLang) {
+ this._locale = locale;
+ return this._i18n.changeLanguage(locale);
+ }
+
+ public set nextScene(scene: TSdkScene2) {
+ const obj = this._conv.scene;
+
+ if (!obj.next) {
+ obj.next = {};
+ }
+ obj.next.name = scene;
+ }
+
+ public getSessionState(scene: TKeySessionScene) {
+ ok(this._model);
+ return this._model.store.session.scene[scene].state;
+ }
+
+ public set authenticationState(s: TStateAuthentication) {
+ ok(this._model);
+ this._model.store.user.authentication = s;
+ }
+
+ public get authenticationState() {
+ ok(this._model);
+ return this._model.store.user.authentication;
+ }
+
+ public get isARegularUser() {
+ const lastSeenTime = this._conv.user.lastSeenTime;
+ if (lastSeenTime) {
+ const currentDate = new Date().getTime() / 1000 / 60;
+ const lastSeenDate = Date.parse(lastSeenTime) / 1000 / 60;
+
+ const hours = currentDate - lastSeenDate;
+
+ if (hours <= LAST_SEEN_THRESHOLD) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public setSessionState(scene: T, state: ISessionScene[T]['state']) {
+ ok(this._model);
+ this._model.store.session.scene[scene].state = state;
+ }
+
+
+ public get playingNumber() {
+ ok(this._model);
+ return this._model.store.player.history.size;
+ }
+
+ public get playingHistorySortByDate() {
+ ok(this._model);
+ return new Map(
+ [...this._model.store.player.history]
+ .sort(([, {date: dateA}], [, {date: dateB}]) => dateB.getTime() - dateA.getTime()),
+ );
+ }
+
+ public async getCurrentPlayingInfo(cur = this._model?.store.player.current) {
+ ok(this._model);
+ ok(cur);
+ const url = cur.url || '';
+ const chapter = (cur.index || 0) + 1;
+ const {title, author, description} = await this.getInfoFromOpdsPub(url);
+
+ return {chapter, title, author, description};
+ }
+
+ public async getInfoFromOpdsPub(opdsPubUrl: string) {
+ if (!this.isValidHttpUrl(opdsPubUrl)) {
+ throw new Error('not a valid opdsPubUrl in getInfoFromOpdsPub');
+ }
+ const {publications} = await this.feedRequest(opdsPubUrl);
+
+ const pub = Array.isArray(publications) ? publications[0] : undefined;
+ const title: string = pub?.title || this.t('noTitle');
+ const author: string = ((pub && Array.isArray(pub?.authors)) ? pub?.authors : [])[0]?.name || '';
+ const description: string = (pub?.description) || '';
+ return {title, author, description};
+ }
+
+ public debugSelectionSession() {
+ ok(this._model);
+ console.info(this._model.store.session.scene.selection);
+ }
+
+ public get selectionSession() {
+ ok(this._model);
+ return this._model.store.session.scene.selection;
+ }
+
+ public set selectionSession(d: ISessionScene['selection']) {
+ ok(this._model);
+ this._model.store.session.scene.selection = d;
+ }
+
+ public get playerPrequelSession() {
+ ok(this._model);
+ return this._model.store.session.scene.player_prequel;
+ }
+
+ public set playerPrequelSession(d: ISessionScene['player_prequel']) {
+ ok(this._model);
+ this._model.store.session.scene.player_prequel = d;
+ }
+
+ public get searchSession() {
+ ok(this._model);
+ return this._model.store.session.scene.search;
+ }
+
+ public set searchSession(d: ISessionScene['search']) {
+ ok(this._model);
+ this._model.store.session.scene.search = d;
+ }
+
+ public isCurrentlyPlaying(c = this.playerCurrent) {
+ const {url, time, index} = c;
+ // if (!playing) {
+ // return false; // @TODO: need to define the use of this boolean
+ // }
+ if (url === undefined || time === undefined || index === undefined) {
+ return false;
+ }
+ if (!this.isValidHttpUrl(url)) {
+ throw new Error('not valid playing url');
+ }
+ if (time === 0 && index === 0) {
+ return false;
+ }
+ return true;
+ }
+
+ public isPlayingAvailableInPlayer() {
+ return !!this.playerCurrent.url;
+ }
+
+ public isPlayingAvailableInPlayerPrequelSession() {
+ return !!this.playerPrequelSession.player.url;
+ }
+
+ public isCurrentlyPlayingInPlayerPrequelSession() {
+ return this.isCurrentlyPlaying(this.playerPrequelSession.player);
+ }
+
+ public get playerCurrent() {
+ ok(this._model);
+ return this._model.store.player.current;
+ }
+
+ public initAndGoToSelectionSession({
+ kind, from, url,
+ }: {
+ kind: TKindSelection,
+ from: TSdkHandler,
+ url: string,
+ }) {
+ // @ts-ignore
+ if (!this.isValidHttpUrl(url) && !url.startsWith('data://')) { // data:// for recent books
+ throw new Error('not a valid url');
+ }
+ this.selectionSession = {
+ from, kind, url, nextUrlCounter: 0, state: 'RUNNING', nbChoice: 0,
+ };
+ this.nextScene = 'selection';
+ }
+
+ public async selectGroup(url: string, number: number) {
+ ok(this._model);
+ if (!this.isValidHttpUrl(url)) {
+ throw new Error('url not valid');
+ }
+
+ const group = await this.getGroupFromNumberInSelectionWithUrl(url, number);
+ if (group) {
+ const groupUrl = group.groupUrl;
+ if (!this.isValidHttpUrl(groupUrl)) {
+ throw new Error('group url not valid');
+ }
+ this.selectionSession.url = group.groupUrl;
+ this.selectionSession.kind = 'PUBLICATION'; // set to publication mode
+ this.selectionSession.nextUrlCounter = 0; // reset
+ this.selectionSession.state = 'RUNNING';
+ this.selectionSession.nbChoice = 0; // reset
+
+ this.debugSelectionSession();
+
+ return true;
+ }
+ return false;
+ }
+
+ public async selectPublication(url: string, number: number) {
+ ok(this._model);
+ // @ts-ignore
+ if (!this.isValidHttpUrl(url) && !url.startsWith('data://')) { // recent books
+ throw new Error('url not valid');
+ }
+
+ let pub: {
+ title: string;
+ author: string;
+ opdsPubUrl: string;
+ } | undefined;
+
+ if (url.startsWith('data://')) {
+ const dataStr = url.substring('data://'.length);
+ const data = JSON.parse(dataStr);
+ ok(Array.isArray(data));
+
+ const urlFromData = data[number - 1];
+ if (this.isValidHttpUrl(urlFromData)) {
+ const {publications} = await this.feedRequest(urlFromData);
+ const publication = Array.isArray(publications) ? publications[0] : undefined;
+ const author: string = ((publication && Array.isArray(publication?.authors)) ? publication?.authors : [])[0]?.name || '';
+ pub = {
+ title: publication?.title || this.t('noTitle'),
+ author,
+ opdsPubUrl: urlFromData,
+ };
+ }
+ } else {
+ pub = await this.getPublicationFromNumberInSelectionWithUrl(url, number);
+ }
+
+ if (pub) {
+ const {opdsPubUrl} = pub;
+ this.initPlayerInPlayerPrequelSession(opdsPubUrl);
+
+ return true;
+ }
+ return false;
+ }
+
+ public resetSelectionSession() {
+ this.selectionSession.state = 'DEFAULT';
+ this.selectionSession.from = 'main';
+ this.selectionSession.url = '';
+ this.selectionSession.nbChoice = 0; // reset
+ this.selectionSession.nextUrlCounter = 0; // reset
+ }
+
+ public initPlayerInPlayerPrequelSession(opdsPubUrl: string) {
+ ok(this._model);
+ const pubFromHistory = this._model.store.player.history.get(opdsPubUrl);
+ this.playerPrequelSession.player = {
+ url: opdsPubUrl,
+ index: pubFromHistory?.index ?? 0,
+ time: pubFromHistory?.time ?? 0,
+ };
+ }
+
+ public resetPlayerInPLayerPrequelSession() {
+ this.playerPrequelSession.player = {};
+ }
+
+ public initPlayerCurrentWithPlayerPrequelSession() {
+ const {index, time, url} = this.playerPrequelSession.player;
+ this.playerCurrent.index = index;
+ this.playerCurrent.time = time;
+ this.playerCurrent.url = url;
+ }
+
+ public async getPublicationFromNumberInSelectionWithUrl(url: string, number: number) {
+ const {publication} = await this.getPublicationFromFeed(url);
+
+ const pub = publication[number - 1];
+ if (pub) {
+ return pub;
+ }
+ return undefined;
+ }
+
+ public async getGroupFromNumberInSelectionWithUrl(url: string, number: number) {
+ const {groups} = await this.getGroupsFromFeed(url);
+
+ const group = groups[number - 1];
+ if (group) {
+ return group;
+ }
+ return undefined;
+ }
+
+ public get selectBookNumber() {
+ try {
+ const v = this._conv.intent.params?.number.resolved;
+ if (v && typeof v === 'number') {
+ return v;
+ }
+ } catch {}
+ return undefined;
+ }
+
+ public get querySearch() {
+ try {
+ const v = this._conv.intent.params?.query?.resolved;
+ if (v && typeof v === 'string') {
+ return v;
+ }
+ } catch {}
+ return undefined;
+ }
+
+ public setQuerySearch(scene: TSdkHandler = 'main') {
+ const query = this.querySearch;
+ if (!query) {
+ this.searchSession = {
+ query: '',
+ state: 'RUNNING',
+ from: scene,
+ };
+ } else {
+ this.searchSession = {
+ query,
+ state: 'FINISH',
+ from: scene,
+ };
+ }
+ }
+
+ public async getNexLinkPublicationWithUrl(url: string) {
+ const feed = await this.feedRequest(url);
+ const nextUrl = (feed.links?.next || [])[0]?.url;
+
+ if (this.isValidHttpUrl(nextUrl) && await this.isPublicationAvailable(nextUrl)) {
+ return nextUrl;
+ }
+ return undefined;
+ }
+
+ public async getNexLinkGroupWithUrl(url: string) {
+ const feed = await this.feedRequest(url);
+ const nextUrl = (feed.links?.next || [])[0]?.url;
+ if (this.isValidHttpUrl(nextUrl) && await this.isGroupAvailable(nextUrl)) {
+ return nextUrl;
+ }
+ return undefined;
+ }
+
+ public async isPublicationAvailable(url: string) {
+ const {publication} = await this.getPublicationFromFeed(url);
+ if (publication.length) {
+ return true;
+ }
+ return false;
+ }
+
+ public async getPublicationFromFeed(url: string) {
+ const feed = await this.feedRequest(url);
+
+ const list = (feed.publications || [])
+ .filter(({entryLinks: l}) => {
+ return Array.isArray(l) && l[0]?.url && this.isValidHttpUrl(l[0].url);
+ })
+ .filter(({openAccessLinks: l}) => {
+ return Array.isArray(l) && l[0]?.url && this.isValidHttpUrl(l[0].url);
+ })
+ .slice(0, PADDING_PUB)
+ .map(({title, authors, entryLinks}) => ({
+ title: title,
+ author: Array.isArray(authors) && authors.length ? authors[0].name : '',
+ opdsPubUrl: entryLinks ? entryLinks[0].url : '',
+ }));
+
+ return {publication: list, length: feed.metadata?.numberOfItems || list.length};
+ }
+
+ public async isGroupAvailable(url: string) {
+ const {groups} = await this.getGroupsFromFeed(url);
+ if (groups.length) {
+ return true;
+ }
+ return false;
+ }
+
+ public async getGroupsFromFeed(url: string) {
+ const feed = await this.feedRequest(url);
+
+ const list = (feed.groups || [])
+ .filter(({selfLink: l}) /* : l is IOpdsLinkView[]*/ => {
+ return l?.title && l?.url && this.isValidHttpUrl(l.url);
+ })
+ .slice(0, PADDING_GROUP)
+ .map(({selfLink: {title, url}}) => ({
+ title: title,
+ groupUrl: url,
+ }));
+ return {groups: list, length: feed.metadata?.numberOfItems || list.length};
+ }
+
+ public async getGroupSizeWithUrl(url: string) {
+ const feed = await this.feedRequest(url);
+ const size = feed.groups?.length;
+ return size;
+ }
+
+ public async getPublicationSizeWithUrl(url: string) {
+ const feed = await this.feedRequest(url);
+ const size = feed.publications?.length;
+ return size;
+ }
+
+ public persistMediaPlayer(finished: boolean = false) {
+ if (!this._conv.request.context?.media) {
+ return;
+ }
+
+ ok(this._model);
+ const _progress = this._conv.context.media?.progress || '0';
+ const progress = finished ? 0 : parseInt(_progress, 10);
+ const index = finished ? 0 : (this._conv.request.context?.media?.index || 0);
+ const url = this._model.store.player.current.url;
+ if (!this.isValidHttpUrl(url)) {
+ return;
+ }
+
+ this._model.store.player.current.index = index;
+ this._model.store.player.current.time = progress;
+
+ this._model.store.player.history.set(url, {
+ index,
+ time: progress,
+ date: new Date(),
+ });
+
+ console.info(`PERSIST MEDIA PLAYER - URL= ${url}, T=${progress}, I=${index}`);
+ }
+
+ public mediaPlayerAck() {
+ this._conv.add(new Media({
+ mediaType: MediaType.MediaStatusACK,
+ }));
+ }
+
+ public get currentPlayingUrl() {
+ ok(this._model);
+ const url = this._model.store.player.current.url;
+ if (url && validator.isURL(url)) {
+ return url;
+ }
+ return undefined;
+ }
+
+ public async player() {
+ ok(this._model);
+ const url = this.currentPlayingUrl;
+ if (!this.isValidHttpUrl(url)) {
+ throw new Error('no opdsPublication url');
+ }
+
+ const {publications} = await this.feedRequest(url);
+ const webpubUrl: string = (Array.isArray(publications) && Array.isArray(publications[0]?.openAccessLinks)) ? publications[0].openAccessLinks[0]?.url : '';
+
+ if (!this.isValidHttpUrl(webpubUrl)) {
+ throw new Error('no webpub url');
+ }
+
+ const startIndexRaw = this._model.store.player.current.index;
+ const startTimeRaw = this._model.store.player.current.time;
+
+ const webpub = await this.webpubRequest(webpubUrl);
+
+ let startIndex = (startIndexRaw && startIndexRaw > -1 && startIndexRaw <= webpub.readingOrders.length) ?
+ startIndexRaw :
+ 0;
+
+ const startTime = (startTimeRaw && startTimeRaw > -1) ?
+ startTimeRaw <= (webpub.readingOrders[startIndex].duration || Infinity) ?
+ startTimeRaw :
+ (startIndex += 1, startTimeRaw) :
+ 0;
+
+ startIndex = startIndex <= webpub.readingOrders.length ?
+ startIndex :
+ 0;
+
+ const mediaObjects = webpub.readingOrders
+ .map((v, i) => ({
+ name: `${webpub.title || ''} - ${i + 1}`,
+ url: v.url,
+ image: {
+ large: {
+ alt: webpub.title,
+ url: webpub.cover || '',
+ },
+ },
+ }));
+
+ console.log('Media list');
+ console.log(mediaObjects);
+ console.log('Start Index = ', startIndex, ' Start Time = ', startTime, ' Start Time');
+
+ this._conv.add(
+ new Media({
+ mediaObjects: mediaObjects,
+ mediaType: MediaType.Audio,
+ optionalMediaControls: [OptionalMediaControl.Paused, OptionalMediaControl.Stopped],
+ startOffset: `${startTime}s`,
+ firstMediaObjectIndex: startIndex,
+ }),
+ );
+ }
+
+ private webpubRequest: (url: string) => Promise = stall(async (url: string) => {
+ if (!validator.isURL(url)) {
+ throw new Error('url not valid : ' + url);
+ }
+ if (!this._fetcher) {
+ throw new Error('no fetcher available !');
+ }
+ try {
+ const webpub = await this._fetcher.webpubRequest(url);
+ return webpub;
+ } catch (e) {
+ const error = new WebpubError(`${e?.toString ? e.toString() : e}`);
+ error.code = 401;
+ throw error;
+ }
+ });
+
+ private feedRequest: (url: string) => Promise = stall(async (url: string) => {
+ if (!this._fetcher) {
+ throw new Error('no fetcher available !');
+ }
+
+ // recent books hack
+ if (url.startsWith('data://')) {
+ const dataStr = url.substring('data://'.length);
+ const data: string[] = JSON.parse(dataStr);
+ ok(Array.isArray(data));
+
+ const dataFiltered = data
+ .filter((v) => typeof v === 'string' && this.isValidHttpUrl(v))
+ .slice(0, PADDING_PUB); // FIXME: Little Hacky : need to add pagination instead of slicing 3 items
+ const feedResultP = dataFiltered.map((url) => this._fetcher!.feedRequest(url));
+ const feedResult = await Promise.all(feedResultP);
+ const publications = feedResult
+ .map(({publications}) => Array.isArray(publications) ? publications[0] : undefined)
+ .filter((v) => !!v) as IOpdsPublicationView[];
+
+ const feed: IOpdsResultView = {
+ title: 'recent books',
+ publications,
+ };
+
+ return feed;
+ }
+
+ if (!validator.isURL(url)) {
+ throw new Error('url not valid : ' + url);
+ }
+ let feed: IOpdsResultView = {
+ title: '',
+ publications: [],
+ };
+ try {
+ feed = await this._fetcher.feedRequest(url);
+ } catch (e) {
+ console.error('FETCHER ERROR START');
+ console.error(e);
+ console.error('FETCHER ERROR END');
+ }
+ return feed;
+ });
+
+ private removeSessionDataWhenNewUserSession(p: TSdkHandler) {
+ if (!this._model) {
+ return;
+ }
+
+ // the sessionId from google is not regular when a user session is in progress
+ // if homeUserScene then reset the session
+
+ if (p === 'home_user__on_enter') {
+ const id = this._conv.session.id;
+
+ // reset session !
+ console.info('MIDDLEWARE :: new SESSION');
+ this._model.store.session = {
+ scene: {
+ 'home_user': {
+ state: 'DEFAULT',
+ },
+ 'selection': resetSelection(),
+ 'search': {
+ state: 'DEFAULT',
+ query: '',
+ from: 'main',
+ },
+ 'player_prequel': {
+ state: 'DEFAULT',
+ from: 'main',
+ player: {},
+ },
+ },
+ };
+ this._model.store.user.sessionId = id || 'no ID';
+ }
+ }
+
+ private isValidHttpUrl(url: string | undefined): url is string {
+ if (url && validator.isURL(url, {
+ protocols: ['https', 'http'],
+ })) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/webhooks/functions/src/controller/handler/collections.ts b/webhooks/functions/src/controller/handler/collections.ts
new file mode 100644
index 00000000..cd943459
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/collections.ts
@@ -0,0 +1,56 @@
+import { BOOKSHELF_URL, GENRE_LIST_URL, NAME, THEMATIC_LIST_URL } from "../../constants";
+import { THandlerFn } from "../../type";
+import { Assistant } from "../Assistant";
+import { missing } from "./void";
+
+export const collections = (app: Assistant) => {
+
+ app.handle("collections__on_enter", enter);
+ app.handle("collections__intent__bookshelf", bookshelf);
+ app.handle("collections__intent__by_genre", genre);
+ app.handle("collections__intent__by_theme", theme);
+ app.handle("collections__intent__fallback", help);
+ app.handle("collections__intent__fallback_end", missing);
+ app.handle("collections__intent__help", help);
+ app.handle("collections__intent__silence", help);
+ app.handle("collections__intent__silence_end", missing);
+
+}
+
+const enter: THandlerFn = (m) => {
+ m.say('collections.enter.1');
+}
+
+const bookshelf: THandlerFn = (m) => {
+
+ m.initAndGoToSelectionSession({
+ kind: 'PUBLICATION',
+ url: BOOKSHELF_URL,
+ from: 'collections__intent__bookshelf',
+ });
+}
+
+const genre: THandlerFn = (m) => {
+
+ m.initAndGoToSelectionSession({
+ kind: 'GROUP',
+ url: GENRE_LIST_URL,
+ from: 'collections__intent__by_genre',
+ });
+}
+
+const theme: THandlerFn = (m) => {
+
+ m.initAndGoToSelectionSession({
+ kind: 'GROUP',
+ url: THEMATIC_LIST_URL,
+ from: 'collections__intent__by_theme',
+ });
+}
+
+const help: THandlerFn = (m) => {
+
+ m.say('collections.help.1');
+
+ m.nextScene = "collections";
+}
diff --git a/webhooks/functions/src/controller/handler/home_new_user.ts b/webhooks/functions/src/controller/handler/home_new_user.ts
new file mode 100644
index 00000000..3a82e3ea
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/home_new_user.ts
@@ -0,0 +1,63 @@
+import { NAME } from "../../constants";
+import { THandlerFn } from "../../type";
+import { Assistant } from "../Assistant";
+import { missing } from "./void";
+
+export const home_new_user = (app: Assistant) => {
+
+ app.handle("home_new_user__on_enter", enter);
+ app.handle("home_new_user__intent__fallback", help);
+ app.handle("home_new_user__intent__fallback_end", missing);
+ app.handle("home_new_user__intent__help", help);
+ app.handle("home_new_user__intent__maybe_later", maybeLater);
+ app.handle("home_new_user__intent__no", no);
+ app.handle("home_new_user__intent__repeat", repeat);
+ app.handle("home_new_user__intent__silence", help);
+ app.handle("home_new_user__intent__silence_end", missing);
+ app.handle("home_new_user__intent__yes", yes);
+
+}
+
+const enter: THandlerFn = (m) => {
+
+ // m.say("home_new_user.enter.first.1", { name: NAME });
+ // m.say("home_new_user.enter.first.2", { name: NAME });
+
+ m.say("home_new_user.help.1", {name: NAME});
+ m.say("home_new_user.help.2", {name: NAME});
+}
+
+const help: THandlerFn = (m) => {
+
+ // m.say("home_new_user.help.1", {name: NAME});
+ // m.say("home_new_user.help.2", {name: NAME});
+
+ m.nextScene = "home_new_user";
+}
+
+const maybeLater: THandlerFn = (m) => {
+
+ // m.say("home_new_user.maybeLater.1", {name: NAME});
+ // m.say("home_new_user.maybeLater.2")
+
+ m.nextScene = "home_new_user_maybe_later";
+}
+
+const yes: THandlerFn = (m) => {
+
+ // do nothing
+
+}
+
+const no: THandlerFn = (m) => {
+
+ // m.say("home_new_user.no.1", {name: NAME});
+ // m.say("home_new_user.no.2", {name: NAME});
+
+ m.nextScene = "home_new_user_no";
+}
+
+const repeat: THandlerFn = (m) => {
+
+ m.nextScene = "home_new_user";
+}
\ No newline at end of file
diff --git a/webhooks/functions/src/controller/handler/home_new_user_maybe_later.ts b/webhooks/functions/src/controller/handler/home_new_user_maybe_later.ts
new file mode 100644
index 00000000..bbe07ff2
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/home_new_user_maybe_later.ts
@@ -0,0 +1,49 @@
+import { NAME } from "../../constants";
+import { THandlerFn } from "../../type";
+import { Assistant } from "../Assistant";
+import { missing } from "./void";
+
+export const home_new_user_maybe_later = (app: Assistant) => {
+
+ app.handle("home_new_user_maybe_later__on_enter", enter);
+ app.handle("home_new_user_maybe_later__intent__fallback", help);
+ app.handle("home_new_user_maybe_later__intent__fallback_end", missing);
+ app.handle("home_new_user_maybe_later__intent__help", help);
+ app.handle("home_new_user_maybe_later__intent__repeat", repeat);
+ app.handle("home_new_user_maybe_later__intent__silence", help);
+ app.handle("home_new_user_maybe_later__intent__silence_end", missing);
+ app.handle("home_new_user_maybe_later__intent__link_account", linkAccount);
+ app.handle("home_new_user_maybe_later__intent__learn_more", learnMore);
+
+}
+
+const enter: THandlerFn = (m) => {
+ // m.say("home_new_user.maybeLater.1", { name: NAME });
+ // m.say("home_new_user.maybeLater.2", { name: NAME });
+
+ m.say("home_new_user_maybe_later.help.1", {name: NAME});
+}
+
+const linkAccount: THandlerFn = (m) => {
+
+ m.nextScene = "home_new_user_AccountLinking";
+}
+
+const help: THandlerFn = (m) => {
+
+ // m.say("home_new_user_maybe_later.help.1", {name: NAME});
+
+ m.nextScene = "home_new_user_maybe_later";
+}
+
+const repeat: THandlerFn = (m) => {
+
+ m.nextScene = "home_new_user_maybe_later";
+}
+
+const learnMore: THandlerFn = (m) => {
+
+ // m.say("info.about.1", { name: NAME });
+
+ m.nextScene = "info";
+}
\ No newline at end of file
diff --git a/webhooks/functions/src/controller/handler/home_new_user_no.ts b/webhooks/functions/src/controller/handler/home_new_user_no.ts
new file mode 100644
index 00000000..c7809ee6
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/home_new_user_no.ts
@@ -0,0 +1,47 @@
+import { NAME } from "../../constants";
+import { THandlerFn } from "../../type";
+import { Assistant } from "../Assistant";
+import { missing } from "./void";
+
+export const home_new_user_no = (app: Assistant) => {
+
+ app.handle("home_new_user_no__on_enter", enter);
+ app.handle("home_new_user_no__intent__fallback", help);
+ app.handle("home_new_user_no__intent__fallback_end", missing);
+ app.handle("home_new_user_no__intent__help", help);
+ app.handle("home_new_user_no__intent__no", no);
+ app.handle("home_new_user_no__intent__repeat", repeat);
+ app.handle("home_new_user_no__intent__silence", help);
+ app.handle("home_new_user_no__intent__silence_end", missing);
+ app.handle("home_new_user_no__intent__yes", yes);
+
+}
+
+const enter: THandlerFn = (m) => {
+ m.say('home_new_user.no.1', {name: NAME});
+ m.say('home_new_user.no.2', {name: NAME});
+}
+
+const help: THandlerFn = (m) => {
+
+ m.say("home_new_user_no.help.1", {name: NAME});
+
+ m.nextScene = "home_new_user_no";
+}
+
+const yes: THandlerFn = (m) => {
+
+ // m.say("info.about.1", {name: NAME});
+
+ m.nextScene = "info";
+}
+
+const no: THandlerFn = (m) => {
+
+ m.nextScene = "actions.scene.END_CONVERSATION";
+}
+
+const repeat: THandlerFn = (m) => {
+
+ m.nextScene = "home_new_user_no";
+}
\ No newline at end of file
diff --git a/webhooks/functions/src/controller/handler/home_user.ts b/webhooks/functions/src/controller/handler/home_user.ts
new file mode 100644
index 00000000..4532a0a5
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/home_user.ts
@@ -0,0 +1,138 @@
+import { BOOKSHELF_URL, GENRE_LIST_URL, NAME, PADDING_PUB } from "../../constants";
+import { THandlerFn } from "../../type";
+import { Assistant } from "../Assistant";
+import { missing } from "./void";
+
+export const home_user = (app: Assistant) => {
+
+ app.handle("home_user__intent__search", search);
+ app.handle("home_user__intent__collections", collections);
+ app.handle("home_user__intent__bookshelf", bookshelf);
+ app.handle("home_user__on_enter", enter);
+ app.handle("home_user__intent__fallback", help);
+ app.handle("home_user__intent__fallback_end", missing);
+ app.handle("home_user__intent__help", help);
+ app.handle("home_user__intent__repeat", repeat);
+ app.handle("home_user__intent__silence", help);
+ app.handle("home_user__intent__silence_end", missing);
+ app.handle("home_user__intent__recent_books", recentBooks);
+ app.handle("home_user__intent__current_book", currentBook);
+
+}
+
+const enter: THandlerFn = async (m) => {
+
+ const state = m.getSessionState("home_user");
+ const newlyLinked = m.authenticationState === "NEWLY_LINKED";
+ const playing = m.isPlayingAvailableInPlayer();
+ const regularUser = m.isARegularUser;
+
+ if (state === "SESSION") {
+ // aka there is a session : the user discovered the app
+
+ // "What would you like to do?"
+ // m.say("home_user.enter.regular.1");
+
+ // "Would you like to search for a specific book or author, get a recommendation or would you prefer starting a book from your selection ?"
+ m.say("home_user.enter.newlyUser.2");
+
+ } else if (state === "REPEAT") {
+
+ m.say("home_user.help.1");
+ m.say("home_user.help.2");
+
+ m.setSessionState("home_user", "SESSION");
+
+ } else if (newlyLinked) {
+
+ m.say("home_user.enter.newlyUser.1", { name: NAME });
+ m.say("home_user.enter.newlyUser.2", { name: NAME });
+
+ } else if (playing) {
+
+ const {title, chapter, author} = await m.getCurrentPlayingInfo();
+ const readingNumber = m.playingNumber - 1;
+
+ m.say("home_user.enter.playing.1", {chapterNumber: chapter, titleAndAuthor: `${title}${author ? `, ${author}` : ''}`});
+ if (readingNumber > 0) {
+ m.say("home_user.enter.playing.2", {readingNumber: readingNumber});
+ }
+ m.say("home_user.enter.playing.3");
+ m.say("home_user.enter.regular.1");
+ m.say("home_user.enter.regular.2");
+
+ } else if (regularUser) {
+ // regularUser
+
+ m.say("home_user.enter.regular.1");
+ m.say("home_user.enter.regular.2");
+ } else {
+ // occasionalUser
+
+ // "Would you like to search for a specific book or author, get a recommendation or would you prefer starting a book from your selection ?"
+ m.say("home_user.enter.newlyUser.2");
+ }
+
+ m.setSessionState("home_user", "SESSION");
+
+ // "Would you like to search for a specific book or author, get a recommendation or would you prefer starting a book from your selection ?"
+ // m.say("home_user.enter.newlyUser.2");
+}
+
+const search: THandlerFn = (m) => {
+
+ // query from search intent
+ m.setQuerySearch();
+ m.nextScene = "search";
+}
+
+const collections: THandlerFn = (m) => {
+ m.nextScene = "collections";
+}
+
+const bookshelf: THandlerFn = (m) => {
+
+ m.initAndGoToSelectionSession({
+ kind: 'PUBLICATION',
+ from: "home_user__intent__bookshelf",
+ url: BOOKSHELF_URL,
+ });
+}
+
+const recentBooks: THandlerFn = (m) => {
+
+ const history = m.playingHistorySortByDate;
+ const urls = [...history.keys()];
+ m.initAndGoToSelectionSession({
+ kind: 'PUBLICATION',
+ from: "home_user__intent__recent_books",
+ url: 'data://' + JSON.stringify(urls.slice(0, PADDING_PUB)), // data url with an array of webpub links
+ })
+}
+
+const currentBook: THandlerFn = (m) => {
+
+ const isPlaying = !!m.currentPlayingUrl;
+ if (isPlaying) {
+
+ m.playerPrequelSession.from = "home_user__intent__current_book";
+ m.nextScene = 'player_prequel';
+ } else {
+
+ m.say('home_user.currentBook.1');
+ m.nextScene = 'home_user';
+ }
+}
+
+const help: THandlerFn = (m) => {
+
+ m.setSessionState("home_user", "REPEAT");
+
+ m.nextScene = "home_user";
+}
+
+const repeat: THandlerFn = (m) => {
+
+ m.setSessionState("home_user", "REPEAT");
+ m.nextScene = "home_user";
+}
diff --git a/webhooks/functions/src/controller/handler/index.ts b/webhooks/functions/src/controller/handler/index.ts
new file mode 100644
index 00000000..18547590
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/index.ts
@@ -0,0 +1,67 @@
+import { NAME } from "../../constants";
+import { Assistant } from "../Assistant";
+import { collections } from "./collections";
+import { home_new_user } from "./home_new_user";
+import { home_new_user_maybe_later } from "./home_new_user_maybe_later";
+import { home_new_user_no } from "./home_new_user_no";
+import { home_user } from "./home_user";
+import { info } from "./info";
+import { main } from "./main";
+import { player } from "./player";
+import { player_prequel } from "./player_prequel";
+import { search } from "./search";
+import { selection } from "./selection";
+
+export const handler = (app = new Assistant({})) => {
+
+ app.handle('main', main);
+
+ app.handle('cancel', (m) => {
+
+ m.persistMediaPlayer();
+ m.say('bye.1', {name: NAME});
+ });
+
+ app.handle('fallback_1', (m) => {
+
+ m.persistMediaPlayer();
+ m.say('fallback.1');
+ });
+
+ app.handle('fallback_2', (m) => {
+ m.say('fallback.2');
+ });
+
+ app.handle('fallback_end', (m) => {
+
+ m.persistMediaPlayer();
+ m.say('bye.1', {name: NAME});
+ });
+
+ app.handle('silence_1', (m) => {
+
+ m.persistMediaPlayer();
+ m.say('silence.1');
+ });
+
+ app.handle('silence_2', (m) => {
+ m.say('silence.2');
+ });
+
+ app.handle('silence_end', (m) => {
+
+ m.persistMediaPlayer();
+ m.say('bye.1', {name: NAME});
+ });
+
+ home_user(app);
+ home_new_user(app);
+ home_new_user_no(app);
+ home_new_user_maybe_later(app);
+ info(app);
+ selection(app);
+ player(app);
+ search(app);
+ collections(app);
+ player_prequel(app);
+}
diff --git a/webhooks/functions/src/controller/handler/info.ts b/webhooks/functions/src/controller/handler/info.ts
new file mode 100644
index 00000000..da547507
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/info.ts
@@ -0,0 +1,47 @@
+import { NAME } from "../../constants";
+import { THandlerFn } from "../../type";
+import { Assistant } from "../Assistant";
+import { missing } from "./void";
+
+export const info = (app: Assistant) => {
+
+ app.handle("info__on_enter", enter);
+ app.handle("info__intent__yes", membership);
+ app.handle("info__intent__no", no);
+ app.handle("info__intent__fallback", help);
+ app.handle("info__intent__fallback_end", missing);
+ app.handle("info__intent__help", help);
+ app.handle("info__intent__repeat", repeat);
+ app.handle("info__intent__silence", help);
+ app.handle("info__intent__silence_end", missing);
+
+}
+
+const enter: THandlerFn = (m) => {
+ m.say('info.about.1', {name: NAME});
+}
+
+const membership: THandlerFn = (m) => {
+
+ m.say('info.yesOrMembership.1', {name: NAME});
+
+ m.nextScene = "actions.scene.END_CONVERSATION";
+};
+
+const no: THandlerFn = (m) => {
+
+ m.say("bye.1");
+
+ m.nextScene = "actions.scene.END_CONVERSATION";
+};
+
+const help: THandlerFn = (m) => {
+
+ // m.say('info.help.1', {name: NAME});
+
+ m.nextScene = "info";
+}
+
+const repeat: THandlerFn = (m) => {
+ m.nextScene = 'info';
+};
diff --git a/webhooks/functions/src/controller/handler/main.ts b/webhooks/functions/src/controller/handler/main.ts
new file mode 100644
index 00000000..69ecce06
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/main.ts
@@ -0,0 +1,28 @@
+import { AccountLinkingStatus } from "@assistant/conversation/dist/api/schema";
+import { NAME } from "../../constants";
+import { TMachine } from "../../type";
+
+export const main = (machine: TMachine) => {
+
+ const isLinked = machine.isLinked;
+
+ if (isLinked === AccountLinkingStatus.Linked) {
+
+ machine.say("main.welcome.linked.1", { name: NAME});
+
+ if (machine.authenticationState === "NO_LINKED") {
+ machine.authenticationState = "NEWLY_LINKED";
+ } else if (machine.authenticationState === "NEWLY_LINKED") {
+ machine.authenticationState = "LINKED";
+ } // authenticationState === LINKED raise the end of the state machine
+
+ machine.nextScene = "home_user";
+ } else {
+
+ machine.say("main.welcome.noLinked.1", { name: NAME});
+
+ // machine.authenticationState = "NO_LINKED";
+
+ machine.nextScene = "home_new_user";
+ }
+}
\ No newline at end of file
diff --git a/webhooks/functions/src/controller/handler/player.ts b/webhooks/functions/src/controller/handler/player.ts
new file mode 100644
index 00000000..f51eb862
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/player.ts
@@ -0,0 +1,44 @@
+import { THandlerFn } from "../../type";
+import { Assistant } from "../Assistant";
+
+export const player = (app: Assistant) => {
+
+ app.handle("player__on_enter", enter);
+ app.handle("player__intent__media_status_stopped", stopped);
+ app.handle("player__intent__media_status_finished", finished);
+ app.handle("player__intent__media_status_paused", paused);
+ app.handle("player__intent__media_status_failed", failed);
+
+}
+
+const enter: THandlerFn = async (m) => {
+
+ await m.player();
+}
+
+const stopped: THandlerFn = async (m) => {
+
+ m.persistMediaPlayer();
+ m.mediaPlayerAck();
+
+ m.nextScene = "actions.scene.END_CONVERSATION";
+}
+
+const paused: THandlerFn = async (m) => {
+
+ m.persistMediaPlayer();
+ m.mediaPlayerAck();
+}
+
+const failed: THandlerFn = async (m) => {
+
+ m.say("error.1");
+ m.nextScene = "home_user";
+}
+
+const finished: THandlerFn = async (m) => {
+
+ m.persistMediaPlayer(true);
+
+ m.nextScene = "home_user";
+};
diff --git a/webhooks/functions/src/controller/handler/player_prequel.ts b/webhooks/functions/src/controller/handler/player_prequel.ts
new file mode 100644
index 00000000..c5212bda
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/player_prequel.ts
@@ -0,0 +1,139 @@
+import { t } from "i18next";
+import { THandlerFn, TMachine } from "../../type";
+import { TSdkScene } from "../../typings/sdkScene";
+import { Assistant } from "../Assistant";
+import { missing } from "./void";
+
+export const player_prequel = (app: Assistant) => {
+
+ app.handle("player_prequel__on_enter", enter);
+ app.handle("player_prequel__intent__player_prequel_summary", summary);
+ app.handle("player_prequel__intent__player_prequel_back", back);
+ app.handle("player_prequel__intent__player_prequel_resume", resume);
+ app.handle("player_prequel__intent__player_prequel_start", start);
+ app.handle("player_prequel__intent__help", help);
+ app.handle("player_prequel__intent__repeat", repeat);
+ app.handle("player_prequel__fallback", help);
+ app.handle("player_prequel__fallback_end", missing);
+ app.handle("player_prequel__silence", help);
+ app.handle("player_prequel__silence_end", help);
+
+}
+
+const enter: THandlerFn = async (m) => {
+
+ const from = m.playerPrequelSession.from;
+ // const fromScene = from.split("__")[0] as TSdkScene;
+ // const state = m.getSessionState('player_prequel');
+
+ if (from === "home_user__intent__current_book") {
+
+ // from home user last book
+
+ // go to player direct
+ // check if playing available
+
+ m.playerPrequelSession.player = m.playerCurrent;
+ const isPlayingAvailable = m.isPlayingAvailableInPlayerPrequelSession();
+
+ if (isPlayingAvailable) {
+ m.playerPrequelSession.from = "main";
+
+ await startPlaying(m);
+ return ;
+ }
+ }
+
+ // from selection
+
+ // > vous avez choisi
+ const { title } = await m.getCurrentPlayingInfo(m.playerPrequelSession.player);
+
+ const isPlaying = m.isCurrentlyPlayingInPlayerPrequelSession();
+ if (isPlaying) {
+ m.say("player_prequel.enter.1", { title, resume: m.t('player_prequel.enter.1-continue') });
+ m.say("player_prequel.enter.2", { resumeOrStart: m.t('player_prequel.enter.2-continue') });
+
+ } else {
+
+ m.say("player_prequel.enter.1", { title, resume: m.t('player_prequel.enter.1-begin') });
+ m.say("player_prequel.enter.2", { resumeOrStart: m.t('player_prequel.enter.2-begin') });
+ }
+
+}
+
+// help scene
+// player_prequel.help
+
+//
+// A tout moment vous pouvez demandé le lecture du résumé du livre,
+// demandé qui l'as écrit, obtenir le temps d'écoute du livre,
+// ou tout simplement naviguer dans la table des matiere.
+
+const startPlaying = async (m: TMachine) => {
+
+ const isRegular = m.isARegularUser;
+ if (!isRegular) {
+ m.say("player.explain");
+ }
+
+ m.initPlayerCurrentWithPlayerPrequelSession();
+ const { title } = await m.getCurrentPlayingInfo();
+ const resume = m.isCurrentlyPlaying();
+ if (resume) {
+ m.say("player.start2", { title });
+ } else {
+ m.say("player.start", { title });
+ }
+ m.nextScene = "player";
+
+ m.resetPlayerInPLayerPrequelSession();
+ m.resetSelectionSession();
+}
+
+const back: THandlerFn = async (m) => {
+
+ m.resetPlayerInPLayerPrequelSession();
+ m.selectionSession.state = "RUNNING";
+ m.selectionSession.nbChoice = 0;
+ m.nextScene = 'selection';
+};
+
+const resume: THandlerFn = async (m) => {
+
+ await startPlaying(m);
+};
+
+const start: THandlerFn = async (m) => {
+
+ await startPlaying(m);
+};
+
+const repeat: THandlerFn = async (m) => {
+
+ m.nextScene = "player_prequel";
+}
+
+const help: THandlerFn = async (m) => {
+
+ // help message
+ m.say("player_prequel.help.1");
+}
+
+const summary: THandlerFn = async (m) => {
+
+ const {description} = await m.getCurrentPlayingInfo(m.playerPrequelSession.player);
+
+ if (!description) {
+
+ // no description
+ m.say("player_prequel.noSummary");
+ } else {
+ m.say("player_prequel.summarize", {summary: description});
+ }
+
+ m.say("player_prequel.summary.1");
+
+ // loop
+ // m.nextScene = 'player_prequel';
+};
\ No newline at end of file
diff --git a/webhooks/functions/src/controller/handler/search.ts b/webhooks/functions/src/controller/handler/search.ts
new file mode 100644
index 00000000..47a4eba3
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/search.ts
@@ -0,0 +1,53 @@
+import { SEARCH_URL_FN } from "../../constants";
+import { THandlerFn } from "../../type";
+import { Assistant } from "../Assistant";
+
+export const search = (app: Assistant) => {
+
+ app.handle("search__on_enter", enter);
+ app.handle("search__intent__search", query);
+ app.handle("search__intent__search_query", query);
+}
+
+const enter: THandlerFn = (m) => {
+
+ const { state, query, from } = m.searchSession;
+
+ if (state === "RUNNING") {
+ if (from === "selection__on_enter") {
+ m.say("search.enter.2");
+ m.searchSession.from = 'main'; // reset
+ m.nextScene = "home_user"; // FIX: avoid infinite loop in gactions
+ } else {
+ m.say('search.enter.1');
+ }
+ // wait intent search query
+
+ } else if (state === "FINISH") {
+
+ if (!query) {
+ m.searchSession.state = "RUNNING";
+ // m.nextScene = "search";
+ m.say('search.enter.1');
+ return ;
+ }
+
+ m.initAndGoToSelectionSession({
+ kind: 'PUBLICATION',
+ url: SEARCH_URL_FN(encodeURIComponent(query)),
+ from: 'search__on_enter',
+ });
+
+ } else {
+ throw new Error("invalid search state");
+ }
+}
+
+const query: THandlerFn = (m) => {
+
+ // query from search intent
+ // query from search intent and search_query intent
+ // same intent but search_query as a free text parsing
+ m.setQuerySearch();
+ m.nextScene = "search";
+}
diff --git a/webhooks/functions/src/controller/handler/selection.helper.ts b/webhooks/functions/src/controller/handler/selection.helper.ts
new file mode 100644
index 00000000..8a280c8f
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/selection.helper.ts
@@ -0,0 +1,19 @@
+import { IStorageSession } from "../../model/storage.interface";
+
+export const resetSelection = (): IStorageSession["scene"]["selection"] => ({
+ from: 'main',
+ kind: 'GROUP',
+ nextUrlCounter: 0,
+ state: "DEFAULT",
+ url: "",
+ nbChoice: 0,
+});
+export const resetSessionsSelection = (session: IStorageSession) => {
+
+ session.scene.selection.from = 'main';
+ session.scene.selection.kind = 'GROUP';
+ session.scene.selection.nextUrlCounter = 0;
+ session.scene.selection.state = "DEFAULT";
+ session.scene.selection.url = "";
+ session.scene.selection.nbChoice = 0;
+}
\ No newline at end of file
diff --git a/webhooks/functions/src/controller/handler/selection.ts b/webhooks/functions/src/controller/handler/selection.ts
new file mode 100644
index 00000000..982099e3
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/selection.ts
@@ -0,0 +1,212 @@
+import { NAME, PADDING_GROUP, PADDING_PUB } from "../../constants";
+import { THandlerFn } from "../../type";
+import { Assistant } from "../Assistant";
+import { missing } from "./void";
+
+export const selection = (app: Assistant) => {
+
+ app.handle("selection__on_enter", enter);
+ app.handle("selection__intent__another_one", anotherOne);
+ app.handle("selection__intent__selects_book", selectBook);
+ app.handle("selection__intent__fallback", help);
+ app.handle("selection__intent__fallback_end", missing);
+ app.handle("selection__intent__help", help);
+ app.handle("selection__intent__repeat", repeat);
+ app.handle("selection__intent__silence", help);
+ app.handle("selection__intent__silence_end", missing);
+
+}
+
+export const enter: THandlerFn = async (m) => {
+
+ const { state, url, nbChoice } = m.selectionSession;
+ const kind = m.selectionSession.kind;
+ const handler = m.selectionSession.from;
+
+ m.debugSelectionSession();
+
+ if (state === "RUNNING") {
+
+ const isAvailable = kind === "GROUP" ? await m.isGroupAvailable(url) : await m.isPublicationAvailable(url);
+ const isEmpty = !isAvailable;
+ if (isEmpty) {
+ if (handler === "search__on_enter") {
+ m.say("search.empty.1", {name: NAME});
+ m.nextScene = "home_user"; // FIX GACTIONS ISSUE : INFINE LOOP CONTROL
+ m.searchSession.query = '';
+ m.searchSession.state = 'RUNNING';
+ m.searchSession.from = "selection__on_enter";
+ } else {
+ m.say('selection.enter.empty.1');
+ m.nextScene = "home_user";
+ }
+ return ;
+ }
+
+ // @TODO
+ // handle only one group or publication
+ // redirect to nextScene 'selection' for group
+ // or 'player-prequel' for a publication
+
+ const nextLink = kind === "GROUP" ? await m.getNexLinkGroupWithUrl(url) : await m.getNexLinkPublicationWithUrl(url);
+ const nextPageBool = !!nextLink;
+ if (m.selectionSession.nextUrlCounter) {
+ if (!nextLink) {
+ if (kind === "GROUP") {
+ m.say("selection.enter.lastPage.group");
+ } else {
+ m.say("selection.enter.lastPage.publication");
+ }
+ }
+ } else {
+
+ // intro
+ if (handler === "home_user__intent__bookshelf") {
+ const {publication} = await m.getPublicationFromFeed(url); // @TODO fix it .. twice call to api
+ m.say('selection.enter.bookshelf.first', {number: publication.length});
+ } else if (handler === "search__on_enter") {
+ const {length} = await m.getPublicationFromFeed(url); // @TODO fix it .. twice call to api
+ m.say('selection.enter.search', {number: length});
+ }
+ }
+
+ // @TODO handle collection group or publication
+
+ // list groups or publication
+ m.say('selection.enter.common.1');
+ if (nextPageBool) {
+ m.say('selection.enter.nextPage.1');
+ }
+ const list = kind === "GROUP"
+ ? (await m.getGroupsFromFeed(url)).groups.map(({title}) => title)
+ : (await m.getPublicationFromFeed(url)).publication.map(({title}) => title);
+ list.forEach((title, i) => m.say('selection.enter.common.2', {symbol: i + 1, title}));
+ m.say('selection.enter.common.3');
+
+
+ // outro
+ if (handler === "home_user__intent__bookshelf") {
+ m.say('selection.enter.bookshelf.second');
+ }
+
+ } else if (state === "FINISH") {
+
+ const valid = kind === "GROUP" ? await m.selectGroup(url, nbChoice) : await m.selectPublication(url, nbChoice);
+
+ if (valid) {
+ // select OK
+
+ const { state, kind } = m.selectionSession;
+ console.log("FINISH VALID STATE: ", state, kind);
+
+ if (kind === "GROUP" && state === "RUNNING") {
+ console.log("RUN GROUPS");
+ // group requested
+ m.nextScene = "selection";
+ } else if (kind === "PUBLICATION" && state === "RUNNING") {
+ console.log("RUN PUBLICATIONS");
+
+ m.nextScene = "selection";
+ } else if (state === "FINISH" && m.isPlayingAvailableInPlayerPrequelSession()) {
+ console.log("RUN PLAYER");
+
+ m.nextScene = "player_prequel";
+ } else {
+ throw new Error("indalid finish state " + state);
+ }
+
+ } else {
+
+ // KO
+ // help message
+ m.say("selection.help.1");
+ // m.nextScene = "selection";
+ }
+ } else {
+ throw new Error("undefined selection state");
+ // @TODO
+ // reset selection session
+ // move to home user
+ }
+ // m.nextScene = "selection";
+
+}
+
+const selectBook: THandlerFn = async (m) => {
+
+ const nb = m.selectBookNumber;
+ const kind = m.selectionSession.kind;
+ const padding = kind === "GROUP" ? PADDING_GROUP : PADDING_PUB;
+ const url = m.selectionSession.url;
+
+ const size = kind === "GROUP" ? await m.getGroupSizeWithUrl(url) : await m.getPublicationSizeWithUrl(url);
+
+ console.info("SELECT BOOK INTENT", nb, url, size);
+
+ if (m.selectionSession.state === "DEFAULT") {
+ console.info("DEFAULT -> returns");
+ m.selectionSession.nbChoice = 0;
+
+ } else if (!nb) {
+ m.selectionSession.nbChoice = 0;
+ console.info("number from intent not defined");
+
+ } else if (!size) {
+ m.selectionSession.nbChoice = 0;
+ console.info("size from feed request undefined .. the url has failed? " + url);
+
+ } else if (nb < 1) {
+ m.selectionSession.nbChoice = 0;
+ console.info("number from intent lower than 1");
+ // m.say('selection.help.1');
+
+ } else if (nb > padding || nb > size) {
+ m.selectionSession.nbChoice = 0;
+ console.info("number from intent upper than padding or size");
+ // m.say('selection.help.1');
+
+ } else {
+ // ok let's go
+ m.selectionSession.nbChoice = nb;
+ m.selectionSession.state = "FINISH";
+ }
+
+ m.nextScene = 'selection';
+}
+
+const anotherOne: THandlerFn = async (m) => {
+
+ const { state, url } = m.selectionSession;
+
+ if (state === "DEFAULT") {
+ throw new Error("DEFAULT mode not allowed with another one intent");
+ }
+
+ if (state === "RUNNING") {
+
+ const kind = m.selectionSession.kind;
+ const nextUrl = kind === "GROUP" ? await m.getNexLinkGroupWithUrl(url) : await m.getNexLinkPublicationWithUrl(url);
+
+ if (nextUrl) {
+ m.selectionSession.url = nextUrl;
+ m.selectionSession.nextUrlCounter++;
+ } else {
+ m.say("selection.enter.lastPage.notAvailable");
+ }
+ }
+
+ m.nextScene = 'selection';
+}
+
+const help: THandlerFn = (m) => {
+
+ m.say("selection.help.1");
+ // m.say("selection.help.2");
+
+ // m.nextScene = "selection";
+}
+
+const repeat: THandlerFn = (m) => {
+
+ m.nextScene = "selection";
+}
\ No newline at end of file
diff --git a/webhooks/functions/src/controller/handler/void.ts b/webhooks/functions/src/controller/handler/void.ts
new file mode 100644
index 00000000..b9e8c207
--- /dev/null
+++ b/webhooks/functions/src/controller/handler/void.ts
@@ -0,0 +1,5 @@
+import { THandlerFn } from "../../type";
+
+export const missing: THandlerFn = (m) => {
+ m.say("void");
+}
\ No newline at end of file
diff --git a/webhooks/functions/src/error.ts b/webhooks/functions/src/error.ts
new file mode 100644
index 00000000..f9beba84
--- /dev/null
+++ b/webhooks/functions/src/error.ts
@@ -0,0 +1,5 @@
+
+export class WebpubError extends Error {
+
+ code: number;
+}
\ No newline at end of file
diff --git a/webhooks/functions/src/index.ts b/webhooks/functions/src/index.ts
new file mode 100644
index 00000000..1580af4e
--- /dev/null
+++ b/webhooks/functions/src/index.ts
@@ -0,0 +1,18 @@
+
+// class-transformer
+import 'reflect-metadata';
+
+import * as functions from "firebase-functions";
+import { Assistant } from "./controller/Assistant";
+import { handler } from "./controller/handler";
+// import { writeFileSync} from 'fs';
+
+exports.ActionsOnGoogleFulfillment = functions.https.onRequest(async (req, res) => {
+
+ const app = new Assistant({});
+
+ handler(app);
+
+ app.app(req, res);
+
+});
diff --git a/webhooks/functions/src/model/data.model.test.ts b/webhooks/functions/src/model/data.model.test.ts
new file mode 100644
index 00000000..f15d500c
--- /dev/null
+++ b/webhooks/functions/src/model/data.model.test.ts
@@ -0,0 +1,82 @@
+import {IStorage} from './storage.interface';
+
+export const freshDataClone = () => Object.assign({
+ dbVersion: 1,
+ bearerToken: 'test',
+ player: {
+ current: {
+
+ },
+ history: {
+
+ },
+ },
+ session: {
+ scene: {
+ home_user: {
+ state: 'DEFAULT',
+ },
+ selection: {
+ state: 'DEFAULT',
+ kind: 'GROUP',
+ url: '',
+ nextUrlCounter: 0,
+ nbChoice: 0,
+ from: 'main',
+ },
+ search: {
+ state: 'DEFAULT',
+ query: '',
+ from: 'main',
+ },
+ player_prequel: {
+ state: 'DEFAULT',
+ from: 'main',
+ player: {},
+ },
+ },
+ },
+ user: {
+ authentication: 'NO_LINKED',
+ // sessionId: 'test',
+ },
+}, {});
+
+export const parsedDataClone = (): IStorage => Object.assign({
+ bearerToken: 'test',
+ player: {
+ current: {
+
+ },
+ history: new Map(),
+ },
+ session: {
+ scene: {
+ home_user: {
+ state: 'DEFAULT',
+ },
+ selection: {
+ state: 'DEFAULT',
+ kind: 'GROUP',
+ url: '',
+ nextUrlCounter: 0,
+ from: 'main',
+ nbChoice: 0,
+ },
+ search: {
+ state: 'DEFAULT',
+ query: '',
+ from: 'main',
+ },
+ player_prequel: {
+ state: 'DEFAULT',
+ from: 'main',
+ player: {},
+ },
+ },
+ },
+ user: {
+ authentication: 'NO_LINKED',
+ sessionId: 'test',
+ },
+}, {}) as IStorage;
diff --git a/webhooks/functions/src/model/database/firestore.ts b/webhooks/functions/src/model/database/firestore.ts
new file mode 100644
index 00000000..c1681a2c
--- /dev/null
+++ b/webhooks/functions/src/model/database/firestore.ts
@@ -0,0 +1,37 @@
+import * as admin from 'firebase-admin';
+import {Timestamp} from '@google-cloud/firestore';
+
+admin.initializeApp();
+
+const db = admin.firestore();
+
+export const push = async (key: string, value: FirebaseFirestore.DocumentData) => {
+ const docRef = db.collection('user-storage').doc(key);
+ await docRef.set(value);
+};
+
+
+// replace Timestamp object from firestore to Date native instance
+// but why Firestore return a Timestamp object !?
+const convertTimestampRecurs = (obj: {[str:string]:any}) => {
+ const ret = Object.entries(obj).reduce((pv, [k, v]) => {
+ return {
+ ...pv,
+ [k]: v instanceof Timestamp ?
+ v.toDate() :
+ typeof v === 'object' ?
+ convertTimestampRecurs(v) :
+ v,
+ };
+ }, {});
+
+ return ret;
+};
+
+export const pull = async (key: string): Promise<{[str:string]:any}> => {
+ const docRef = db.collection('user-storage').doc(key);
+ const doc = await docRef.get();
+ const data = doc.exists ? doc.data() : undefined;
+ const newData = data ? convertTimestampRecurs(data) : data;
+ return newData;
+};
diff --git a/webhooks/functions/src/model/database/index.ts b/webhooks/functions/src/model/database/index.ts
new file mode 100644
index 00000000..cd1069f3
--- /dev/null
+++ b/webhooks/functions/src/model/database/index.ts
@@ -0,0 +1,6 @@
+import {push, pull} from './firestore';
+
+export {
+ push,
+ pull,
+};
diff --git a/webhooks/functions/src/model/storage.dto.ts b/webhooks/functions/src/model/storage.dto.ts
new file mode 100644
index 00000000..138eb6c2
--- /dev/null
+++ b/webhooks/functions/src/model/storage.dto.ts
@@ -0,0 +1,197 @@
+import * as util from 'util';
+import {ISessionScene, IStorage, IStoragePlayer, IStoragePlayerCurrent, IStoragePlayerHistory, IStorageSession, IStorageUser, TStateAuthentication} from './storage.interface';
+import {classToPlain, Exclude, plainToClass, Transform, TransformationType, Type} from 'class-transformer';
+import {Equals, IsDate, IsNotEmpty, IsNumber, IsObject, IsOptional, IsString, IsUrl, Min, ValidateNested, validateSync} from 'class-validator';
+import {resetSelection} from '../controller/handler/selection.helper';
+
+const DB_VERSION = 1;
+
+class StoragePlayerHistoryDto implements IStoragePlayerHistory {
+ @Min(0)
+ @IsNumber()
+ index: number;
+
+ @Min(0)
+ @IsNumber()
+ time: number;
+
+ @IsDate()
+ date: Date;
+
+ // set(data: IStoragePlayerHistory) {
+ // this.date = data.date;
+ // this.index = data.index;
+ // this.time = data.time;
+ // }
+}
+
+class StoragePlayerCurrentDto implements IStoragePlayerCurrent {
+ @IsNumber()
+ @Min(0)
+ @IsOptional()
+ index?: number;
+
+ @IsNumber()
+ @Min(0)
+ @IsOptional()
+ time?: number;
+
+ @IsUrl()
+ @IsString()
+ @IsOptional()
+ url?: string;
+
+ // @IsBoolean()
+ // playing: boolean;
+
+ // set(data: IStoragePlayerCurrent) {
+ // this.index = data.index;
+ // this.time = data.time;
+ // this.url = data.url;
+ // this.playing = data.playing;
+ // }
+
+ constructor() {
+ // this.playing = false;
+ }
+}
+
+class StoragePlayerDto implements IStoragePlayer {
+ @IsObject()
+ @IsNotEmpty()
+ @Type(() => StoragePlayerCurrentDto)
+ @ValidateNested()
+ current: StoragePlayerCurrentDto;
+
+ @IsNotEmpty()
+ @Type(() => StoragePlayerHistoryDto)
+ @Transform(({value, type}) => { // transform new Map() to plain and from plain
+ if (type === TransformationType.PLAIN_TO_CLASS) {
+ return new Map(typeof value === 'object' ? Object.entries(value) : []);
+ }
+ if (type === TransformationType.CLASS_TO_PLAIN && typeof value === 'object' && value.entries) {
+ return Array.from>(value.entries()).reduce((pv, [key, value]) => ({...pv, [key]: value}), {});
+ }
+ })
+ @ValidateNested({
+ each: true,
+ })
+ history: Map;
+
+ constructor() {
+ this.current = new StoragePlayerCurrentDto();
+ this.history = new Map();
+ }
+}
+
+class StorageSessionDto implements IStorageSession {
+ @IsObject()
+ @IsNotEmpty()
+ scene: ISessionScene;
+
+ constructor() {
+ this.scene = {
+ 'home_user': {
+ state: 'DEFAULT',
+ },
+ 'selection': resetSelection(),
+ 'search': {
+ state: 'DEFAULT',
+ query: '',
+ from: 'main',
+ },
+ 'player_prequel': {
+ state: 'DEFAULT',
+ from: 'main',
+ player: {},
+ },
+ };
+ }
+}
+
+class StorageUserDto implements IStorageUser {
+ @IsNotEmpty()
+ authentication: TStateAuthentication;
+
+ @IsOptional()
+ @IsString()
+ sessionId: string;
+
+ constructor() {
+ this.authentication = 'NO_LINKED';
+ }
+}
+
+export class StorageDto implements IStorage {
+ @IsNumber()
+ @Equals(DB_VERSION)
+ dbVersion: number;
+
+ @IsNotEmpty()
+ bearerToken: string;
+
+ @IsObject()
+ @IsNotEmpty()
+ @Type(() => StoragePlayerDto)
+ @ValidateNested()
+ player: StoragePlayerDto;
+
+ @IsObject()
+ @IsNotEmpty()
+ @Type(() => StorageSessionDto)
+ @ValidateNested()
+ session: StorageSessionDto;
+
+ @IsObject()
+ @IsNotEmpty()
+ @Type(() => StorageUserDto)
+ @ValidateNested()
+ user: StorageUserDto;
+
+ @Exclude()
+ snapshot: IStorage;
+
+ constructor(bearerToken: string) {
+ this.dbVersion = DB_VERSION;
+ this.bearerToken = bearerToken;
+ this.player = new StoragePlayerDto();
+ this.snapshot = classToPlain(this) as IStorage;
+ this.session = new StorageSessionDto();
+ this.user = new StorageUserDto();
+ }
+
+ @Exclude()
+ static create(bearerToken: string, data?: Record): StorageDto {
+ if (!data && bearerToken) {
+ return new StorageDto(bearerToken);
+ }
+
+ const storage = plainToClass(StorageDto, data);
+ const errors = validateSync(storage);
+
+ if (errors.length > 0) {
+ throw new Error(JSON.stringify(errors, null, 4));
+ }
+ if (storage.bearerToken !== bearerToken) {
+ throw new Error('the bearerToken doesn\'t match beetween the key and value');
+ }
+
+ storage.snapshot = classToPlain(this) as IStorage;
+ return storage;
+ }
+
+ @Exclude()
+ public extract(): Record {
+ const errors = validateSync(this);
+
+ if (errors.length) {
+ console.error('storage DTO \'extract\' errors', util.inspect(errors, {depth: 8}));
+ console.error('return the last snapshot', this.snapshot);
+
+ return this.snapshot;
+ }
+
+ const storage = classToPlain(this, {exposeUnsetFields: false});
+ return storage;
+ }
+}
diff --git a/webhooks/functions/src/model/storage.interface.ts b/webhooks/functions/src/model/storage.interface.ts
new file mode 100644
index 00000000..5a7bca6a
--- /dev/null
+++ b/webhooks/functions/src/model/storage.interface.ts
@@ -0,0 +1,69 @@
+import {TSdkHandler} from '../typings/sdkHandler';
+
+export interface IStoragePlayerHistory {
+ index: number;
+ time: number;
+ date: Date;
+}
+
+export interface IStoragePlayerCurrent {
+ index?: number;
+ time?: number;
+ url?: string;
+ // playing: boolean;
+}
+
+export interface IStoragePlayer {
+ current: IStoragePlayerCurrent;
+ history: Map;
+}
+
+export type TStateDefault = 'DEFAULT'
+export type TStateAuthentication = 'NO_LINKED' | 'NEWLY_LINKED' | 'LINKED' | TStateDefault;
+export type TStateHomeUser = 'SESSION' | 'REPEAT' | TStateDefault;
+export type TStateSelection = 'RUNNING' | 'FINISH' | TStateDefault;
+export type TKindSelection = 'PUBLICATION' | 'GROUP';
+export type TStateSearch = 'RUNNING' | 'FINISH' | TStateDefault;
+export type TStatePlayerPrequel = TStateDefault;
+
+export interface ISessionScene {
+ 'home_user': {
+ state: TStateHomeUser,
+ },
+ 'selection': {
+ state: TStateSelection,
+ kind: TKindSelection,
+ url: string,
+ nextUrlCounter: number,
+ from: TSdkHandler,
+ nbChoice: number,
+ },
+ 'search': {
+ state: TStateSearch,
+ query: string,
+ from: TSdkHandler,
+ },
+ 'player_prequel': {
+ state: TStatePlayerPrequel,
+ from: TSdkHandler,
+ player: IStoragePlayerCurrent,
+ }
+}
+export type TKeySessionScene = keyof ISessionScene;
+
+export interface IStorageSession {
+ scene: ISessionScene;
+}
+
+export interface IStorageUser {
+ authentication: TStateAuthentication;
+ sessionId?: string;
+}
+
+export interface IStorage {
+ bearerToken: string;
+ player: IStoragePlayer;
+ session: IStorageSession;
+ user: IStorageUser;
+}
+
diff --git a/webhooks/functions/src/model/storage.model.ts b/webhooks/functions/src/model/storage.model.ts
new file mode 100644
index 00000000..554d7606
--- /dev/null
+++ b/webhooks/functions/src/model/storage.model.ts
@@ -0,0 +1,41 @@
+import {ok} from 'assert';
+import {pull, push} from './database';
+import {StorageDto} from './storage.dto';
+
+let storageModel: StorageModel | undefined;
+
+export class StorageModel {
+ private _bearer: string;
+ private _storage: StorageDto;
+
+ constructor(bearerToken: string, store: StorageDto) {
+ ok(bearerToken);
+ this._bearer = bearerToken;
+
+ ok(store instanceof StorageDto);
+ this._storage = store;
+ }
+
+ public static async create(bearerToken: string) {
+ const data = await pull(bearerToken);
+
+ const store = StorageDto.create(bearerToken, data);
+
+ // let's to cascading the storage errors accross storage -> storageModel -> Machine -> Assistant
+ if (storageModel) {
+ console.info('storageModel already instancied');
+ return storageModel;
+ }
+ storageModel = new StorageModel(bearerToken, store);
+ return storageModel;
+ }
+
+ public async save() {
+ const data = this.store.extract();
+ await push(this._bearer, data);
+ }
+
+ get store() {
+ return this._storage;
+ }
+}
diff --git a/webhooks/functions/src/model/storage.test.ts b/webhooks/functions/src/model/storage.test.ts
new file mode 100644
index 00000000..814f85d7
--- /dev/null
+++ b/webhooks/functions/src/model/storage.test.ts
@@ -0,0 +1,180 @@
+import 'reflect-metadata';
+import {StorageDto} from './storage.dto';
+import * as assert from 'assert';
+import {classToPlain} from 'class-transformer';
+import {inspect} from 'util';
+import * as chai from 'chai';
+// import { StorageModel } from './storage.model';
+import * as sinon from 'sinon';
+
+import {StorageModel} from './storage.model';
+import {storageModelMocked} from '../test/utils.test';
+import {freshDataClone} from './data.model.test';
+
+let freshData = freshDataClone();
+
+describe('storage DTO', () => {
+ beforeEach(() => {
+ freshData = freshDataClone();
+ });
+
+ it('create storage object without bearerToken', () => {
+ const obj = {
+ dbVersion: 1,
+ bearerToken: undefined,
+ player: {
+ current: {
+
+ playing: false,
+ },
+ history: {
+
+ },
+ },
+ };
+
+ chai.expect(() => StorageDto.create('', obj)).to.throw();
+ });
+
+ it('create storage object failed dbversion', () => {
+ const obj = {
+ dbVersion: 2,
+ bearerToken: 'test',
+ player: {
+ current: {
+
+ playing: false,
+ },
+ history: {
+
+ },
+ },
+ };
+
+ chai.expect(() => StorageDto.create('test', obj)).to.throw();
+ });
+
+ it('create storage object failed dbversion and bearer', () => {
+ const obj = {
+ dbVersion: 2,
+ bearerToken: undefined,
+ player: {
+ current: {
+
+ playing: false,
+ },
+ history: {
+
+ },
+ },
+ };
+
+ chai.expect(() => StorageDto.create('test', obj)).to.throw();
+ });
+
+ it('undefined storage', () => {
+ const instance = StorageDto.create('test', undefined);
+
+ chai.expect(instance.bearerToken).to.be.eq('test');
+ });
+
+ it('bad validation extract', () => {
+ const instance = StorageDto.create('test');
+
+ instance.player.current.index = -34;
+
+ const extr = instance.extract();
+
+ const instance2 = StorageDto.create('test', extr);
+
+ chai.expect(instance2.player.current.index).to.be.undefined;
+ });
+
+ it('create error', () => {
+ const date = new Date();
+
+ const obj = freshData;
+ // @ts-ignore
+ obj.player.history.test = {
+ index: 0,
+ time: 0,
+ date: date,
+ };
+ const instance = StorageDto.create('test', obj);
+
+ assert.deepEqual(instance.player.history.get('test'), {
+ index: 0,
+ time: 0,
+ date: date,
+ });
+
+ instance.player.history.set('test2', {
+ index: 0,
+ time: 0,
+ date: date,
+ });
+
+ const extr = classToPlain(instance);
+
+ assert.deepEqual({
+ test2: {
+ index: 0,
+ time: 0,
+ date: date,
+ },
+ test: {
+ index: 0,
+ time: 0,
+ date: date,
+ },
+ }, extr.player.history);
+
+ console.log(inspect(extr, {depth: 7}));
+ console.log(new Date());
+
+ const instance2 = StorageDto.create('test', extr);
+
+ assert.deepEqual(instance2.player.history.get('test2'), {
+ index: 0,
+ time: 0,
+ date: date,
+ });
+ });
+});
+
+
+describe('storage Model', () => {
+ chai.should();
+
+ beforeEach(() => {
+ freshData = freshDataClone();
+ });
+
+ // @ts-ignore
+ let {data, push, pull}: {
+ data: StorageModel;
+ pull: sinon.SinonStub;
+ push: sinon.SinonStub;
+ } = {};
+
+ beforeEach(async () => {
+ ({data, push, pull} = await storageModelMocked());
+ });
+
+ it('create a storeModel', async () => {
+ console.log(JSON.stringify(data.store.extract(), null, 4));
+
+ assert.deepEqual(data.store.extract(), freshData);
+
+ data.store.should.instanceOf(StorageDto);
+ data.store.extract().should.to.deep.eq(freshData);
+ pull.calledOnce.should.eq(true);
+ });
+
+ it('push store', async () => {
+ data.save();
+
+ push.calledOnce.should.eq(true);
+ push.args.should.to.deep.equal([['test', freshData]]);
+ });
+});
diff --git a/webhooks/functions/src/sdk/collections.test.ts b/webhooks/functions/src/sdk/collections.test.ts
new file mode 100644
index 00000000..ec15252e
--- /dev/null
+++ b/webhooks/functions/src/sdk/collections.test.ts
@@ -0,0 +1,182 @@
+import {expressMocked, shell, storageModelMocked} from '../test/utils.test';
+import * as chai from 'chai';
+// import * as sinon from 'sinon';
+import {headers, body} from './conv.test';
+import {parsedDataClone} from '../model/data.model.test';
+import {BOOKSHELF_URL, GENRE_LIST_URL, THEMATIC_LIST_URL} from '../constants';
+
+
+chai.should();
+
+const scene = 'collections';
+
+const yaml = `intentEvents:
+- handler:
+ webhookHandler: collections__intent__bookshelf
+ intent: bookshelf
+- handler:
+ webhookHandler: collections__intent__by_genre
+ intent: by_genre
+- handler:
+ webhookHandler: collections__intent__by_theme
+ intent: by_theme
+- handler:
+ webhookHandler: collections__intent__help
+ intent: help
+- handler:
+ webhookHandler: collections__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: collections__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: collections__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: collections__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: collections__intent__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: collections__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: collections__on_enter
+`;
+
+describe(scene + ' handler', () => {
+ describe('sdk', () => {
+ it('check main scene', (done) => {
+ shell(`cat custom/scenes/${scene}.yaml`, (stdout) => {
+ stdout.should.to.be.eq(yaml);
+ }, done);
+ });
+ });
+
+ describe('app', () => {
+ it('on enter', async () => {
+ body.handler.name = 'collections__on_enter';
+ body.scene.name = scene;
+
+ const message = `Okay, would you prefer to get a choice of collections by theme or by genre?\n`;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ });
+
+ it('by genre', async () => {
+ body.handler.name = 'collections__intent__by_genre';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ model.data.store.session.scene.selection.from.should.to.be.eq('collections__intent__by_genre');
+ model.data.store.session.scene.selection.kind.should.to.be.eq('GROUP');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0);
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(0);
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING');
+ model.data.store.session.scene.selection.url.should.to.be.eq(GENRE_LIST_URL);
+
+ data.scene.next.name.should.to.be.eq('selection');
+ });
+ it('by theme', async () => {
+ body.handler.name = 'collections__intent__by_theme';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ model.data.store.session.scene.selection.from.should.to.be.eq('collections__intent__by_theme');
+ model.data.store.session.scene.selection.kind.should.to.be.eq('GROUP');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0);
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(0);
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING');
+ model.data.store.session.scene.selection.url.should.to.be.eq(THEMATIC_LIST_URL);
+
+ data.scene.next.name.should.to.be.eq('selection');
+ });
+ it('bookshelf', async () => {
+ body.handler.name = 'collections__intent__bookshelf';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ model.data.store.session.scene.selection.from.should.to.be.eq('collections__intent__bookshelf');
+ model.data.store.session.scene.selection.kind.should.to.be.eq('PUBLICATION');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0);
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(0);
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING');
+ model.data.store.session.scene.selection.url.should.to.be.eq(BOOKSHELF_URL);
+
+ data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ const help = `To hear an overview of available themes, say 'by theme'. For an overview of available genres, say 'by genre'.\n`;
+
+ it('help', async () => {
+ body.handler.name = 'collections__intent__help';
+ body.scene.name = scene;
+
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('collections');
+ });
+
+ it('fallback 1 and 2', async () => {
+ body.handler.name = 'collections__intent__help';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('collections');
+ });
+
+ it('fallback 3', async () => {
+ body.handler.name = 'collections__intent__fallback_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+
+ it('silence 1 and 2', async () => {
+ body.handler.name = 'collections__intent__silence';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('collections');
+ });
+
+ it('silence 3', async () => {
+ body.handler.name = 'collections__intent__fallback_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+ });
+});
diff --git a/webhooks/functions/src/sdk/conv.test.ts b/webhooks/functions/src/sdk/conv.test.ts
new file mode 100644
index 00000000..823cc348
--- /dev/null
+++ b/webhooks/functions/src/sdk/conv.test.ts
@@ -0,0 +1,224 @@
+
+export const headers = {
+ 'host': 'fb9b-89-90-221-249.ngrok.io',
+ 'user-agent': 'Google-ActionsOnGoogle/1.0',
+ 'content-length': '755',
+ 'accept-encoding': 'gzip, deflate, br',
+ 'content-type': 'application/json;charset=UTF-8',
+ 'google-actions-api-version': '3',
+ 'google-assistant-signature': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjllYWEwMjZmNjM1MTU3ZGZhZDUzMmU0MTgzYTZiODIzZDc1MmFkMWQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhdWQiOiJlZHJsYWItMSIsIm5iZiI6MTY0MzkwNTY0OSwiaWF0IjoxNjQzOTA1OTQ5LCJleHAiOjE2NDM5MDYwNjksImp0aSI6ImQwMzQ1NmU3NDk5MWUxNGY0NjAwYjZhZWIxMWUzMzdkZDc2ODJkYjIifQ.gJ3hcEEw0qfUGf7z4WBFee4D9kdxV9kQzjbbhmL17K_nSTnrMISJZyj1DlmmcPragmp6EXWbJ14zTIzmrKPoDbEyx8H4PYG3h6vSGo4tlyB_H69hr0QKRU8fCc5lBQXVMGViuJBAMI9jWP28H2nt7hV0p-_AHayJnEvwSju5ojcd9wAalpTYcJagfdTkT2kvJEh_GeyooZvPZEOnx0vc3laTvrQqdxgP6Sh4wHbJnptj4bUiUirONuFp63C9Y92zkQPDD6tiQ8an475EjI9cys_-KDtXBhfx4Ojo3M0_9jBgpN67aDVk0vOnHYtnXzBg_fZhiM0sLaZRbe49LucHHw',
+ 'x-forwarded-for': '66.249.81.244',
+ 'x-forwarded-proto': 'https',
+ 'connection': 'close',
+};
+
+export let body: ReturnType;
+
+
+// beforeEach save my life !
+// thanks you mocha
+beforeEach(() => {
+ body = bodyCopy();
+});
+
+const bodyCopy = () => Object.assign({}, {
+ 'handler': {
+ 'name': 'main',
+ },
+ 'intent': {
+ 'name': 'actions.intent.MAIN',
+ 'params': {},
+ 'query': 'Parler avec dev EDRLAB',
+ },
+ 'scene': {
+ 'name': 'actions.scene.START_CONVERSATION',
+ 'slotFillingStatus': 'UNSPECIFIED',
+ 'slots': {},
+ },
+ 'session': {
+ 'id': 'test', // remove id token but @todo need to test this part .. remove session when session id changed
+ 'params': {},
+ 'typeOverrides': [],
+ 'languageCode': '',
+ },
+ 'user': {
+ 'locale': 'en-US',
+ 'params': {
+ 'bearerToken': '',
+ },
+ 'accountLinkingStatus': 'LINKED',
+ 'verificationStatus': 'VERIFIED',
+ 'packageEntitlements': [],
+ 'gaiamint': '',
+ 'permissions': [],
+ 'lastSeenTime': '2022-02-03T16:15:10Z',
+ },
+ 'home': {
+ 'params': {},
+ },
+ 'device': {
+ 'capabilities': [
+ 'SPEECH',
+ 'RICH_RESPONSE',
+ 'LONG_FORM_AUDIO',
+ ],
+ 'timeZone': {
+ 'id': 'Europe/Paris',
+ 'version': '',
+ },
+ },
+ 'context': {
+ 'media': {
+ progress: '0s',
+ index: 0,
+ },
+ },
+});
+
+export const convRequestInHandle = {
+ 'overwrite': true,
+ 'digested': false,
+ 'request': {
+ 'handler': {
+ 'name': 'main',
+ },
+ 'intent': {
+ 'name': 'actions.intent.MAIN',
+ 'params': {},
+ 'query': 'Parler avec dev EDRLAB',
+ },
+ 'scene': {
+ 'name': 'actions.scene.START_CONVERSATION',
+ 'slotFillingStatus': 'UNSPECIFIED',
+ 'slots': {},
+ },
+ 'session': {
+ 'id': 'ABwppHEDTsgFwQdV_QSp5YvBdnevHBjuyCHzGH-6VPE-IOTt9RmVZieVouqECeLyyO4g29pOHPA',
+ 'params': {},
+ 'typeOverrides': [],
+ 'languageCode': '',
+ },
+ 'user': {
+ 'locale': 'fr-CA',
+ 'params': {
+ 'bearerToken': 'bearer token not defined',
+ },
+ 'accountLinkingStatus': 'LINKED',
+ 'verificationStatus': 'VERIFIED',
+ 'packageEntitlements': [],
+ 'gaiamint': '',
+ 'permissions': [],
+ 'lastSeenTime': '2022-02-03T16:03:22Z',
+ },
+ 'home': {
+ 'params': {},
+ },
+ 'device': {
+ 'capabilities': [
+ 'SPEECH',
+ 'RICH_RESPONSE',
+ 'LONG_FORM_AUDIO',
+ ],
+ 'timeZone': {
+ 'id': 'Europe/Paris',
+ 'version': '',
+ },
+ },
+ },
+ 'headers': {
+ 'host': 'fb9b-89-90-221-249.ngrok.io',
+ 'user-agent': 'Google-ActionsOnGoogle/1.0',
+ 'content-length': '755',
+ 'accept-encoding': 'gzip, deflate, br',
+ 'content-type': 'application/json;charset=UTF-8',
+ 'google-actions-api-version': '3',
+ 'google-assistant-signature': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjllYWEwMjZmNjM1MTU3ZGZhZDUzMmU0MTgzYTZiODIzZDc1MmFkMWQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhdWQiOiJlZHJsYWItMSIsIm5iZiI6MTY0MzkwMzkwNywiaWF0IjoxNjQzOTA0MjA3LCJleHAiOjE2NDM5MDQzMjcsImp0aSI6ImI2OGJkNDM1YjNmNWM1YWVmZmE3OTIwYjNlY2EwMjU0MTkzYjhiOGMifQ.AMiXPH_4OAjSAD9P1dQ0tHGxgdPp0yiHnPeNlH1h1Lmw2fP4URdKiUz7X8fvgFuhgAkffAo9XPKRPeS5JpCCUmQCvjfE4cej45vyHqCjovEBJxuVFwpbmFcilKAIE2JmGoSlDsbyAJvV0c70HiaOjXtVikPll_mprwveXXU3x6OG4pu0Hqqn9RrsQFIyqQ-p9dU1sVjMvIK-Qhg6KRBKfrirEKIz6dCxVZRdj76jYuPZPsmVeLRfwjt8J0GtFHBlAasJxv02Al8WMw0j6GUeN0GkFnVs_0dupgLV1-v2Zhr5BDiCgjHLbwVWIGsh-_4Jay7kjJ2ouh7ZJNTyfc80kg',
+ 'x-forwarded-for': '66.249.81.235',
+ 'x-forwarded-proto': 'https',
+ 'connection': 'close',
+ },
+ 'handler': {
+ 'name': 'main',
+ },
+ 'intent': {
+ 'name': 'actions.intent.MAIN',
+ 'query': 'Parler avec dev EDRLAB',
+ 'params': {},
+ },
+ 'scene': {
+ 'name': 'actions.scene.START_CONVERSATION',
+ 'slotFillingStatus': 'UNSPECIFIED',
+ 'slots': {},
+ 'next': {},
+ },
+ 'session': {
+ 'id': 'ABwppHEDTsgFwQdV_QSp5YvBdnevHBjuyCHzGH-6VPE-IOTt9RmVZieVouqECeLyyO4g29pOHPA',
+ 'params': {},
+ 'typeOverrides': [],
+ 'languageCode': '',
+ },
+ 'user': {
+ 'locale': 'fr-CA',
+ 'params': {
+ 'bearerToken': 'bearer token not defined',
+ },
+ 'accountLinkingStatus': 'ACCOUNT_LINKING_STATUS_UNSPECIFIED',
+ 'verificationStatus': 'VERIFIED',
+ 'packageEntitlements': [],
+ 'gaiamint': '',
+ 'permissions': [],
+ 'lastSeenTime': '2022-02-03T16:03:22Z',
+ },
+ 'device': {
+ 'capabilities': [
+ 'SPEECH',
+ 'RICH_RESPONSE',
+ 'LONG_FORM_AUDIO',
+ ],
+ 'currentLocation': {},
+ 'timeZone': {
+ 'id': 'Europe/Paris',
+ 'version': '',
+ },
+ },
+ 'home': {
+ 'params': {},
+ },
+ 'expected': {},
+ 'context': {},
+ 'prompt': {
+ 'override': false,
+ },
+ // "_internal": {
+ // "promptSet": false,
+ // "orig": {
+ // "scene": {
+ // "name": "actions.scene.START_CONVERSATION",
+ // "slotFillingStatus": "UNSPECIFIED",
+ // "slots": {},
+ // "next": {}
+ // },
+ // "session": {
+ // "id": "ABwppHEDTsgFwQdV_QSp5YvBdnevHBjuyCHzGH-6VPE-IOTt9RmVZieVouqECeLyyO4g29pOHPA",
+ // "params": {},
+ // "typeOverrides": [],
+ // "languageCode": ""
+ // },
+ // "user": {
+ // "locale": "fr-CA",
+ // "params": {
+ // "bearerToken": "bearer token not defined"
+ // },
+ // "accountLinkingStatus": "ACCOUNT_LINKING_STATUS_UNSPECIFIED",
+ // "verificationStatus": "VERIFIED",
+ // "packageEntitlements": [],
+ // "gaiamint": "",
+ // "permissions": [],
+ // "lastSeenTime": "2022-02-03T16:03:22Z"
+ // },
+ // "home": {
+ // "params": {}
+ // }
+ // }
+ // }
+};
diff --git a/webhooks/functions/src/sdk/home_new_user.test.ts b/webhooks/functions/src/sdk/home_new_user.test.ts
new file mode 100644
index 00000000..72ca157c
--- /dev/null
+++ b/webhooks/functions/src/sdk/home_new_user.test.ts
@@ -0,0 +1,170 @@
+import {expressMocked, shell} from '../test/utils.test';
+import * as chai from 'chai';
+// import * as sinon from 'sinon';
+import {headers, body} from './conv.test';
+
+
+chai.should();
+
+const scene = 'home_new_user';
+
+const yaml = `intentEvents:
+- handler:
+ webhookHandler: home_new_user__intent__help
+ intent: help
+- handler:
+ webhookHandler: home_new_user__intent__maybe_later
+ intent: maybe_later
+- handler:
+ webhookHandler: home_new_user__intent__no
+ intent: "no"
+- handler:
+ webhookHandler: home_new_user__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: home_new_user__intent__yes
+ intent: "yes"
+ transitionToScene: home_new_user_AccountLinking
+- handler:
+ webhookHandler: home_new_user__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: home_new_user__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: home_new_user__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: home_new_user__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: home_new_user__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: home_new_user__on_enter
+`;
+
+describe('home_new_user handler', () => {
+ describe('sdk', () => {
+ it('check main scene', (done) => {
+ shell(`cat custom/scenes/${scene}.yaml`, (stdout) => {
+ stdout.should.to.be.eq(yaml);
+ }, done);
+ });
+ });
+
+ describe('app', () => {
+ it('on enter', async () => {
+ body.handler.name = 'home_new_user__on_enter';
+ body.scene.name = scene;
+
+ // const message = `To fully enjoy your audiobooks and access your personal bookshelf, you will need to link your EDRLAB account.\nWould you like to do so now ?\n`;
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('To fully experience EDRLAB Library, and enjoy your favorite audiobooks via Google, you\'ll need to connect your EDRLAB account. To do so, answer \'yes\' when prompted and follow the instructions. I will then send a connection link, that you will find into the Google Home application. You will have to log in to your EDRLAB account. You\'ll only have to do this once, and you\'ll be all set to start enjoying the wonderful world of EDRLAB books for hours on end!\n' +
+ 'Would you like to link your account right now?\n');
+ });
+ it('repeat', async () => {
+ body.handler.name = 'home_new_user__intent__repeat';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+ it('yes', async () => {
+ body.handler.name = 'home_new_user__intent__yes';
+ body.scene.name = scene;
+
+ await expressMocked(body, headers);
+
+ // expect authentication
+ // automatic transition to account linking
+ });
+
+ it('no', async () => {
+ body.handler.name = 'home_new_user__intent__no';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ console.log(data.prompt.firstSimple);
+
+ // const message = `In order to read books using the EDRLAB Library via Google, you need to be a registered EDRLAB member and link your account.\nWould you like to learn more about EDRLAB?\n`;
+ // data.prompt.firstSimple.speech.should.to.be.eq(message);
+
+ data.scene.next.name.should.to.be.eq('home_new_user_no');
+ });
+
+ it('maybeLater', async () => {
+ body.handler.name = 'home_new_user__intent__maybe_later';
+ body.scene.name = scene;
+
+ // const message = `Of course! you can learn more about EDRLAB or quit for now.\nWhat would you like to do?\n`;
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(message);
+
+ data.scene.next.name.should.to.be.eq('home_new_user_maybe_later');
+ });
+
+ // const help = `To fully experience EDRLAB Library, and enjoy your favorite audiobooks via Google, you'll need to connect your EDRLAB account. To do so, answer 'yes' when prompted and follow the instructions. I will then send a connection link, that you will find into the Google Home application. You will have to log in to your EDRLAB account. You'll only have to do this once, and you'll be all set to start enjoying the wonderful world of EDRLAB books for hours on end!\nWould you like to link your account right now?\n`;
+
+ it('help', async () => {
+ body.handler.name = 'home_new_user__intent__help';
+ body.scene.name = scene;
+
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+
+ it('fallback 1 and 2', async () => {
+ body.handler.name = 'home_new_user__intent__help';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+
+ it('fallback 3', async () => {
+ body.handler.name = 'home_new_user__intent__fallback_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+
+ it('silence 1 and 2', async () => {
+ body.handler.name = 'home_new_user__intent__silence';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+
+ it('silence 3', async () => {
+ body.handler.name = 'home_new_user__intent__fallback_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+ });
+});
diff --git a/webhooks/functions/src/sdk/home_new_user_maybe_later.test.ts b/webhooks/functions/src/sdk/home_new_user_maybe_later.test.ts
new file mode 100644
index 00000000..13e57160
--- /dev/null
+++ b/webhooks/functions/src/sdk/home_new_user_maybe_later.test.ts
@@ -0,0 +1,154 @@
+import {expressMocked, shell} from '../test/utils.test';
+import * as chai from 'chai';
+// import * as sinon from 'sinon';
+import {headers, body} from './conv.test';
+
+
+chai.should();
+
+const scene = 'home_new_user_maybe_later';
+
+const yaml = `intentEvents:
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__learn_more
+ intent: learn_more
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__link_account
+ intent: link_account
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__help
+ intent: help
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: home_new_user_maybe_later__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: home_new_user_maybe_later__on_enter
+`;
+
+describe('home_new_user_maybe_later handler', () => {
+ describe('sdk', () => {
+ it('check main scene', (done) => {
+ shell(`cat custom/scenes/${scene}.yaml`, (stdout) => {
+ stdout.should.to.be.eq(yaml);
+ }, done);
+ });
+ });
+
+ describe('app', () => {
+ it('on enter', async () => {
+ body.handler.name = 'home_new_user_maybe_later__on_enter';
+ body.scene.name = scene;
+
+ const message = `You can ask me to link your account, or learn more about the EDRLAB Library. You can also exit this application, by simply saying 'stop'. What is your decision?\n`;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ });
+ it('link account', async () => {
+ body.handler.name = 'home_new_user_maybe_later__intent__link_account';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.scene.next.name.should.to.be.eq('home_new_user_AccountLinking');
+ });
+
+ it('learn more', async () => {
+ body.handler.name = 'home_new_user_maybe_later__intent__learn_more';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ // const message = `EDRLAB about text. Would you like to find out more about EDRLAB membership, or would you prefer to exit this skill?\n`;
+ // data.prompt.firstSimple.speech.should.to.be.eq(message);
+
+ data.scene.next.name.should.to.be.eq('info');
+ });
+
+ it('repeat', async () => {
+ body.handler.name = 'home_new_user_maybe_later__intent__repeat';
+ body.scene.name = scene;
+
+ // const data = await expressMocked(body, headers);
+
+ // data.scene.next.name.should.to.be.eq('home_new_user_maybe_later');
+ });
+
+ // const help = `You can ask me to link your account, or to learn more about EDRLAB. You can also exit this skill, by simply saying 'stop'. What would you like to do?\n`;
+
+ it('help', async () => {
+ body.handler.name = 'home_new_user_maybe_later__intent__help';
+ body.scene.name = scene;
+
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('home_new_user_maybe_later');
+ });
+
+ it('fallback 1 and 2', async () => {
+ body.handler.name = 'home_new_user_maybe_later__intent__help';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('home_new_user_maybe_later');
+ });
+
+ it('fallback 3', async () => {
+ body.handler.name = 'home_new_user_maybe_later__intent__fallback_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+
+ it('silence 1 and 2', async () => {
+ body.handler.name = 'home_new_user_maybe_later__intent__silence';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('home_new_user_maybe_later');
+ });
+
+ it('silence 3', async () => {
+ body.handler.name = 'home_new_user_maybe_later__intent__fallback_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+ });
+});
diff --git a/webhooks/functions/src/sdk/home_new_user_no.test.ts b/webhooks/functions/src/sdk/home_new_user_no.test.ts
new file mode 100644
index 00000000..b6628c93
--- /dev/null
+++ b/webhooks/functions/src/sdk/home_new_user_no.test.ts
@@ -0,0 +1,153 @@
+import {expressMocked, shell} from '../test/utils.test';
+import * as chai from 'chai';
+// import * as sinon from 'sinon';
+import {headers, body} from './conv.test';
+
+
+chai.should();
+
+const scene = 'home_new_user_no';
+
+const yaml = `intentEvents:
+- handler:
+ webhookHandler: home_new_user_no__intent__yes
+ intent: "yes"
+- handler:
+ webhookHandler: home_new_user_no__intent__no
+ intent: "no"
+- handler:
+ webhookHandler: home_new_user_no__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: home_new_user_no__intent__help
+ intent: help
+- handler:
+ webhookHandler: home_new_user_no__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: home_new_user_no__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: home_new_user_no__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: home_new_user_no__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: home_new_user_no__intent__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: home_new_user_no__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: home_new_user_no__on_enter
+`;
+
+describe(scene + ' handler', () => {
+ describe('sdk', () => {
+ it('check main scene', (done) => {
+ shell(`cat custom/scenes/${scene}.yaml`, (stdout) => {
+ stdout.should.to.be.eq(yaml);
+ }, done);
+ });
+ });
+
+ describe('app', () => {
+ it('on enter', async () => {
+ body.handler.name = 'home_new_user_no__on_enter';
+ body.scene.name = scene;
+
+ const message = `In order to read books using the EDRLAB Library via Google, you need to be a registered EDRLAB member and link your account.\nWould you like to learn more about registering on the EDRLAB Library?\n`;
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ });
+ it('yes', async () => {
+ body.handler.name = 'home_new_user_no__intent__yes';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ // const message = `EDRLAB is a national non-profit organization established by Canadian public libraries to champion the fundamental right of Canadians with print disabilities to access media and reading materials in the format of their choice, including audio, braille, e-text and descriptive video. Would you like to find out more about EDRLAB membership, or would you prefer to exit this skill?\n`;
+ // data.prompt.firstSimple.speech.should.to.be.eq(message);
+
+ data.scene.next.name.should.to.be.eq('info');
+ });
+
+ it('no', async () => {
+ body.handler.name = 'home_new_user_no__intent__no';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.scene.next.name.should.to.be.eq('actions.scene.END_CONVERSATION');
+ });
+
+ it('repeat', async () => {
+ body.handler.name = 'home_new_user_no__intent__repeat';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.scene.next.name.should.to.be.eq('home_new_user_no');
+ });
+
+ const help = `In order to use the EDRLAB library via your Google Home, you must be a registered member of the library and link your account. Would you like to learn more about the EDRLAB Library?\n`;
+
+ it('help', async () => {
+ body.handler.name = 'home_new_user_no__intent__help';
+ body.scene.name = scene;
+
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('home_new_user_no');
+ });
+
+ it('fallback 1 and 2', async () => {
+ body.handler.name = 'home_new_user_no__intent__help';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('home_new_user_no');
+ });
+
+ it('fallback 3', async () => {
+ body.handler.name = 'home_new_user_no__intent__fallback_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_new_user_no');
+ });
+
+ it('silence 1 and 2', async () => {
+ body.handler.name = 'home_new_user_no__intent__silence';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('home_new_user_no');
+ });
+
+ it('silence 3', async () => {
+ body.handler.name = 'home_new_user_no__intent__fallback_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_new_user_no');
+ });
+ });
+});
diff --git a/webhooks/functions/src/sdk/home_user.test.ts b/webhooks/functions/src/sdk/home_user.test.ts
new file mode 100644
index 00000000..6663998f
--- /dev/null
+++ b/webhooks/functions/src/sdk/home_user.test.ts
@@ -0,0 +1,408 @@
+import {expressMocked, shell, storageModelMocked} from '../test/utils.test';
+import * as chai from 'chai';
+// import * as sinon from 'sinon';
+import {headers, body} from './conv.test';
+import {parsedDataClone} from '../model/data.model.test';
+import {IWebPubView} from 'opds-fetcher-parser/build/src/interface/webpub';
+import {BOOKSHELF_URL} from '../constants';
+
+
+chai.should();
+
+const scene = 'home_user';
+
+const yaml = `intentEvents:
+- handler:
+ webhookHandler: home_user__intent__help
+ intent: help
+- handler:
+ webhookHandler: home_user__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: home_user__intent__bookshelf
+ intent: bookshelf
+- handler:
+ webhookHandler: home_user__intent__collections
+ intent: collections
+- handler:
+ webhookHandler: home_user__intent__search
+ intent: search
+- handler:
+ webhookHandler: home_user__intent__recent_books
+ intent: recent_books
+- handler:
+ webhookHandler: home_user__intent__current_book
+ intent: current_book
+- handler:
+ webhookHandler: home_user__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: home_user__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: home_user__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: home_user__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: home_user__intent__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: home_user__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: home_user__on_enter
+`;
+
+describe('home_user handler', () => {
+ describe('sdk', () => {
+ it('check main scene', (done) => {
+ shell(`cat custom/scenes/${scene}.yaml`, (stdout) => {
+ stdout.should.to.be.eq(yaml);
+ }, done);
+ });
+ });
+
+ describe('app', () => {
+ it('on enter', async () => {
+ body.handler.name = 'home_user__on_enter';
+ body.scene.name = scene;
+ body.session.id = 'on enter'; // new session
+
+ const message = 'Would you like to consult your bookshelf, or browse our collections? You can also search for a book by saying search for. Followed by a book title or an author.\n';
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ });
+ it('on enter with session state but new session', async () => {
+ body.handler.name = 'home_user__on_enter';
+ body.scene.name = scene;
+ body.session.id = 'id'; // new session
+
+ const message = 'Would you like to consult your bookshelf, or browse our collections? You can also search for a book by saying search for. Followed by a book title or an author.\n';
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+ model.data.store.session.scene.home_user.state.should.to.be.eq('SESSION');
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ });
+ it('on enter with session state but new session undefined so the session data is not removed', async () => {
+ body.handler.name = 'home_user__on_enter';
+ body.scene.name = scene;
+ body.session.id = 'on enter with session state but new session undefined so the session data is not removed'; // new session
+
+ const message = 'Would you like to consult your bookshelf, or browse our collections? You can also search for a book by saying search for. Followed by a book title or an author.\n';
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+ model.data.store.session.scene.home_user.state.should.to.be.eq('SESSION');
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ });
+ it('on enter with session state', async () => {
+ body.handler.name = 'home_user__on_enter';
+ body.scene.name = scene;
+ body.session.id = 'test';
+
+ const message = 'Would you like to consult your bookshelf, or browse our collections? You can also search for a book by saying search for. Followed by a book title or an author.\n';
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+ model.data.store.session.scene.home_user.state.should.to.be.eq('SESSION');
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ });
+ it('on enter with a current playing no history', async () => {
+ body.handler.name = 'home_user__on_enter';
+ body.scene.name = scene;
+ body.session.id = 'on enter with a current playing no history';
+
+ const pullData = parsedDataClone();
+ pullData.player.current.index = 9;
+ pullData.player.current.url = 'https://my.url';
+ pullData.player.current.time = 0;
+
+ const feed: Partial = {
+ publications: [
+ {
+ entryLinks: [{url: 'http://self.link'}],
+ openAccessLinks: [{url: 'http://webpub.link'}],
+ title: 'my title',
+ authors: [
+ {
+ name: 'hello',
+ },
+ ],
+ },
+ ],
+ };
+ const webpub: Partial = {
+ title: 'my title',
+ authors: [
+ 'hello',
+ 'world',
+ ],
+ };
+
+ const data = await expressMocked(body, headers, pullData, feed, webpub);
+ console.log(JSON.stringify(data, null, 4));
+
+ data.prompt.firstSimple.speech.should.to.be.eq('You are listening to the 10 chapter of my title, hello, which you can now pick up.\n' +
+ 'And, of course, \n' +
+ 'You can consult your bookshelf, or browse our collections. You can also search for a book by saying search followed by a book title or an author.\n' +
+ 'Resume reading. Recent books. Bookshelf. Collections. Search for a specific book: what do you want to do?\n');
+ });
+ it('on enter with a current playing and history', async () => {
+ body.handler.name = 'home_user__on_enter';
+ body.scene.name = scene;
+ body.session.id = 'on enter with a current playing and history';
+
+ const pullData = parsedDataClone();
+ pullData.player.current.index = 9;
+ pullData.player.current.url = 'https://my.url';
+ pullData.player.current.time = 0;
+
+ pullData.player.history = {
+ // @ts-ignore
+ 1: {index: 0, time: 0, date: new Date()},
+ 2: {index: 0, time: 0, date: new Date()},
+ 3: {index: 0, time: 0, date: new Date()},
+ 4: {index: 0, time: 0, date: new Date()},
+ };
+ // pullData.player.history.set("1", {index: 0, time: 0, date: new Date()});
+ // pullData.player.history.set("2", {index: 0, time: 0, date: new Date()});
+ // pullData.player.history.set("3", {index: 0, time: 0, date: new Date()});
+ // pullData.player.history.set("4", {index: 0, time: 0, date: new Date()});
+
+ const feed: Partial = {
+ publications: [
+ {
+ entryLinks: [{url: 'http://self.link'}],
+ openAccessLinks: [{url: 'http://webpub.link'}],
+ title: 'my title',
+ authors: [
+ {
+ name: 'hello',
+ },
+ ],
+ },
+ ],
+ };
+ const webpub: Partial = {
+ title: 'my title',
+ authors: [
+ 'hello',
+ 'world',
+ ],
+ };
+
+ const data = await expressMocked(body, headers, pullData, feed, webpub);
+ console.log(JSON.stringify(data, null, 4));
+
+ data.prompt.firstSimple.speech.should.to.be.eq('You are listening to the 10 chapter of my title, hello, which you can now pick up.\n' +
+ 'You are also reading 3 other recent books, which you can choose from.\n' +
+ 'And, of course, \n' +
+ 'You can consult your bookshelf, or browse our collections. You can also search for a book by saying search followed by a book title or an author.\n' +
+ 'Resume reading. Recent books. Bookshelf. Collections. Search for a specific book: what do you want to do?\n');
+ });
+
+ it('repeat', async () => {
+ body.handler.name = 'home_user__intent__repeat';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+ model.data.store.session.scene.home_user.state.should.to.be.eq('REPEAT');
+
+ data.scene.next.name.should.to.be.eq('home_user');
+ });
+ it('search', async () => {
+ body.handler.name = 'home_user__intent__search';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.scene.next.name.should.to.be.eq('search');
+ });
+ it('search with query', async () => {
+ body.handler.name = 'home_user__intent__search';
+ body.scene.name = scene;
+ body.intent.params = {
+ query: {
+ original: 'my query',
+ resolved: 'my query',
+ },
+ };
+
+ // parse query and state = FINISH
+
+ const pullData = parsedDataClone();
+
+ pullData.session.scene.search.query = '';
+ pullData.session.scene.search.state = 'DEFAULT';
+
+ const model = await storageModelMocked(pullData);
+
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ model.data.store.session.scene.search.state.should.to.be.eq('FINISH');
+ model.data.store.session.scene.search.query.should.to.be.eq('my query');
+ data.scene.next.name.should.to.be.eq('search');
+ });
+
+ it('recents book', async () => {
+ body.handler.name = 'home_user__intent__recent_books';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.player.current.index = 9;
+ pullData.player.current.url = 'https://my.url';
+ pullData.player.current.time = 0;
+
+ pullData.player.history = {
+ // @ts-ignore
+ 1: {index: 0, time: 0, date: new Date()},
+ 2: {index: 0, time: 0, date: new Date()},
+ 3: {index: 0, time: 0, date: new Date()},
+ 4: {index: 0, time: 0, date: new Date()},
+ };
+ // pullData.player.history.set("1", {index: 0, time: 0, date: new Date()});
+ // pullData.player.history.set("2", {index: 0, time: 0, date: new Date()});
+ // pullData.player.history.set("3", {index: 0, time: 0, date: new Date()});
+ // pullData.player.history.set("4", {index: 0, time: 0, date: new Date()});
+ const model = await storageModelMocked(pullData);
+
+ const webpub: Partial = {
+ title: 'my title',
+ authors: [
+ 'hello',
+ 'world',
+ ],
+ };
+
+ const data = await expressMocked(body, headers, undefined, undefined, webpub, model.data);
+
+ data.scene.next.name.should.to.be.eq('selection');
+ model.data.store.session.scene.selection.url.should.to.be.eq('data://["1","2","3"]');
+ model.data.store.session.scene.selection.kind.should.to.be.eq('PUBLICATION');
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING');
+ });
+
+ it('current book available', async () => {
+ body.handler.name = 'home_user__intent__current_book';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.player.current.index = 9;
+ pullData.player.current.url = 'https://my.url';
+ pullData.player.current.time = 0;
+
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ data.scene.next.name.should.to.be.eq('player_prequel');
+ });
+
+ it('current book not available', async () => {
+ body.handler.name = 'home_user__intent__current_book';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ data.scene.next.name.should.to.be.eq('home_user');
+ data.prompt.firstSimple.speech.should.to.be.eq('Uh Oh! Nothing to read here quite yet.\n');
+ });
+
+ it('browse collections', async () => {
+ body.handler.name = 'home_user__intent__collections';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.scene.next.name.should.to.be.eq('collections');
+ });
+
+ it('bookshelf', async () => {
+ body.handler.name = 'home_user__intent__bookshelf';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ model.data.store.session.scene.selection.from.should.to.be.eq('home_user__intent__bookshelf');
+ model.data.store.session.scene.selection.kind.should.to.be.eq('PUBLICATION');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0);
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(0);
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING');
+ model.data.store.session.scene.selection.url.should.to.be.eq(BOOKSHELF_URL);
+
+ data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ // const help = `You can search for a specific book by title or author, browse our collections or check your bookshelf to start reading one of your preselected books.\nWhat would you like to do?\n`;
+
+ it('help', async () => {
+ body.handler.name = 'home_user__intent__help';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('home_user');
+ });
+
+ it('fallback 1 and 2', async () => {
+ body.handler.name = 'home_user__intent__help';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('home_user');
+ });
+
+ it('fallback 3', async () => {
+ body.handler.name = 'home_user__intent__fallback_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_user');
+ });
+
+ it('silence 1 and 2', async () => {
+ body.handler.name = 'home_user__intent__silence';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('home_user');
+ });
+
+ it('silence 3', async () => {
+ body.handler.name = 'home_user__intent__fallback_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_user');
+ });
+ });
+});
diff --git a/webhooks/functions/src/sdk/info.test.ts b/webhooks/functions/src/sdk/info.test.ts
new file mode 100644
index 00000000..60e28abf
--- /dev/null
+++ b/webhooks/functions/src/sdk/info.test.ts
@@ -0,0 +1,161 @@
+import {expressMocked, shell} from '../test/utils.test';
+import * as chai from 'chai';
+// import * as sinon from 'sinon';
+import {headers, body} from './conv.test';
+
+
+chai.should();
+
+const scene = 'info';
+
+const yaml = `intentEvents:
+- handler:
+ webhookHandler: info__intent__yes
+ intent: "yes"
+ transitionToScene: actions.scene.END_CONVERSATION
+- handler:
+ webhookHandler: info__intent__help
+ intent: help
+- handler:
+ webhookHandler: info__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: info__intent__yes
+ intent: membership
+ transitionToScene: actions.scene.END_CONVERSATION
+- handler:
+ webhookHandler: info__intent__no
+ intent: "no"
+- handler:
+ webhookHandler: info__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: info__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: info__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: info__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: info__intent__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: info__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: info__on_enter
+`;
+
+describe(scene + ' handler', () => {
+ describe('sdk', () => {
+ it('check main scene', (done) => {
+ shell(`cat custom/scenes/${scene}.yaml`, (stdout) => {
+ stdout.should.to.be.eq(yaml);
+ }, done);
+ });
+ });
+
+ describe('app', () => {
+ it('on enter', async () => {
+ body.handler.name = 'info__on_enter';
+ body.scene.name = scene;
+
+ // const message = `EDRLAB about text. Would you like to find out more about EDRLAB membership, or would you prefer to exit this skill?\n`;
+
+ await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(message);
+ });
+ it('yes or membership', async () => {
+ body.handler.name = 'info__intent__yes';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ const message = `Signing up is easy, you can head on over to the EDRLAB online platform at celalibrary dot ca. Keep the name of your local library and your library or SQLA number handy, that's all you'll need. You can also ask for help at your local library. As soon as your membership is activated, you can come back to start using the EDRLAB library via Google Assistant, by saying Hey Google, launch Accessible reading Canada.\n`;
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+
+ data.scene.next.name.should.to.be.eq('actions.scene.END_CONVERSATION');
+ });
+
+ it('no', async () => {
+ body.handler.name = 'info__intent__yes';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(message);
+
+ data.scene.next.name.should.to.be.eq('actions.scene.END_CONVERSATION');
+ });
+
+ it('repeat', async () => {
+ body.handler.name = 'info__intent__repeat';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.scene.next.name.should.to.be.eq('info');
+ });
+
+ // const help = `If you'd like to learn more about EDRLAB membership - you can ask me by saying 'membership', or simply say 'stop' to exit this skill. If you have any other questions, we recommend reaching out to your local library for support. I'm listening?\n`;
+
+ it('help', async () => {
+ body.handler.name = 'info__intent__help';
+ body.scene.name = scene;
+
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('info');
+ });
+
+ it('fallback 1 and 2', async () => {
+ body.handler.name = 'info__intent__help';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('info');
+ });
+
+ it('fallback 3', async () => {
+ body.handler.name = 'info__intent__fallback_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+
+ it('silence 1 and 2', async () => {
+ body.handler.name = 'info__intent__silence';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ // data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ data.scene.next.name.should.to.be.eq('info');
+ });
+
+ it('silence 3', async () => {
+ body.handler.name = 'info__intent__fallback_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+ });
+});
diff --git a/webhooks/functions/src/sdk/main.test.ts b/webhooks/functions/src/sdk/main.test.ts
new file mode 100644
index 00000000..ebaa610c
--- /dev/null
+++ b/webhooks/functions/src/sdk/main.test.ts
@@ -0,0 +1,71 @@
+import {expressMocked, shell, storageModelMocked} from '../test/utils.test';
+import * as chai from 'chai';
+// import * as sinon from 'sinon';
+import {headers, body} from './conv.test';
+import {parsedDataClone} from '../model/data.model.test';
+
+chai.should();
+
+describe('main handler', () => {
+ describe('sdk', () => {
+ it('check main scene', (done) => {
+ shell('cat custom/global/actions.intent.MAIN.yaml | grep "webhookHandler: main"', (stdout) => {
+ stdout.should.to.be.eq(' webhookHandler: main\n');
+ }, done);
+ });
+ });
+
+ describe('app', () => {
+ it('main new user unspecified', async () => {
+ body.user.accountLinkingStatus = 'ACCOUNT_LINKING_STATUS_UNSPECIFIED';
+ const data = await expressMocked(body, headers);
+
+ const welcomeNewUser = 'Welcome to EDRLAB Library, where you can easily access your favorite audio books.\n';
+
+ data.prompt.firstSimple.speech.should.to.be.eq(welcomeNewUser);
+
+ data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+
+ it('main new user not linked', async () => {
+ body.user.accountLinkingStatus = 'NO_LINKED';
+ const data = await expressMocked(body, headers);
+
+ const welcomeNewUser = 'Welcome to EDRLAB Library, where you can easily access your favorite audio books.\n';
+
+ data.prompt.firstSimple.speech.should.to.be.eq(welcomeNewUser);
+
+ data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+
+ it('main new user linked', async () => {
+ body.user.accountLinkingStatus = 'LINKED';
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ const welcomeUser = 'Welcome back to your EDRLAB Library! Remember, you can ask for help at any time.\n';
+
+ data.prompt.firstSimple.speech.should.to.be.eq(welcomeUser);
+
+ model.data.store.user.authentication.should.to.be.eq('NEWLY_LINKED');
+ data.scene.next.name.should.to.be.eq('home_user');
+ });
+ it('main user linked', async () => {
+ body.user.accountLinkingStatus = 'LINKED';
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ model.data.store.user.authentication = 'NEWLY_LINKED';
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ const welcomeUser = 'Welcome back to your EDRLAB Library! Remember, you can ask for help at any time.\n';
+
+ data.prompt.firstSimple.speech.should.to.be.eq(welcomeUser);
+
+ model.data.store.user.authentication.should.to.be.eq('LINKED');
+ data.scene.next.name.should.to.be.eq('home_user');
+ });
+ });
+});
diff --git a/webhooks/functions/src/sdk/player.test.ts b/webhooks/functions/src/sdk/player.test.ts
new file mode 100644
index 00000000..bfc40655
--- /dev/null
+++ b/webhooks/functions/src/sdk/player.test.ts
@@ -0,0 +1,93 @@
+import {expressMocked, shell, storageModelMocked} from '../test/utils.test';
+import * as chai from 'chai';
+// import * as sinon from 'sinon';
+import {headers, body} from './conv.test';
+import {parsedDataClone} from '../model/data.model.test';
+
+/* eslint-disable no-unused-vars */
+
+chai.should();
+
+const scene = 'player';
+
+const yaml = `intentEvents:
+- handler:
+ webhookHandler: player__intent__media_status_finished
+ intent: actions.intent.MEDIA_STATUS_FINISHED
+- handler:
+ webhookHandler: player__intent__media_status_paused
+ intent: actions.intent.MEDIA_STATUS_PAUSED
+- handler:
+ webhookHandler: player__intent__media_status_stopped
+ intent: actions.intent.MEDIA_STATUS_STOPPED
+- handler:
+ webhookHandler: player__intent__media_status_failed
+ intent: actions.intent.MEDIA_STATUS_FAILED
+onEnter:
+ webhookHandler: player__on_enter
+`;
+
+describe(scene + ' handler', () => {
+ describe('sdk', () => {
+ it('check main scene', (done) => {
+ shell(`cat custom/scenes/${scene}.yaml`, (stdout) => {
+ stdout.should.to.be.eq(yaml);
+ }, done);
+ });
+ });
+
+ describe('app', () => {
+ it('on enter with no playing url', async () => {
+ body.handler.name = 'player__on_enter';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ const message = 'Oops, something went wrong. I will exit the app. Feel free to reopen it as soon as possible.';
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+
+ // catch trap
+
+ data.scene.next.name.should.to.be.eq('actions.scene.END_CONVERSATION');
+ });
+ it('media status finished', async () => {
+ body.handler.name = 'player__intent__media_status_finished';
+ body.scene.name = scene;
+ body.context.media.index = 2;
+ body.context.media.progress = '40s';
+
+ const pullData = parsedDataClone();
+ pullData.player.current.index = 0;
+ pullData.player.current.time = 0;
+ pullData.player.current.url = 'http://my.url';
+ const model = await storageModelMocked(pullData);
+
+ const webpub = undefined;
+
+ const data = await expressMocked(body, headers, undefined, undefined, webpub, model.data);
+
+ model.data.store.player.current.index = 2;
+ model.data.store.player.current.time?.should.to.be.eq(0);
+ model.data.store.player.current.url?.should.to.be.eq('http://my.url');
+ });
+ it('media status stopped', async () => {
+ body.handler.name = 'player__intent__media_status_stopped';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+ });
+ it('media status paused', async () => {
+ body.handler.name = 'player__intent__media_status_stopped';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+ });
+ it('media status failed', async () => {
+ body.handler.name = 'player__intent__media_status_failed';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+ });
+ });
+});
diff --git a/webhooks/functions/src/sdk/player_prequel.test.ts b/webhooks/functions/src/sdk/player_prequel.test.ts
new file mode 100644
index 00000000..19f5dcb3
--- /dev/null
+++ b/webhooks/functions/src/sdk/player_prequel.test.ts
@@ -0,0 +1,373 @@
+import {expressMocked, shell, storageModelMocked} from '../test/utils.test';
+import * as chai from 'chai';
+// import * as sinon from 'sinon';
+import {headers, body} from './conv.test';
+import {parsedDataClone} from '../model/data.model.test';
+import {IWebPubView} from 'opds-fetcher-parser/build/src/interface/webpub';
+
+
+chai.should();
+
+const scene = 'player_prequel';
+
+const yaml = `intentEvents:
+- handler:
+ webhookHandler: player_prequel__intent__help
+ intent: help
+- handler:
+ webhookHandler: player_prequel__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: player_prequel__intent__player_prequel_back
+ intent: player_prequel_back
+- handler:
+ webhookHandler: player_prequel__intent__player_prequel_resume
+ intent: player_prequel_resume
+- handler:
+ webhookHandler: player_prequel__intent__player_prequel_start
+ intent: player_prequel_start
+- handler:
+ webhookHandler: player_prequel__intent__player_prequel_summary
+ intent: player_prequel_summary
+- handler:
+ webhookHandler: player_prequel__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: player_prequel__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: player_prequel__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: player_prequel__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: player_prequel__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: player_prequel__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: player_prequel__on_enter
+`;
+
+describe(scene + ' handler', () => {
+ describe('sdk', () => {
+ it('check main scene', (done) => {
+ shell(`cat custom/scenes/${scene}.yaml`, (stdout) => {
+ stdout.should.to.be.eq(yaml);
+ }, done);
+ });
+ });
+
+ describe('app', () => {
+ it('on enter - bad url', async () => {
+ body.handler.name = 'player_prequel__on_enter';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+
+ const message = `Oops, something went wrong. I will exit the app. Feel free to reopen it as soon as possible.`;
+
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ data.scene.next.name.should.to.be.eq('actions.scene.END_CONVERSATION');
+ });
+ it('on enter - home_user_current_book', async () => {
+ body.handler.name = 'player_prequel__on_enter';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.player.current.index = 0;
+ pullData.player.current.time = 0;
+ pullData.player.current.url = 'http://my.url';
+
+ const feed: Partial = {
+ publications: [
+ {
+ entryLinks: [{url: 'http://self.link'}],
+ openAccessLinks: [{url: 'http://webpub.link'}],
+ title: 'my title',
+ },
+ ],
+ };
+
+ const webpub: Partial = {
+ title: 'my title',
+ authors: [
+ 'hello',
+ 'world',
+ ],
+ };
+
+ pullData.session.scene.player_prequel.from = 'home_user__intent__current_book';
+
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, feed, webpub, model.data);
+
+ data.scene.next.name.should.to.be.eq('player');
+
+ model.data.store.session.scene.player_prequel.from.should.to.be.eq('main');
+ model.data.store.session.scene.player_prequel.player.should.to.be.deep.eq({}); ;
+ model.data.store.player.current.should.to.be.deep.eq(pullData.player.current);
+ });
+ it('on enter - from selection and playing', async () => {
+ body.handler.name = 'player_prequel__on_enter';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.session.scene.player_prequel.player.index = 2;
+ pullData.session.scene.player_prequel.player.time = 330;
+ pullData.session.scene.player_prequel.player.url = 'https://my.url';
+
+ pullData.session.scene.player_prequel.from = 'selection__on_enter';
+ const feed: Partial = {
+ publications: [
+ {
+ entryLinks: [{url: 'http://self.link'}],
+ openAccessLinks: [{url: 'http://webpub.link'}],
+ title: 'my title',
+ },
+ ],
+ };
+ const webpub: Partial = {
+ title: 'my title',
+ authors: [
+ 'hello',
+ 'world',
+ ],
+ };
+
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, feed, webpub, model.data);
+
+ (typeof model.data.store.player.current.index).should.be.eq('undefined');
+ (typeof model.data.store.player.current.time).should.be.eq('undefined');
+ (typeof model.data.store.player.current.url).should.be.eq('undefined');
+
+ model.data.store.session.scene.player_prequel.player.index?.should.be.eq(2);
+ model.data.store.session.scene.player_prequel.player.time?.should.be.eq(330);
+ model.data.store.session.scene.player_prequel.player.url?.should.be.eq('https://my.url');
+ model.data.store.session.scene.player_prequel.from.should.be.eq('selection__on_enter');
+
+ data.prompt.firstSimple.speech.should.to.be.eq('You\'ve chosen my title, that you have already started.\n' +
+ 'Do you want to resume reading, listen the summary or come back to the list?\n');
+ });
+ it('on enter - from selection and no playing', async () => {
+ body.handler.name = 'player_prequel__on_enter';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.session.scene.player_prequel.player.index = 0;
+ pullData.session.scene.player_prequel.player.time = 0;
+ pullData.session.scene.player_prequel.player.url = 'https://my.url';
+
+ pullData.session.scene.player_prequel.from = 'selection__on_enter';
+
+
+ const feed: Partial = {
+ publications: [
+ {
+ entryLinks: [{url: 'http://self.link'}],
+ openAccessLinks: [{url: 'http://webpub.link'}],
+ title: 'my title',
+ },
+ ],
+ };
+ const webpub: Partial = {
+ title: 'my title',
+ authors: [
+ 'hello',
+ 'world',
+ ],
+ };
+
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, feed, webpub, model.data);
+
+ (typeof model.data.store.player.current.index).should.be.eq('undefined');
+ (typeof model.data.store.player.current.time).should.be.eq('undefined');
+ (typeof model.data.store.player.current.url).should.be.eq('undefined');
+
+ // @ts-ignore
+ model.data.store.session.scene.player_prequel.player.index.should.be.eq(0);
+ // @ts-ignore
+ model.data.store.session.scene.player_prequel.player.time.should.be.eq(0);
+ // @ts-ignore
+ model.data.store.session.scene.player_prequel.player.url.should.be.eq('https://my.url');
+ model.data.store.session.scene.player_prequel.from.should.be.eq('selection__on_enter');
+
+ data.prompt.firstSimple.speech.should.to.be.eq('You\'ve chosen my title.\n' +
+ 'Do you want to start reading, listen the summary or come back to the list?\n');
+ });
+
+ it('back', async () => {
+ body.handler.name = 'player_prequel__intent__player_prequel_back';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.session.scene.player_prequel.player.index = 0;
+ pullData.session.scene.player_prequel.player.time = 0;
+ pullData.session.scene.player_prequel.player.url = 'https://my.url';
+
+ pullData.session.scene.player_prequel.from = 'selection__on_enter';
+ const feed: Partial = {
+ publications: [
+ {
+ entryLinks: [{url: 'http://self.link'}],
+ openAccessLinks: [{url: 'http://webpub.link'}],
+ title: 'my title',
+ },
+ ],
+ };
+ const webpub: Partial = {
+ title: 'my title',
+ authors: [
+ 'hello',
+ 'world',
+ ],
+ };
+
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, feed, webpub, model.data);
+
+ (typeof model.data.store.session.scene.player_prequel.player.index).should.be.eq('undefined');
+ (typeof model.data.store.session.scene.player_prequel.player.time).should.be.eq('undefined');
+ (typeof model.data.store.session.scene.player_prequel.player.url).should.be.eq('undefined');
+ model.data.store.session.scene.player_prequel.from.should.be.eq('selection__on_enter');
+
+ data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('start', async () => {
+ body.handler.name = 'player_prequel__intent__player_prequel_start';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.session.scene.player_prequel.player.index = 0;
+ pullData.session.scene.player_prequel.player.time = 0;
+ pullData.session.scene.player_prequel.player.url = 'https://my.url';
+
+ pullData.session.scene.player_prequel.from = 'selection__on_enter';
+ const feed: Partial = {
+ publications: [
+ {
+ entryLinks: [{url: 'http://self.link'}],
+ openAccessLinks: [{url: 'http://webpub.link'}],
+ title: 'my title',
+
+ },
+ ],
+ };
+ const webpub: Partial = {
+ title: 'my title',
+ authors: [
+ 'hello',
+ 'world',
+ ],
+ };
+
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, feed, webpub, model.data);
+
+ (typeof model.data.store.session.scene.player_prequel.player.index).should.be.eq('undefined');
+ (typeof model.data.store.session.scene.player_prequel.player.time).should.be.eq('undefined');
+ (typeof model.data.store.session.scene.player_prequel.player.url).should.be.eq('undefined');
+ model.data.store.session.scene.player_prequel.from.should.be.eq('selection__on_enter');
+
+ // @ts-ignore
+ model.data.store.player.current.index.should.be.eq(0);
+ // @ts-ignore
+ model.data.store.player.current.time.should.be.eq(0);
+ // @ts-ignore
+ model.data.store.player.current.url.should.be.eq('https://my.url');
+
+ data.scene.next.name.should.to.be.eq('player');
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Great choice! Before we start, let me remind you how this reader works. You can put your read on hold at any time by saying \'Hey Google, Pause\'. \'Hey Google, Resume\' will let you pick up your reading where you last left it. You can also navigate between chapters by saying \'Hey Google, next\' or \'Hey Google, previous\' at any time.\n' +
+ 'Let\'s start reading my title.\n');
+ });
+ it('resume', async () => {
+ body.handler.name = 'player_prequel__intent__player_prequel_start';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.session.scene.player_prequel.player.index = 234;
+ pullData.session.scene.player_prequel.player.time = 435;
+ pullData.session.scene.player_prequel.player.url = 'https://my.url';
+
+ pullData.session.scene.player_prequel.from = 'selection__on_enter';
+ const feed: Partial = {
+ publications: [
+ {
+ entryLinks: [{url: 'http://self.link'}],
+ openAccessLinks: [{url: 'http://webpub.link'}],
+ title: 'my title',
+ },
+ ],
+ };
+ const webpub: Partial = {
+ title: 'my title',
+ authors: [
+ 'hello',
+ 'world',
+ ],
+ };
+
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, feed, webpub, model.data);
+
+ (typeof model.data.store.session.scene.player_prequel.player.index).should.be.eq('undefined');
+ (typeof model.data.store.session.scene.player_prequel.player.time).should.be.eq('undefined');
+ (typeof model.data.store.session.scene.player_prequel.player.url).should.be.eq('undefined');
+ model.data.store.session.scene.player_prequel.from.should.be.eq('selection__on_enter');
+
+ // @ts-ignore
+ model.data.store.player.current.index.should.be.eq(234);
+ // @ts-ignore
+ model.data.store.player.current.time.should.be.eq(435);
+ // @ts-ignore
+ model.data.store.player.current.url.should.be.eq('https://my.url');
+
+ data.scene.next.name.should.to.be.eq('player');
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Great choice! Before we start, let me remind you how this reader works. You can put your read on hold at any time by saying \'Hey Google, Pause\'. \'Hey Google, Resume\' will let you pick up your reading where you last left it. You can also navigate between chapters by saying \'Hey Google, next\' or \'Hey Google, previous\' at any time.\n' +
+ 'Let\'s continue reading my title.\n');
+ });
+ it('summary', async () => {
+ body.handler.name = 'player_prequel__intent__player_prequel_summary';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.session.scene.player_prequel.player.index = 234;
+ pullData.session.scene.player_prequel.player.time = 435;
+ pullData.session.scene.player_prequel.player.url = 'https://my.url';
+
+ pullData.session.scene.player_prequel.from = 'selection__on_enter';
+ const feed: Partial = {
+ publications: [
+ {
+ entryLinks: [{url: 'http://self.link'}],
+ openAccessLinks: [{url: 'http://webpub.link'}],
+ description: 'this is the world in feed',
+ },
+ ],
+ };
+ const webpub: Partial = {
+ title: 'my title',
+ authors: [
+ 'hello',
+ 'world',
+ ],
+ description: 'this is the world',
+ };
+
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, feed, webpub, model.data);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Here is the summary: this is the world in feed.\nDo you want to start reading or go back to the list?\n');
+ });
+ });
+});
diff --git a/webhooks/functions/src/sdk/search.test.ts b/webhooks/functions/src/sdk/search.test.ts
new file mode 100644
index 00000000..a3da91b9
--- /dev/null
+++ b/webhooks/functions/src/sdk/search.test.ts
@@ -0,0 +1,161 @@
+import {expressMocked, shell, storageModelMocked} from '../test/utils.test';
+import * as chai from 'chai';
+// import * as sinon from 'sinon';
+import {headers, body} from './conv.test';
+import {parsedDataClone} from '../model/data.model.test';
+import {SEARCH_URL_FN} from '../constants';
+
+
+chai.should();
+
+const scene = 'search';
+
+const yaml = `intentEvents:
+- handler:
+ webhookHandler: search__intent__search_query
+ intent: search_query
+- handler:
+ webhookHandler: search__intent__search
+ intent: search
+onEnter:
+ webhookHandler: search__on_enter
+`;
+
+describe(scene + ' handler', () => {
+ describe('sdk', () => {
+ it('check main scene', (done) => {
+ shell(`cat custom/scenes/${scene}.yaml`, (stdout) => {
+ stdout.should.to.be.eq(yaml);
+ }, done);
+ });
+ });
+
+ describe('app', () => {
+ it('on enter default state', async () => {
+ body.handler.name = 'search__on_enter';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+
+ pullData.session.scene.search.query = '';
+ pullData.session.scene.search.state = 'DEFAULT';
+
+ const message = `Oops, something went wrong. I will exit the app. Feel free to reopen it as soon as possible.`;
+
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ data.scene.next.name.should.to.be.eq('actions.scene.END_CONVERSATION');
+ });
+ it('on enter no query available and running', async () => {
+ body.handler.name = 'search__on_enter';
+ body.scene.name = scene;
+
+ const message = `What book or author are you looking for ?\n`;
+
+ const pullData = parsedDataClone();
+
+ pullData.session.scene.search.query = '';
+ pullData.session.scene.search.state = 'RUNNING';
+
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ });
+ it('on enter no query available and running', async () => {
+ body.handler.name = 'search__on_enter';
+ body.scene.name = scene;
+
+ const message = `In the meanwhile, is there another title or author you'd like to search for?\n`;
+
+ const pullData = parsedDataClone();
+
+ pullData.session.scene.search.query = '';
+ pullData.session.scene.search.state = 'RUNNING';
+ pullData.session.scene.search.from = 'selection__on_enter';
+
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ model.data.store.session.scene.search.from.should.to.be.eq('main');
+ });
+ it('on enter query and finish state', async () => {
+ body.handler.name = 'search__on_enter';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+
+ pullData.session.scene.search.query = 'my query';
+ pullData.session.scene.search.state = 'FINISH';
+
+ const model = await storageModelMocked(pullData);
+
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ model.data.store.session.scene.selection.from.should.to.be.eq('search__on_enter');
+ model.data.store.session.scene.selection.kind.should.to.be.eq('PUBLICATION');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0);
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(0);
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING');
+ model.data.store.session.scene.selection.url.should.to.be.eq(SEARCH_URL_FN('my%20query')); // @TODO check url encoding
+
+ // request url with query
+ // and set nextScene to selections
+
+ data.scene.next.name.should.to.be.eq('selection');
+ });
+ it('search', async () => {
+ body.handler.name = 'search__intent__search';
+ body.scene.name = scene;
+ body.intent.params = {
+ query: {
+ original: 'my query',
+ resolved: 'my query',
+ },
+ };
+
+ // parse query and state = FINISH
+
+ const pullData = parsedDataClone();
+
+ pullData.session.scene.search.query = '';
+ pullData.session.scene.search.state = 'RUNNING';
+
+ const model = await storageModelMocked(pullData);
+
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ model.data.store.session.scene.search.state.should.to.be.eq('FINISH');
+ model.data.store.session.scene.search.query.should.to.be.eq('my query');
+ data.scene.next.name.should.to.be.eq('search');
+ });
+ it('query search', async () => {
+ body.handler.name = 'search__intent__search_query';
+ body.scene.name = scene;
+ body.intent.params = {
+ query: {
+ original: 'my query',
+ resolved: 'my query',
+ },
+ };
+
+ // parse query and state = FINISH
+
+ const pullData = parsedDataClone();
+
+ pullData.session.scene.search.query = '';
+ pullData.session.scene.search.state = 'RUNNING';
+
+ const model = await storageModelMocked(pullData);
+
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ model.data.store.session.scene.search.state.should.to.be.eq('FINISH');
+ model.data.store.session.scene.search.query.should.to.be.eq('my query');
+ data.scene.next.name.should.to.be.eq('search');
+ });
+ });
+});
diff --git a/webhooks/functions/src/sdk/selection.test.ts b/webhooks/functions/src/sdk/selection.test.ts
new file mode 100644
index 00000000..7e8363b2
--- /dev/null
+++ b/webhooks/functions/src/sdk/selection.test.ts
@@ -0,0 +1,1125 @@
+import {expressMocked, shell, storageModelMocked} from '../test/utils.test';
+import * as chai from 'chai';
+// import * as sinon from 'sinon';
+import {headers, body} from './conv.test';
+import {parsedDataClone} from '../model/data.model.test';
+import {IOpdsResultView} from 'opds-fetcher-parser/build/src/interface/opds';
+import {IWebPubView} from 'opds-fetcher-parser/build/src/interface/webpub';
+
+chai.should();
+
+const scene = 'selection';
+
+const yaml = `intentEvents:
+- handler:
+ webhookHandler: selection__intent__selects_book
+ intent: selects_book
+- handler:
+ webhookHandler: selection__intent__repeat
+ intent: repeat
+- handler:
+ webhookHandler: selection__intent__another_one
+ intent: another_one
+- handler:
+ webhookHandler: selection__intent__help
+ intent: help
+- handler:
+ webhookHandler: selection__intent__fallback
+ intent: actions.intent.NO_MATCH_1
+- handler:
+ webhookHandler: selection__intent__fallback
+ intent: actions.intent.NO_MATCH_2
+- handler:
+ webhookHandler: selection__intent__fallback_end
+ intent: actions.intent.NO_MATCH_FINAL
+- handler:
+ webhookHandler: selection__intent__silence
+ intent: actions.intent.NO_INPUT_1
+- handler:
+ webhookHandler: selection__intent__silence
+ intent: actions.intent.NO_INPUT_2
+- handler:
+ webhookHandler: selection__intent__silence_end
+ intent: actions.intent.NO_INPUT_FINAL
+onEnter:
+ webhookHandler: selection__on_enter
+`;
+
+describe(scene + ' handler', () => {
+ describe('sdk', () => {
+ it('check main scene', (done) => {
+ shell(`cat custom/scenes/${scene}.yaml`, (stdout) => {
+ stdout.should.to.be.eq(yaml);
+ }, done);
+ });
+ });
+
+ const messageHelpers = (number: number, it: Array<[nb: number, title: string]>, nextPage = false) => {
+ const a = 'Pick one of these by requesting the corresponding number.\n' + (nextPage ? 'Or ask for the next set.\n' : '');
+ const b = it.reduce((pv, [nb, title]) => pv + `${nb}. ${title}\n`, '');
+ const c = 'Which number do you choose?\n';
+ return a + b + c;
+ };
+
+ const help = 'At this stage, you must choose a title among the proposed set, by mentioning its number, for example number 1. You can request other titles by using the Next or Previous commands.\n';
+
+ describe('app', () => {
+ it('on enter', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+
+
+ // TODO
+ // LOT of Code here because all messages will be in on-enter
+
+ // test si state === "running" sinon forward vers la bonne scene
+ // tant que state !=== 'finish' dire à l'utilisateur les resultats
+ // soit de groupes ou soit de publications puis demander le numéro
+ // lorsque le numéro est vérifier dans select book intent
+ // vérifier le numéro dans la state machine et afficher la proposition
+ // lorsque cela est la derniere page afficher la page en cours et dire un message
+ //
+ // ici ce trouve la machine a état de selection
+ // nécéssite surement d'étoffer les états .. au lieu de les morcelés
+
+ // state === running
+ // 1) check url
+ // 2) check page
+ // 3) if (last page) ->say
+ // 4) afficher resultat
+
+ // state === finish
+ // 1) check url
+ // 2) check page ((else an error happen (reset ? )))
+ // 3) routing table with from handler
+
+ // 1) state === running
+ // 2) vérifier url
+ // 3) vérifier page
+ // 4) afficher utilisateur
+ // 5) attendre numéro
+ // 6) checker ce numéro
+ // 7) afficher utilisateur
+ // 8) attendre num
+ // 9) check num
+ // 10) last page -> say user
+ // 11) afficher user
+ // 12) good choice user
+ // 13) machine finish
+ // 15) table de routage prochaine scene en fonction de sceneFrom
+
+ const message = `Oops, something went wrong. I will exit the app. Feel free to reopen it as soon as possible.`;
+
+ const pullData = parsedDataClone();
+
+ // DEFAULT : trigger an error
+ // pullData.session.scene.selection.state = 'DEFAULT';
+ const data = await expressMocked(body, headers, pullData);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+
+ // must redirect to home_user when the state machine not initialized
+ data.scene.next.name.should.to.be.eq('actions.scene.END_CONVERSATION');
+ });
+
+ it('on enter - state running - no url', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.session.scene.selection.state = 'RUNNING';
+ const data = await expressMocked(body, headers, pullData);
+
+ const message = `Oops, something went wrong. I will exit the app. Feel free to reopen it as soon as possible.`;
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ data.scene.next.name.should.to.be.eq('actions.scene.END_CONVERSATION');
+ });
+
+ const newFeed = (): Partial => ({
+ publications: [
+ {
+ openAccessLinks: [
+ {
+ url: 'http://pub.url',
+ },
+ ],
+ entryLinks: [
+ {
+ url: 'http://self.url',
+ },
+ ],
+ baseUrl: 'http://base.url',
+ title: 'first publication',
+ authors: [],
+ numberOfPages: 0,
+ },
+ {
+ openAccessLinks: [
+ {
+ url: 'http://pub.url',
+ },
+ ],
+ entryLinks: [
+ {
+ url: 'http://self.url',
+ },
+ ],
+ baseUrl: 'http://base.url',
+ title: 'second publication',
+ authors: [],
+ numberOfPages: 0,
+ },
+ ],
+ groups: [
+ {
+ selfLink: {
+ title: 'first group',
+ url: 'http://group.url',
+ },
+ },
+ {
+ selfLink: {
+ title: 'second group',
+ url: 'http://group.url',
+ },
+ },
+ // {
+ // selfLink: {
+ // title: 'third group',
+ // url: '',
+ // }
+ // },
+ ],
+ // @ts-ignore
+ links: {
+ next: [
+ {
+ url: 'http://next.link',
+ },
+ ],
+ },
+ });
+
+ const testStateRunningPublication = (n = false) => {
+ const pullData = parsedDataClone();
+ pullData.session.scene.selection.state = 'RUNNING';
+ pullData.session.scene.selection.url = 'http://my.url';
+ pullData.session.scene.selection.kind = 'PUBLICATION';
+
+ const feed: Partial = {
+ publications: [
+ {
+ entryLinks: [
+ {
+ url: 'http://webpub.url',
+ },
+ ],
+ openAccessLinks: [
+ {
+ url: 'http://pub.url',
+ },
+ ],
+ title: 'first publication',
+ baseUrl: '',
+ authors: [],
+ numberOfPages: 0,
+ },
+ {
+ entryLinks: [
+ {
+ url: 'http://webpub.url',
+ },
+ ],
+ openAccessLinks: [
+ {
+ url: 'http://pub.url',
+ },
+ ],
+ title: 'second publication',
+ baseUrl: '',
+ authors: [],
+ numberOfPages: 0,
+ },
+ {
+ entryLinks: [
+ {
+ url: 'http://webpub.url',
+ },
+ ],
+ openAccessLinks: [
+ {
+ url: 'http://pub.url',
+ },
+ ],
+ title: 'third publication',
+ baseUrl: '',
+ authors: [],
+ numberOfPages: 0,
+ },
+ ],
+ };
+ const message = messageHelpers(3, [
+ [1, 'first publication.'],
+ [2, 'second publication.'],
+ [3, 'third publication.'],
+ ], n);
+
+ console.log(message);
+
+
+ return {pullData, feed, message};
+ };
+ const testStateRunningGroup = (n = false) => {
+ const pullData = parsedDataClone();
+ pullData.session.scene.selection.state = 'RUNNING';
+ pullData.session.scene.selection.url = 'http://my.url';
+ pullData.session.scene.selection.kind = 'GROUP';
+
+ const feed: Partial = {
+ groups: [
+ {
+ selfLink: {
+ title: 'first group',
+ url: 'http://my.url',
+ },
+ },
+ {
+ selfLink: {
+ title: 'second group',
+ url: 'http://my.url',
+ },
+ },
+ {
+ selfLink: {
+ title: 'third group',
+ url: 'http://my.url',
+ },
+ },
+ ],
+ };
+ const message = messageHelpers(3, [
+ [1, 'first group.'],
+ [2, 'second group.'],
+ [3, 'third group.'],
+ ], n);
+
+ return {pullData, feed, message};
+ };
+
+ it('on enter - state running - publication empty', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+
+ let {pullData, feed, message} = testStateRunningPublication();
+ pullData.session.scene.selection.nextUrlCounter = 0;
+
+ // @ts-ignore
+ feed.publications = [];
+
+ message = 'Uh Oh! Nothing to read here quite yet. Not to worry though, we can fix that right away! Would you like to browse our collections? Or perhaps you\'d like to search for a specific book by author or book title?\n';
+
+ const data = await expressMocked(body, headers, pullData, feed);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ // data.scene.next.name.should.to.be.eq('selection');
+ });
+ it('on enter - state running - group empty', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+
+ let {pullData, feed, message} = testStateRunningGroup();
+ pullData.session.scene.selection.nextUrlCounter = 0;
+
+ // @ts-ignore
+ feed.groups = [];
+
+ message = 'Uh Oh! Nothing to read here quite yet. Not to worry though, we can fix that right away! Would you like to browse our collections? Or perhaps you\'d like to search for a specific book by author or book title?\n';
+
+ const data = await expressMocked(body, headers, pullData, feed);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ // data.scene.next.name.should.to.be.eq('selection');
+ });
+ it('on enter - state running - publication empty - from search', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+
+ let {pullData, feed, message} = testStateRunningPublication();
+ pullData.session.scene.selection.nextUrlCounter = 0;
+ pullData.session.scene.selection.from = 'search__on_enter';
+ const model = await storageModelMocked(pullData);
+
+ // @ts-ignore
+ feed.publications = [];
+
+ message = 'It seems like the book you are looking for is currently unavailable in the EDRLAB Library.\n';
+
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ model.data.store.session.scene.search.from.should.to.be.eq('selection__on_enter');
+ model.data.store.session.scene.search.query.should.to.be.eq('');
+ model.data.store.session.scene.search.state.should.to.be.eq('RUNNING');
+ data.scene.next.name.should.to.be.eq('home_user');
+ });
+
+ it('on enter - state running - publication list first page with no next link', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+
+ const {pullData, feed, message} = testStateRunningPublication();
+ pullData.session.scene.selection.nextUrlCounter = 0;
+
+ // @ts-ignore
+ feed.links = {};
+
+ const data = await expressMocked(body, headers, pullData, feed);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ // data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('on enter - state running - group list first page with no next link', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+
+ const {pullData, feed, message} = testStateRunningGroup();
+ const data = await expressMocked(body, headers, pullData, feed);
+ // @ts-ignore
+ feed.links = {};
+
+ // must say the first page
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ // data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('on enter - state running - publication list last page', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+
+ const {pullData, feed, message} = testStateRunningPublication();
+ pullData.session.scene.selection.nextUrlCounter = 3;
+ // @ts-ignore
+ feed.links = {};
+ const data = await expressMocked(body, headers, pullData, feed);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Here\'s the last available books.\n' + message);
+ // data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('on enter - state running - group list last page', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+
+ const {pullData, feed, message} = testStateRunningGroup();
+ pullData.session.scene.selection.nextUrlCounter = 3;
+ // @ts-ignore
+ feed.links = {};
+ const data = await expressMocked(body, headers, pullData, feed);
+
+ // must say the first page
+ data.prompt.firstSimple.speech.should.to.be.eq('Here\'s the last available groups.\n' + message);
+ // data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('on enter - state running - publication list page > 0', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+
+ const {pullData, feed, message} = testStateRunningPublication(true);
+ pullData.session.scene.selection.nextUrlCounter = 3;
+ // @ts-ignore
+ feed.links = {
+ next: [
+ {
+ url: 'http://my.url',
+ },
+ ],
+ };
+ const data = await expressMocked(body, headers, pullData, feed);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ // data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('on enter - state running - group list last page > 0', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+
+ const {pullData, feed, message} = testStateRunningGroup(true);
+ pullData.session.scene.selection.nextUrlCounter = 3;
+ // @ts-ignore
+ feed.links = {
+ next: [
+ {
+ url: 'http://my.url',
+ },
+ ],
+ };
+ const data = await expressMocked(body, headers, pullData, feed);
+
+ // must say the first page
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+ // data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('on enter - state running - publication list with next page - from bookshelf', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+
+ const {pullData, feed, message} = testStateRunningPublication(true);
+ pullData.session.scene.selection.nextUrlCounter = 0;
+ pullData.session.scene.selection.from = 'home_user__intent__bookshelf';
+ // @ts-ignore
+ feed.links = {
+ next: [
+ {
+ url: 'http://my.url',
+ },
+ ],
+ };
+ const data = await expressMocked(body, headers, pullData, feed);
+
+ const message2 = 'Here are the first 3 titles on your bookshelf:\n' + message + 'Or perhaps you\'d like to explore the other titles on your bookshelf?\n';
+
+ data.prompt.firstSimple.speech.should.to.be.eq(message2);
+ // data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('on enter - state running - recent books', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+
+ const {pullData, feed} = testStateRunningPublication();
+ pullData.session.scene.selection.nextUrlCounter = 0;
+ pullData.session.scene.selection.state = 'RUNNING';
+ pullData.session.scene.selection.kind = 'PUBLICATION';
+ pullData.session.scene.selection.url = 'data://["https://my.url","https://my.url","https://my.url"]';
+ pullData.session.scene.selection.from = 'home_user__intent__recent_books';
+
+ // @ts-ignore
+ feed.publications[0].title = 'my test title';
+
+ // USELESS NOW !
+ const webpub: Partial = {
+ title: 'my test title',
+ authors: ['author'],
+ };
+
+ const data = await expressMocked(body, headers, pullData, feed, webpub);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Pick one of these by requesting the corresponding number.\n' +
+ '1. my test title.\n' +
+ '2. my test title.\n' +
+ '3. my test title.\n' +
+ 'Which number do you choose?\n');
+ // data.scene.next.name.should.to.be.eq('selection');
+ });
+ it('on_enter - groups - state == DEFAULT should throw', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+ // body.intent.params = {
+ // number: {
+ // original: '3',
+ // resolved: 3,
+ // },
+ // };
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ model.data.store.session.scene.selection.kind = 'GROUP';
+ model.data.store.session.scene.selection.url = 'http://my.url';
+ model.data.store.session.scene.selection.nbChoice = 3;
+ const feed = newFeed();
+ feed.publications?.length.should.to.be.eq(2);
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ // THROWS !!
+
+ data.scene.next.name.should.to.be.eq('actions.scene.END_CONVERSATION');
+ model.data.store.session.scene.selection.state.should.to.be.eq('DEFAULT');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(3);
+ data.prompt.firstSimple.speech.should.to.be.eq('Oops, something went wrong. I will exit the app. Feel free to reopen it as soon as possible.');
+ });
+
+ it('on_enter - pub - state == DEFAULT should throw', async () => {
+ body.handler.name = 'selection__on_enter';
+ body.scene.name = scene;
+ // body.intent.params = {
+ // number: {
+ // original: '3',
+ // resolved: 3,
+ // },
+ // };
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ model.data.store.session.scene.selection.kind = 'PUBLICATION';
+ model.data.store.session.scene.selection.url = 'http://my.url';
+ model.data.store.session.scene.selection.nbChoice = 0;
+ const feed = newFeed();
+ feed.publications?.length.should.to.be.eq(2);
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ // THROWS !!
+
+ data.scene.next.name.should.to.be.eq('actions.scene.END_CONVERSATION');
+ model.data.store.session.scene.selection.state.should.to.be.eq('DEFAULT');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0);
+ data.prompt.firstSimple.speech.should.to.be.eq('Oops, something went wrong. I will exit the app. Feel free to reopen it as soon as possible.');
+ });
+
+
+ // @TODO
+ // complete the test from handler
+ // it('on enter - state running - group list last with next page - from collection', async () => {
+
+ // body.handler.name = 'selection__on_enter';
+ // body.scene.name = scene;
+
+ // const {pullData, feed, message} = testStateRunningGroup();
+ // pullData.session.scene.selection.nextUrlCounter = 3;
+ // // @ts-ignore
+ // feed.links = {
+ // next: [
+ // {
+ // url: "http://my.url"
+ // }
+ // ]
+ // };
+ // const data = await expressMocked(body, headers, pullData, feed);
+
+ // // must say the first page
+ // data.prompt.firstSimple.speech.should.to.be.eq(message);
+ // data.scene.next.name.should.to.be.eq('selection');
+
+ // });
+ it('select book - number 1', async () => {
+ body.handler.name = 'selection__intent__selects_book';
+ body.scene.name = scene;
+ body.intent.params = {
+ number: {
+ original: '1',
+ resolved: 1,
+ },
+ };
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ model.data.store.session.scene.selection.kind = 'PUBLICATION';
+ model.data.store.session.scene.selection.state = 'RUNNING';
+ model.data.store.session.scene.selection.url = 'http://my.url';
+ const feed = newFeed();
+ feed.publications?.length.should.to.be.eq(2);
+
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ data.scene.next.name.should.to.be.eq('player_prequel');
+ model.data.store.session.scene.selection.state.should.to.be.eq('FINISH');
+ model.data.store.session.scene.selection.url.should.to.be.eq('http://my.url');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(1);
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(0);
+ model.data.store.session.scene.selection.from.should.to.be.eq('main');
+ });
+ it('select book - number 2 ', async () => {
+ body.handler.name = 'selection__intent__selects_book';
+ body.scene.name = scene;
+ body.intent.params = {
+ number: {
+ original: '2',
+ resolved: 2,
+ },
+ };
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ model.data.store.session.scene.selection.kind = 'PUBLICATION';
+ model.data.store.session.scene.selection.state = 'RUNNING';
+ model.data.store.session.scene.selection.url = 'http://my.url';
+ const feed = newFeed();
+ feed.publications?.length.should.to.be.eq(2);
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ data.scene.next.name.should.to.be.eq('player_prequel');
+ model.data.store.session.scene.selection.state.should.to.be.eq('FINISH');
+ model.data.store.session.scene.selection.url.should.to.be.eq('http://my.url');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(2);
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(0);
+ model.data.store.session.scene.selection.from.should.to.be.eq('main');
+ });
+
+ it('select book - number 3 with only 2 pub available', async () => {
+ body.handler.name = 'selection__intent__selects_book';
+ body.scene.name = scene;
+ body.intent.params = {
+ number: {
+ original: '3',
+ resolved: 3,
+ },
+ };
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ model.data.store.session.scene.selection.kind = 'PUBLICATION';
+ model.data.store.session.scene.selection.state = 'RUNNING';
+ model.data.store.session.scene.selection.url = 'http://my.url';
+ const feed = newFeed();
+ feed.publications?.length.should.to.be.eq(2);
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ data.scene.next.name.should.to.be.eq('selection');
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0);
+ (typeof data.prompt.firstSimple).should.to.be.eq('undefined');
+ });
+
+ it('select book - state == DEFAULT should throw in on_enter instead of select_books', async () => {
+ body.handler.name = 'selection__intent__selects_book';
+ body.scene.name = scene;
+ body.intent.params = {
+ number: {
+ original: '3',
+ resolved: 3,
+ },
+ };
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ model.data.store.session.scene.selection.kind = 'PUBLICATION';
+ model.data.store.session.scene.selection.url = 'http://my.url';
+ const feed = newFeed();
+ feed.publications?.length.should.to.be.eq(2);
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ // THROWS !!
+
+ data.scene.next.name.should.to.be.eq('selection');
+ model.data.store.session.scene.selection.state.should.to.be.eq('DEFAULT');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0);
+ // data.prompt.firstSimple.speech.should.to.be.eq('Oops, something went wrong. I will exit the app. Feel free to reopen it as soon as possible.');
+ (typeof data.prompt.firstSimple).should.to.be.eq('undefined');
+ });
+
+ it('select book - number 10', async () => {
+ body.handler.name = 'selection__intent__selects_book';
+ body.scene.name = scene;
+ body.intent.params = {
+ number: {
+ original: '10',
+ resolved: 10,
+ },
+ };
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ model.data.store.session.scene.selection.url = 'http://my.url';
+ model.data.store.session.scene.selection.state = 'RUNNING';
+ model.data.store.session.scene.selection.kind = 'PUBLICATION';
+ const feed = newFeed();
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ data.scene.next.name.should.to.be.eq('selection');
+ // must be set in selection__on_enter not here : return all logics to on_enter
+ (typeof data.prompt.firstSimple).should.to.be.eq('undefined');
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING'); // equals to original state
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0); // reset
+ // or
+ // say the fallback message if type is incorrect
+ // need to check with google data
+ });
+ it('select book - group - number 1', async () => {
+ body.handler.name = 'selection__intent__selects_book';
+ body.scene.name = scene;
+ body.intent.params = {
+ number: {
+ original: '1',
+ resolved: 1,
+ },
+ };
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ model.data.store.session.scene.selection.kind = 'GROUP';
+ model.data.store.session.scene.selection.state = 'RUNNING';
+ model.data.store.session.scene.selection.url = 'http://my.url';
+ const feed = newFeed();
+ feed.publications?.length.should.to.be.eq(2);
+
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ data.scene.next.name.should.to.be.eq('selection');
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING');
+ model.data.store.session.scene.selection.url.should.to.be.eq('http://group.url');
+ model.data.store.session.scene.selection.kind.should.to.be.eq('PUBLICATION');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0);
+ });
+ it('select book - group - number 2', async () => {
+ body.handler.name = 'selection__intent__selects_book';
+ body.scene.name = scene;
+ body.intent.params = {
+ number: {
+ original: '2',
+ resolved: 2,
+ },
+ };
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ model.data.store.session.scene.selection.kind = 'GROUP';
+ model.data.store.session.scene.selection.state = 'RUNNING';
+ model.data.store.session.scene.selection.url = 'http://my.url';
+ const feed = newFeed();
+ feed.publications?.length.should.to.be.eq(2);
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ data.scene.next.name.should.to.be.eq('selection');
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING');
+ model.data.store.session.scene.selection.url.should.to.be.eq('http://group.url');
+ model.data.store.session.scene.selection.kind.should.to.be.eq('PUBLICATION');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0);
+ });
+
+ it('select book - group - number 3 with only 2 pub available', async () => {
+ body.handler.name = 'selection__intent__selects_book';
+ body.scene.name = scene;
+ body.intent.params = {
+ number: {
+ original: '3',
+ resolved: 3,
+ },
+ };
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ model.data.store.session.scene.selection.kind = 'GROUP';
+ model.data.store.session.scene.selection.state = 'RUNNING';
+ model.data.store.session.scene.selection.url = 'http://my.url';
+ const feed = newFeed();
+ feed.publications?.length.should.to.be.eq(2);
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ data.scene.next.name.should.to.be.eq('selection');
+
+ // must be set in selection__on_enter not here : return all logics to on_enter
+ (typeof data.prompt.firstSimple).should.to.be.eq('undefined');
+ // data.prompt.firstSimple.speech.should.to.be.eq('Pick one out of 3 titles by mentioning their numbers. You can also ask for \'another one\'.\n' +
+ // 'Pick one of these by saying their numbers.\n' +
+ // '1. first group.\n' +
+ // '2. second group.\n' +
+ // 'Which one would you like to start reading?\n');
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING'); // equals to original state
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0); // reset
+ });
+ it('select book - group - state == DEFAULT should throw on selection on_enter not in select_books', async () => {
+ body.handler.name = 'selection__intent__selects_book';
+ body.scene.name = scene;
+ body.intent.params = {
+ number: {
+ original: '3',
+ resolved: 3,
+ },
+ };
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ model.data.store.session.scene.selection.kind = 'GROUP';
+ model.data.store.session.scene.selection.url = 'http://my.url';
+ const feed = newFeed();
+ feed.publications?.length.should.to.be.eq(2);
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ // THROWS !!
+
+ data.scene.next.name.should.to.be.eq('selection');
+ model.data.store.session.scene.selection.state.should.to.be.eq('DEFAULT');
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0);
+ // data.prompt.firstSimple.speech.should.to.be.eq('Oops, something went wrong. I will exit the app. Feel free to reopen it as soon as possible.');
+ (typeof data.prompt.firstSimple).should.to.be.eq('undefined');
+ });
+
+ it('select book - group - number 10', async () => {
+ body.handler.name = 'selection__intent__selects_book';
+ body.scene.name = scene;
+ body.intent.params = {
+ number: {
+ original: '10',
+ resolved: 10,
+ },
+ };
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ model.data.store.session.scene.selection.url = 'http://my.url';
+ model.data.store.session.scene.selection.state = 'RUNNING';
+ model.data.store.session.scene.selection.kind = 'GROUP';
+ const feed = newFeed();
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ data.scene.next.name.should.to.be.eq('selection');
+ // must be set in selection__on_enter not here : return all logics to on_enter
+ (typeof data.prompt.firstSimple).should.to.be.eq('undefined');
+ // data.prompt.firstSimple.speech.should.to.be.eq('Pick one out of 3 titles by mentioning their numbers. You can also ask for \'another one\'.\n' +
+ // 'Pick one of these by saying their numbers.\n' +
+ // '1. first group.\n' +
+ // '2. second group.\n' +
+ // 'Which one would you like to start reading?\n');
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING'); // equals to original state
+ model.data.store.session.scene.selection.nbChoice.should.to.be.eq(0); // reset
+ // or
+ // say the fallback message if type is incorrect
+ // need to check with google data
+ });
+
+ it('another one with machine not running', async () => {
+ body.handler.name = 'selection__intent__another_one';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ const model = await storageModelMocked(pullData);
+ const data = await expressMocked(body, headers, undefined, undefined, undefined, model.data);
+
+ model.data.store.session.scene.selection.state.should.to.be.eq('DEFAULT'); // equals to original state
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(0); // stay at 0
+ model.data.store.session.scene.selection.url.should.to.be.eq(''); // reset
+
+ // catch trap
+ const message = 'Oops, something went wrong. I will exit the app. Feel free to reopen it as soon as possible.';
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+
+ data.scene.next.name.should.to.be.eq('actions.scene.END_CONVERSATION');
+ });
+
+ it('another one with machine running but next link url is good with no publication available', async () => {
+ body.handler.name = 'selection__intent__another_one';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.session.scene.selection.state = 'RUNNING';
+ pullData.session.scene.selection.url = 'http://my.url';
+ pullData.session.scene.selection.nextUrlCounter = 3;
+ pullData.session.scene.selection.kind = 'PUBLICATION';
+ const model = await storageModelMocked(pullData);
+ const feed: Partial = {};
+ // @ts-ignore
+ feed.links = {
+ next: [
+ {
+ url: 'http://my.url.next',
+ },
+ ],
+ };
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING'); // equals to original state
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(3); // +1
+ model.data.store.session.scene.selection.url.should.to.be.eq('http://my.url'); // reset
+
+ data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('another one with machine running but next link url is good with no groups available', async () => {
+ body.handler.name = 'selection__intent__another_one';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.session.scene.selection.state = 'RUNNING';
+ pullData.session.scene.selection.url = 'http://my.url';
+ pullData.session.scene.selection.nextUrlCounter = 3;
+ const model = await storageModelMocked(pullData);
+ const feed: Partial = {};
+ // @ts-ignore
+ feed.links = {
+ next: [
+ {
+ url: 'http://my.url.next',
+ },
+ ],
+ };
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING'); // equals to original state
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(3); // +1
+ model.data.store.session.scene.selection.url.should.to.be.eq('http://my.url'); // reset
+
+ data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('another one with machine running - publication', async () => {
+ body.handler.name = 'selection__intent__another_one';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.session.scene.selection.state = 'RUNNING';
+ pullData.session.scene.selection.url = 'http://my.url';
+ pullData.session.scene.selection.nextUrlCounter = 3;
+ pullData.session.scene.selection.kind = 'PUBLICATION';
+ const model = await storageModelMocked(pullData);
+ const feed: Partial = newFeed();
+ // @ts-ignore
+ feed.links = {
+ next: [
+ {
+ url: 'http://my.url.next',
+ },
+ ],
+ };
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING'); // equals to original state
+ model.data.store.session.scene.selection.url.should.to.be.eq('http://my.url.next'); // reset
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(4); // +1
+
+ data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('another one with machine running - group', async () => {
+ body.handler.name = 'selection__intent__another_one';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.session.scene.selection.state = 'RUNNING';
+ pullData.session.scene.selection.url = 'http://my.url';
+ pullData.session.scene.selection.nextUrlCounter = 3;
+ pullData.session.scene.selection.kind = 'GROUP';
+ const model = await storageModelMocked(pullData);
+ const feed: Partial = newFeed();
+ // @ts-ignore
+ feed.links = {
+ next: [
+ {
+ url: 'http://my.url.next',
+ },
+ ],
+ };
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING'); // equals to original state
+ model.data.store.session.scene.selection.url.should.to.be.eq('http://my.url.next'); // reset
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(4); // +1
+
+ data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('another one with machine running and no next link available - publication', async () => {
+ body.handler.name = 'selection__intent__another_one';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.session.scene.selection.state = 'RUNNING';
+ pullData.session.scene.selection.url = 'http://my.url';
+ pullData.session.scene.selection.nextUrlCounter = 3;
+ pullData.session.scene.selection.kind = 'PUBLICATION';
+ const model = await storageModelMocked(pullData);
+ const feed: Partial = newFeed();
+ // @ts-ignore
+ feed.links = {
+ next: [
+ {url: ''},
+ ],
+ };
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING'); // equals to original state
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(3); // 3
+ model.data.store.session.scene.selection.url.should.to.be.eq('http://my.url'); // reset
+
+ const message = 'no another results available.\n';
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+
+ data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('another one with machine running and no next link available - group', async () => {
+ body.handler.name = 'selection__intent__another_one';
+ body.scene.name = scene;
+
+ const pullData = parsedDataClone();
+ pullData.session.scene.selection.state = 'RUNNING';
+ pullData.session.scene.selection.url = 'http://my.url';
+ pullData.session.scene.selection.nextUrlCounter = 3;
+ pullData.session.scene.selection.kind = 'GROUP';
+ const model = await storageModelMocked(pullData);
+ const feed: Partial = newFeed();
+ // @ts-ignore
+ feed.links = {
+ next: [
+ {url: ''},
+ ],
+ };
+ const data = await expressMocked(body, headers, undefined, feed, undefined, model.data);
+
+ model.data.store.session.scene.selection.state.should.to.be.eq('RUNNING'); // equals to original state
+ model.data.store.session.scene.selection.nextUrlCounter.should.to.be.eq(3); // 3
+ model.data.store.session.scene.selection.url.should.to.be.eq('http://my.url'); // reset
+
+ const message = 'no another results available.\n';
+ data.prompt.firstSimple.speech.should.to.be.eq(message);
+
+ data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('repeat', async () => {
+ body.handler.name = 'selection__intent__repeat';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('help', async () => {
+ body.handler.name = 'selection__intent__help';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ // data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('fallback 1 and 2', async () => {
+ body.handler.name = 'selection__intent__fallback';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ // data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('fallback 3', async () => {
+ body.handler.name = 'selection__intent__fallback_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+
+ it('silence 1 and 2', async () => {
+ body.handler.name = 'selection__intent__silence';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq(help);
+
+ // data.scene.next.name.should.to.be.eq('selection');
+ });
+
+ it('silence 3', async () => {
+ body.handler.name = 'selection__intent__silence_end';
+ body.scene.name = scene;
+
+ const data = await expressMocked(body, headers);
+
+ data.prompt.firstSimple.speech.should.to.be.eq('Bye!\n');
+
+ // data.scene.next.name.should.to.be.eq('home_new_user');
+ });
+ });
+});
diff --git a/webhooks/functions/src/test/utils.test.ts b/webhooks/functions/src/test/utils.test.ts
new file mode 100644
index 00000000..552a851d
--- /dev/null
+++ b/webhooks/functions/src/test/utils.test.ts
@@ -0,0 +1,103 @@
+import * as sinon from 'sinon';
+import * as proxyquire from 'proxyquire';
+import {StorageModel} from '../model/storage.model';
+
+// class-transformer
+import 'reflect-metadata';
+import {exec} from 'child_process';
+import {JsonObject} from '@assistant/conversation';
+import {Assistant} from '../controller/Assistant';
+import {handler} from '../controller/handler';
+export const SDK_PATH = '../../sdk';
+
+import * as httpMocks from 'node-mocks-http';
+import {IStorage} from '../model/storage.interface';
+import {OpdsFetcher} from 'opds-fetcher-parser';
+import {IWebPubView} from 'opds-fetcher-parser/build/src/interface/webpub';
+import {IOpdsResultView} from 'opds-fetcher-parser/build/src/interface/opds';
+
+export const defaults = {
+ cwd: process.env.PWD + '/' + SDK_PATH,
+ env: process.env,
+};
+
+export const shell = (s: string, fn: (s: string) => void, done: (...a: any[]) => any) => {
+ exec(s, defaults, (err, stdout) => {
+ fn(stdout);
+
+ done(err);
+ });
+};
+
+export const storageModelMocked = async (pullData: IStorage | undefined = undefined) => {
+ const pull = sinon.stub().resolves(pullData);
+ const push = sinon.stub();
+
+ const {StorageModel: _storageModel} = proxyquire('../model/storage.model', {
+ './database': {
+ pull,
+ push,
+ },
+ }) as { StorageModel: StorageModel & { create: typeof StorageModel.create } };
+
+ const data = await _storageModel.create('test');
+
+ return {
+ // @ts-ignore
+ data,
+ pull,
+ push,
+ };
+};
+
+export const fetcherMocked = (feed?: Partial, webpub?: Partial) => {
+ const fetcher = sinon.createStubInstance(OpdsFetcher, {
+ // @ts-ignore
+ feedRequest: sinon.stub().returns(Promise.resolve(feed)),
+ // @ts-ignore
+ webpubRequest: sinon.stub().returns(Promise.resolve(webpub)),
+ });
+
+ return fetcher;
+};
+
+export const expressMocked = async (body: JsonObject, headers: JsonObject, pullData: IStorage | undefined = undefined, feed: Partial | undefined = undefined, webpub: Partial | undefined = undefined, data: StorageModel | undefined = undefined) => {
+ if (!data) {
+ console.log('NO DATA MOCKED YET');
+
+ ({data /* , push, pull*/} = await storageModelMocked(pullData));
+ } else {
+ console.log('DATA MOCKED');
+ }
+ const fetcher = fetcherMocked(feed, webpub) as unknown as OpdsFetcher;
+
+ const assistant = new Assistant({storageModel: data, fetcher});
+
+ handler(assistant);
+
+ const req = httpMocks.createRequest({
+ body,
+ headers,
+ method: 'POST',
+ });
+
+ const res = httpMocks.createResponse({
+ eventEmitter: require('events').EventEmitter,
+ });
+
+ const promise = new Promise((resolve, reject) => res.on('end', () => {
+ const data = res._getData();
+
+ console.info('DATA RETURNED TO GOOGLE ASSISTANT: ', data);
+
+ if (data.error) {
+ reject(data.error);
+ }
+
+ resolve(data);
+ }));
+
+ assistant.app(req, res);
+
+ return promise;
+};
diff --git a/webhooks/functions/src/tools.ts b/webhooks/functions/src/tools.ts
new file mode 100644
index 00000000..e02192ea
--- /dev/null
+++ b/webhooks/functions/src/tools.ts
@@ -0,0 +1,16 @@
+
+
+export const stall = (fn: (v: string) => Promise) => {
+ const store = new Map();
+
+ return async (k: string) => {
+ const ret = store.get(k);
+ if (ret) {
+ return ret;
+ }
+ const value = await fn(k);
+ store.set(k, value);
+
+ return value;
+ };
+}
\ No newline at end of file
diff --git a/webhooks/functions/src/translation/en/en.json b/webhooks/functions/src/translation/en/en.json
new file mode 100644
index 00000000..a4341dc5
--- /dev/null
+++ b/webhooks/functions/src/translation/en/en.json
@@ -0,0 +1,167 @@
+{
+ "main": {
+ "welcome": {
+ "noLinked": {
+ "1": "Welcome to {{- name}} Library, where you can easily access your favorite audio books."
+ },
+ "linked": {
+ "1": "Welcome back to your {{- name}} Library! Remember, you can ask for help at any time."
+ }
+ }
+ },
+ "home_new_user": {
+ "enter": {
+ "first": {
+ "1": "To fully enjoy your audiobooks and access your personal bookshelf, you will need to link your {{- name}} account.",
+ "2": "Would you like to do so now?"
+ }
+ },
+ "no": {
+ "1": "In order to read books using the {{- name}} Library via Google, you need to be a registered {{- name}} member and link your account.",
+ "2": "Would you like to learn more about registering on the {{- name}} Library?"
+ },
+ "help": {
+ "1": "To fully experience {{- name}} Library, and enjoy your favorite audiobooks via Google, you'll need to connect your {{- name}} account. To do so, answer 'yes' when prompted and follow the instructions. I will then send a connection link, that you will find into the Google Home application. You will have to log in to your {{- name}} account. You'll only have to do this once, and you'll be all set to start enjoying the wonderful world of {{- name}} books for hours on end!",
+ "2": "Would you like to link your account right now?"
+ },
+ "maybeLater": {
+ "1": "In order to use the {{- name}} Library via your Google Home, you must be a registered member of {{- name}} and link your account. In the meanwhile, you can learn more about {{- name}} or quit for now.",
+ "2": "What would you like to do?"
+ }
+ },
+ "home_new_user_maybe_later": {
+ "help": {
+ "1": "You can ask me to link your account, or learn more about the {{- name}} Library. You can also exit this application, by simply saying 'stop'. What is your decision?"
+ }
+ },
+ "home_new_user_no": {
+ "help": {
+ "1": "In order to use the {{- name}} library via your Google Home, you must be a registered member of the library and link your account. Would you like to learn more about the {{- name}} Library?"
+ }
+ },
+ "info": {
+ "about": {
+ "1": "{{- name}} is a national non-profit organization established by Canadian public libraries to champion the fundamental right of Canadians with print disabilities to access media and reading materials in the format of their choice, including audio, braille, e-text and descriptive video. Would you like to find out more about the {{- name}} membership?"
+ },
+ "help": {
+ "1": "If you'd like to learn more about {{- name}} membership, you can ask me by simply saying Yes, or Stop to exit this google application. If you have any other questions, we recommend reaching out to your local library for support. I'm listening?"
+ },
+ "yesOrMembership": {
+ "1": "Signing up is easy, you can head on over to the EDRLAB online platform at celalibrary dot ca. Keep the name of your local library and your library or SQLA number handy, that's all you'll need. You can also ask for help at your local library. As soon as your membership is activated, you can come back to start using the {{- name}} library via Google Assistant, by saying Hey Google, launch Accessible reading Canada."
+ }
+ },
+ "home_user": {
+ "enter": {
+ "newlyUser": {
+ "1": "Congratulations! You have succesfully linked your account and can now access all of your favorite books! Remember, you can ask for help at any time.",
+ "2": "Would you like to consult your bookshelf, or browse our collections? You can also search for a book by saying search for. Followed by a book title or an author."
+ },
+ "playing": {
+ "1": "You are listening to the {{- chapterNumber}} chapter of {{- titleAndAuthor}}, which you can now pick up.",
+ "2": "You are also reading {{- readingNumber}} other recent books, which you can choose from.",
+ "3": "And, of course, "
+ },
+ "regular": {
+ "1": "You can consult your bookshelf, or browse our collections. You can also search for a book by saying search followed by a book title or an author.",
+ "2": "Resume reading. Recent books. Bookshelf. Collections. Search for a specific book: what do you want to do?"
+ }
+ },
+ "currentBook": {
+ "1": "Uh Oh! Nothing to read here quite yet."
+ },
+ "help": {
+ "1": "At this stage, you can resume your last book with Resume Reading command or pick any books you recently listened to with the Recent Books command. You can also check the list of books you have selected with the help of a librarian by the command Bookshelf; browse our predefined collections by the command Collections. Finally, you can search for a book by saying Search followed by a title or part of a title, an author, or both.",
+ "2": "What do you prefer: Resume reading. Recent books. Bookshelf. Collections or Search?"
+ }
+ },
+ "search": {
+ "enter": {
+ "1": "What book or author are you looking for ?",
+ "2": "In the meanwhile, is there another title or author you'd like to search for?"
+ },
+ "empty": {
+ "1": "It seems like the book you are looking for is currently unavailable in the {{- name}} Library.",
+ "2": "You can suggest books for us to add at {{- website}}."
+ }
+ },
+ "selection": {
+ "enter": {
+ "bookshelf": {
+ "first": "Here are the first {{- number}} titles on your bookshelf:",
+ "second": "Or perhaps you'd like to explore the other titles on your bookshelf?"
+ },
+ "search": "I found {{- number}} books with that title.",
+ "collection": {
+ "publication": "I found {{- number}} books.",
+ "group": "I found {{- number}} groups."
+ },
+ "lastPage": {
+ "publication": "Here's the last available books.",
+ "group": "Here's the last available groups.",
+ "notAvailable": "no another results available."
+ },
+ "common": {
+ "1": "Pick one of these by requesting the corresponding number.",
+ "2": "{{- symbol}}. {{- title}}.",
+ "3": "Which number do you choose?"
+ },
+ "nextPage": {
+ "1": "Or ask for the next set."
+ },
+ "empty": {
+ "1": "Uh Oh! Nothing to read here quite yet. Not to worry though, we can fix that right away! Would you like to browse our collections? Or perhaps you'd like to search for a specific book by author or book title?"
+ }
+ },
+ "help": {
+ "1": "At this stage, you must choose a title among the proposed set, by mentioning its number, for example number 1. You can request other titles by using the Next or Previous commands."
+ }
+ },
+ "player_prequel": {
+ "summarize": "Here is the summary: {{- summary}}.",
+ "noSummary": "No summary is available, sorry.",
+ "help": {
+ "1": "At any time you can ask for the summary of the book, ask for the author or get the remaining listening time."
+ },
+ "enter": {
+ "1": "You've chosen {{- title}}{{- resume}}",
+ "1-continue": ", that you have already started.",
+ "1-begin": ".",
+ "2": "{{- resumeOrStart}}, listen the summary or come back to the list?",
+ "2-continue": "Do you want to resume reading",
+ "2-begin": "Do you want to start reading"
+ },
+ "summary": {
+ "1": "Do you want to start reading or go back to the list?"
+ }
+ },
+ "player": {
+ "explain": "Great choice! Before we start, let me remind you how this reader works. You can put your read on hold at any time by saying 'Hey Google, Pause'. 'Hey Google, Resume' will let you pick up your reading where you last left it. You can also navigate between chapters by saying 'Hey Google, next' or 'Hey Google, previous' at any time.",
+ "start": "Let's start reading {{- title}}.",
+ "start2": "Let's continue reading {{- title}}."
+ },
+ "collections": {
+ "enter": {
+ "1": "Okay, would you prefer to get a choice of collections by theme or by genre?"
+ },
+ "help": {
+ "1": "To hear an overview of available themes, say 'by theme'. For an overview of available genres, say 'by genre'."
+ }
+ },
+ "void": "Bye!",
+ "bye": {
+ "1": "Good bye! Remember, if you need help using the Accessible Reading Canada application, our librarians are here to help. We hope you will come back soon to enjoy your favourite audio books."
+ },
+ "fallback": {
+ "1": "I did not understand, what would you like to do?",
+ "2": "Sorry, I really did not understand. Can you please try one more time?"
+ },
+ "silence": {
+ "1": "I did not hear anything.",
+ "2": "Sorry, I really don't hear well."
+ },
+ "error": {
+ "1": "Oops, something went wrong. I will send you back to the home menu.",
+ "noBearerTokenInLinkedScene": "An issue occured during authentication, please retry later."
+ },
+ "noTitle": "No title available"
+}
diff --git a/webhooks/functions/src/translation/fr/fr.json b/webhooks/functions/src/translation/fr/fr.json
new file mode 100644
index 00000000..a50f2ae8
--- /dev/null
+++ b/webhooks/functions/src/translation/fr/fr.json
@@ -0,0 +1,167 @@
+{
+ "main": {
+ "welcome": {
+ "noLinked": {
+ "1": "Bienvenue dans la bibliothèque {{- name}}, où vous pouvez accéder facilement à vos livres favoris. "
+ },
+ "linked": {
+ "1": "Bienvenue dans votre bibliothèque {{- name}} !"
+ }
+ }
+ },
+ "home_new_user": {
+ "enter": {
+ "first": {
+ "1": "Pour profiter de vos livres et accéder à votre liste personnelle, vous devez lier votre compte {{- name}}.",
+ "2": "Voulez-vous le faire maintenant ?"
+ }
+ },
+ "no": {
+ "1": "Afin de lire des livres à l'aide de la bibliothèque {{- name}} via Google, vous devez être un membre enregistré de la bibliothèque {{- name}} et vous devez lier votre compte.",
+ "2": "Voulez-vous en savoir plus sur l'adhésion à {{- name}} ?"
+ },
+ "help": {
+ "1": "Pour découvrir la bibliothèque {{- name}} et profiter de vos livres préférés via Google, vous devez connecter votre compte {{- name}}. Pour ce faire, répondez \" oui \" lorsque vous y êtes invité et suivez les instructions. Je vous enverrai alors un lien de connexion, que vous retrouverez dans l'application Google Home. Vous devrez vous connecter à votre compte {{- name}}. Vous n'aurez à le faire qu'une seule fois, et vous pourrez profiter du monde merveilleux des livres de {{- name}} pendant des heures !",
+ "2": "Voulez-vous lier votre compte maintenant ?"
+ },
+ "maybeLater": {
+ "1": "Afin d'utiliser la bibliothèque {{- name}} via votre Google Home, vous devez être un membre enregistré de cette bibliothèque et lier votre compte. En attendant, vous pouvez en savoir plus sur la bibliothèque {{- name}} ou quitter l'application pour le moment.",
+ "2": "Que préférez-vous faire ?"
+ }
+ },
+ "home_new_user_maybe_later": {
+ "help": {
+ "1": "Vous pouvez me demander de lier votre compte, ou en apprendre plus sur la bibliothèque {{- name}}. Vous pouvez également quitter cette application en disant simplement \"Quitter\". Que décidez-vous ?"
+ }
+ },
+ "home_new_user_no": {
+ "help": {
+ "1": "Afin d'utiliser la bibliothèque {{- name}} via votre Google Home, vous devez être un membre enregistré de cette bibliothèque et lier votre compte. Voulez-vous en savoir plus sur la bibliothèque {{- name}} ?"
+ }
+ },
+ "info": {
+ "about": {
+ "1": "La bibliothèque {{- name}} est une organisation nationale sans but lucratif créée par les bibliothèques publiques canadiennes pour défendre le droit fondamental des Canadiens souffrant de difficultés de lecture sur des supports imprimés. Ces personnes peuvent accéder à des publications numériques dans le format de leur choix, y compris l'audio, le braille, le texte électronique et la vidéo descriptive - maintenant aussi disponible via Alexa et Google Home ! Souhaitez-vous en savoir plus sur les possibilité d'inscription à la bibliothèque {{- name}} ?"
+ },
+ "help": {
+ "1": "Si vous voulez en savoir plus sur les possibilités d'adhésion à la bibliothèque {{- name}}, vous pouvez le me demander en disant simplement Oui, ou bien Quitter pour quitter cette application. Si vous avez d'autres questions, nous vous recommandons de vous adresser à votre bibliothèque locale pour obtenir de l'aide."
+ },
+ "yesOrMembership": {
+ "1": "L'inscription est facile, vous pouvez vous rendre sur la plateforme en ligne de la bibliothèque {{- name}} à l'adresse bibliocaeb point ca. Gardez à portée de main le nom de votre bibliothèque locale et votre numéro de bibliothèque ou de SQLA, c'est tout ce dont vous aurez besoin. Vous pouvez également demander de l'aide à votre bibliothèque locale. Dès que votre adhésion est activée, vous pouvez revenir pour commencer à utiliser la bibliothèque {{- name}} via Google Assistant, en disant Hey Google, je veux parler à Lecture Accessible Canada."
+ }
+ },
+ "home_user": {
+ "enter": {
+ "newlyUser": {
+ "1": "Félicitations ! Vous avez réussi à connecter votre compte et vous pouvez maintenant accéder à tous vos livres préférés ! Rappelez-vous, vous pouvez demander de l'aide à tout instant.",
+ "2": "Souhaitez-vous consulter votre liste personnelle, ou naviguer dans nos collections ? Vous pouvez également rechercher un livre en prononçant cherche suivi d'un titre de livre ou d'un auteur."
+ },
+ "playing": {
+ "1": "Vous êtes en train d'écouter le chapitre {{- chapterNumber}} de {{- titleAndAuthor}}, que vous pouvez reprendre maintenant.",
+ "2": "Vous avez également {{- readingNumber}} autres livres récents, que je peux lister.",
+ "3": "Et bien entendu, "
+ },
+ "regular": {
+ "1": "Vous pouvez consulter votre liste personnelle, ou naviguer dans nos collections. Vous pouvez également rechercher un livre en prononçant cherche suivi d'un titre de livre ou d'un auteur.",
+ "2": "Reprendre la lecture. Livres récents. Liste personnelle. Collections. Chercher un livre : que désirez-vous faire ?"
+ }
+ },
+ "currentBook": {
+ "1": "Il n'y a rien à lire"
+ },
+ "help": {
+ "1": "A cette étape, Vous pouvez reprendre la lecture du livre en cours par la commande Reprendre la lecture, ou consulter les livres récemment écoutés par la commande Mes livres récents. Vous pouvez également consulter la liste des livres que vous avez sélectionnés avec l'aide d'un bibliothécaire par la commande Liste personnelle, naviguer dans nos collections prédéfinies par la commande collections. Vous pouvez enfin rechercher un livre en prononçant Cherche suivi d'un titre ou d'une partie du titre, d'un auteur, ou bien les deux.",
+ "2": "Que préférez-vous faire : Reprendre la lecture. Livres récents. Liste personnelle. Collections ou Chercher ?"
+ }
+ },
+ "search": {
+ "enter": {
+ "1": "Quel titre ou auteur recherchez-vous ?",
+ "2": "En attendant, y a-t-il un autre titre ou auteur que vous aimeriez rechercher ?"
+ },
+ "empty": {
+ "1": "Il semble que le livre que vous recherchez soit actuellement indisponible dans la bibliothèque {{- name}}.",
+ "2": "Vous pouvez nous suggérer des livres à ajouter à {{- website}}."
+ }
+ },
+ "selection": {
+ "enter": {
+ "bookshelf": {
+ "first": "Voici les {{- number}} premiers titres de votre liste personnelle :",
+ "second": "Ou peut-être souhaitez-vous explorer les autres titres de votre liste personnelle ?"
+ },
+ "search": "J'ai trouvé {{- number}} livres avec ce titre.",
+ "collection": {
+ "publication": "J'ai trouvé {{- number}} livres.",
+ "group": "J'ai trouvé {{- number}} groupes."
+ },
+ "lastPage": {
+ "publication": "Voici les derniers livres disponibles:",
+ "group": "Voici les derniers groupes disponibles:",
+ "notAvailable": "Aucun autre résultat disponible."
+ },
+ "common": {
+ "1": "Choisissez l'un de ces éléments en donnant son numéro.",
+ "2": "Numéro {{- symbol}} : {{- title}}.",
+ "3": "Quel numéro choisissez-vous ?"
+ },
+ "nextPage": {
+ "1": "Ou demandez la page suivante."
+ },
+ "empty": {
+ "1": "En fait, il n'y a rien à lire ici pour le moment. Mais ne vous inquiétez pas, nous pouvons arranger ça tout de suite !"
+ }
+ },
+ "help": {
+ "1": "A cette étape, vous devez choisir un titre parmi ceux proposés, en mentionnant son numéro, par exemple numéro 1. Vous pouvez aussi demander d'autres titres par les commandes Suivants ou Précédents."
+ }
+ },
+ "player_prequel": {
+ "summarize": "Voici le résumé: {{- summary}}.",
+ "noSummary": "Aucun résumé n'est disponible, j'en suis désolé.",
+ "help": {
+ "1": "A tout moment vous pouvez demander la lecture du résumé du livre , demander son auteur ou obtenir le temps d'écoute restant."
+ },
+ "enter": {
+ "1": "Vous avez choisi {{- title}}{{- resume}}",
+ "1-continue": " que vous aviez déja commencé.",
+ "1-begin": ".",
+ "2": "{{- resumeOrStart}}, écouter le résumé, ou revenir à la liste précédente ?",
+ "2-continue": "Voulez-vous reprendre la lecture",
+ "2-begin": "Voulez-vous commencer la lecture"
+ },
+ "summary": {
+ "1": "Voulez-vous commencer la lecture ou revenir à la liste précédente ?"
+ }
+ },
+ "player": {
+ "explain": "Excellent choix ! Avant de commencer, laissez-moi vous rappeler comment fonctionne ce lecteur. Vous pouvez mettre votre lecture en attente à tout moment en disant 'Google, Pause'. 'Google, Lecture' vous permettra de reprendre votre lecture là où vous l'avez pausée. Vous pouvez également naviguer entre les chapitres en disant 'Hey Google, suivant' ou 'Hey Google, précédent' à tout moment.",
+ "start": "Voici donc {{- title}}.",
+ "start2": "Reprenons la lecture de {{- title}}."
+ },
+ "collections": {
+ "enter": {
+ "1": "Très bien. Préférez-vous obtenir une sélection de livres par thème ou par genre ?"
+ },
+ "help": {
+ "1": "Pour entendre un aperçu des thèmes disponibles, dites par thème. Pour un aperçu des genres disponibles, dites par genre."
+ }
+ },
+ "void": "au revoir!",
+ "bye": {
+ "1": "Très bien. Souvenez-vous : si vous avez besoin d'aide pour utiliser l'application Lecture Accessible Canada, nos bibliothécaires sont à votre service. Nous espérons que vous reviendrez bientôt pour profiter de vos livres préférés."
+ },
+ "fallback": {
+ "1": "Je n'ai pas compris, que désirez-vous faire ?",
+ "2": "Désolé, je n'ai vraiment pas compris. Pouvez-vous tenter un dernière fois s'il vous plait ?"
+ },
+ "silence": {
+ "1": "Je n'ai pas entendu.",
+ "2": "Désolé, je n'entends vraiment pas bien."
+ },
+ "error": {
+ "1": "Oups, quelque chose s'est mal passé. Je vous renvoie au menu d'accueil.",
+ "noBearerTokenInLinkedScene": "Un problème est survenu lors de l'authentification, veuillez réessayer plus tard."
+ },
+ "noTitle": "Aucun titre disponible"
+}
diff --git a/webhooks/functions/src/translation/index.ts b/webhooks/functions/src/translation/index.ts
new file mode 100644
index 00000000..7e6d8547
--- /dev/null
+++ b/webhooks/functions/src/translation/index.ts
@@ -0,0 +1,22 @@
+import * as i18next from 'i18next';
+import * as frTranslation from './fr/fr.json';
+import * as enTranslation from './en/en.json';
+import {Translations} from './../typings/i18n';
+import {DEFAULT_LANGUAGE} from '../constants';
+
+i18next.init({
+ resources: {
+ 'fr': {
+ translation: frTranslation,
+ },
+ 'en': {
+ translation: enTranslation,
+ },
+ },
+ fallbackLng: DEFAULT_LANGUAGE,
+});
+
+export type TI18nKey = Translations['keys'][typeof DEFAULT_LANGUAGE];
+
+export type TI18n = typeof i18next & {t: (key: TI18nKey, options? : object) => any};
+export const i18n: TI18n = i18next;
diff --git a/webhooks/functions/src/type.ts b/webhooks/functions/src/type.ts
new file mode 100644
index 00000000..674d5025
--- /dev/null
+++ b/webhooks/functions/src/type.ts
@@ -0,0 +1,34 @@
+import { ConversationV3, ConversationV3App } from "@assistant/conversation";
+import { Media } from "@assistant/conversation/dist/api/schema";
+import { Machine } from "./controller/Machine";
+import { TI18nKey } from "./translation";
+import { TSdkScene } from "./typings/sdkScene";
+
+export enum MediaType {
+ Audio = 'AUDIO',
+ MediaStatusACK = 'MEDIA_STATUS_ACK',
+ MediaTypeUnspecified = 'MEDIA_TYPE_UNSPECIFIED',
+}
+
+export enum OptionalMediaControl {
+ OptionalMediaControlsUnspecified = 'OPTIONAL_MEDIA_CONTROLS_UNSPECIFIED',
+ Paused = 'PAUSED',
+ Stopped = 'STOPPED',
+}
+
+export type TPromptItem = TI18nKey | {[k: string]: any} | Media; //PromtItem type from @assistant/conversation
+
+export interface IConversationV3 extends ConversationV3 {
+}
+
+export interface IConversationWithParams extends IConversationV3 {
+}
+
+export interface IConversationV3App extends ConversationV3App {
+}
+
+export type TMachine = Machine;
+
+export type THandlerFn = (machine: TMachine) => TMachine | undefined | void | Promise;
+
+export type TSdkScene2 = TSdkScene | "actions.scene.END_CONVERSATION";
\ No newline at end of file
diff --git a/webhooks/functions/src/typings/i18n.d.ts b/webhooks/functions/src/typings/i18n.d.ts
new file mode 100644
index 00000000..c0a01188
--- /dev/null
+++ b/webhooks/functions/src/typings/i18n.d.ts
@@ -0,0 +1,13 @@
+/* eslint-disable */
+// DO NOT EDIT! This file is generated with "typed-18next" tool.
+
+export interface Translations {
+ keys: {
+ "en": "main.welcome.noLinked.1" | "main.welcome.linked.1" | "home_new_user.enter.first.1" | "home_new_user.enter.first.2" | "home_new_user.no.1" | "home_new_user.no.2" | "home_new_user.help.1" | "home_new_user.help.2" | "home_new_user.maybeLater.1" | "home_new_user.maybeLater.2" | "home_new_user_maybe_later.help.1" | "home_new_user_no.help.1" | "info.about.1" | "info.help.1" | "info.yesOrMembership.1" | "home_user.enter.newlyUser.1" | "home_user.enter.newlyUser.2" | "home_user.enter.playing.1" | "home_user.enter.playing.2" | "home_user.enter.playing.3" | "home_user.enter.regular.1" | "home_user.enter.regular.2" | "home_user.currentBook.1" | "home_user.help.1" | "home_user.help.2" | "search.enter.1" | "search.enter.2" | "search.empty.1" | "search.empty.2" | "selection.enter.bookshelf.first" | "selection.enter.bookshelf.second" | "selection.enter.search" | "selection.enter.collection.publication" | "selection.enter.collection.group" | "selection.enter.lastPage.publication" | "selection.enter.lastPage.group" | "selection.enter.lastPage.notAvailable" | "selection.enter.common.1" | "selection.enter.common.2" | "selection.enter.common.3" | "selection.enter.nextPage.1" | "selection.enter.empty.1" | "selection.help.1" | "player_prequel.summarize" | "player_prequel.noSummary" | "player_prequel.help.1" | "player_prequel.enter.1" | "player_prequel.enter.2" | "player_prequel.enter.1-continue" | "player_prequel.enter.1-begin" | "player_prequel.enter.2-continue" | "player_prequel.enter.2-begin" | "player_prequel.summary.1" | "player.explain" | "player.start" | "player.start2" | "collections.enter.1" | "collections.help.1" | "void" | "bye.1" | "fallback.1" | "fallback.2" | "silence.1" | "silence.2" | "error.1" | "error.noBearerTokenInLinkedScene" | "noTitle",
+ "fr": "main.welcome.noLinked.1" | "main.welcome.linked.1" | "home_new_user.enter.first.1" | "home_new_user.enter.first.2" | "home_new_user.no.1" | "home_new_user.no.2" | "home_new_user.help.1" | "home_new_user.help.2" | "home_new_user.maybeLater.1" | "home_new_user.maybeLater.2" | "home_new_user_maybe_later.help.1" | "home_new_user_no.help.1" | "info.about.1" | "info.help.1" | "info.yesOrMembership.1" | "home_user.enter.newlyUser.1" | "home_user.enter.newlyUser.2" | "home_user.enter.playing.1" | "home_user.enter.playing.2" | "home_user.enter.playing.3" | "home_user.enter.regular.1" | "home_user.enter.regular.2" | "home_user.currentBook.1" | "home_user.help.1" | "home_user.help.2" | "search.enter.1" | "search.enter.2" | "search.empty.1" | "search.empty.2" | "selection.enter.bookshelf.first" | "selection.enter.bookshelf.second" | "selection.enter.search" | "selection.enter.collection.publication" | "selection.enter.collection.group" | "selection.enter.lastPage.publication" | "selection.enter.lastPage.group" | "selection.enter.lastPage.notAvailable" | "selection.enter.common.1" | "selection.enter.common.2" | "selection.enter.common.3" | "selection.enter.nextPage.1" | "selection.enter.empty.1" | "selection.help.1" | "player_prequel.summarize" | "player_prequel.noSummary" | "player_prequel.help.1" | "player_prequel.enter.1" | "player_prequel.enter.2" | "player_prequel.enter.1-continue" | "player_prequel.enter.1-begin" | "player_prequel.enter.2-continue" | "player_prequel.enter.2-begin" | "player_prequel.summary.1" | "player.explain" | "player.start" | "player.start2" | "collections.enter.1" | "collections.help.1" | "void" | "bye.1" | "fallback.1" | "fallback.2" | "silence.1" | "silence.2" | "error.1" | "error.noBearerTokenInLinkedScene" | "noTitle"
+ };
+ keysWithNS: {
+ "en": "en:main.welcome.noLinked.1" | "en:main.welcome.linked.1" | "en:home_new_user.enter.first.1" | "en:home_new_user.enter.first.2" | "en:home_new_user.no.1" | "en:home_new_user.no.2" | "en:home_new_user.help.1" | "en:home_new_user.help.2" | "en:home_new_user.maybeLater.1" | "en:home_new_user.maybeLater.2" | "en:home_new_user_maybe_later.help.1" | "en:home_new_user_no.help.1" | "en:info.about.1" | "en:info.help.1" | "en:info.yesOrMembership.1" | "en:home_user.enter.newlyUser.1" | "en:home_user.enter.newlyUser.2" | "en:home_user.enter.playing.1" | "en:home_user.enter.playing.2" | "en:home_user.enter.playing.3" | "en:home_user.enter.regular.1" | "en:home_user.enter.regular.2" | "en:home_user.currentBook.1" | "en:home_user.help.1" | "en:home_user.help.2" | "en:search.enter.1" | "en:search.enter.2" | "en:search.empty.1" | "en:search.empty.2" | "en:selection.enter.bookshelf.first" | "en:selection.enter.bookshelf.second" | "en:selection.enter.search" | "en:selection.enter.collection.publication" | "en:selection.enter.collection.group" | "en:selection.enter.lastPage.publication" | "en:selection.enter.lastPage.group" | "en:selection.enter.lastPage.notAvailable" | "en:selection.enter.common.1" | "en:selection.enter.common.2" | "en:selection.enter.common.3" | "en:selection.enter.nextPage.1" | "en:selection.enter.empty.1" | "en:selection.help.1" | "en:player_prequel.summarize" | "en:player_prequel.noSummary" | "en:player_prequel.help.1" | "en:player_prequel.enter.1" | "en:player_prequel.enter.2" | "en:player_prequel.enter.1-continue" | "en:player_prequel.enter.1-begin" | "en:player_prequel.enter.2-continue" | "en:player_prequel.enter.2-begin" | "en:player_prequel.summary.1" | "en:player.explain" | "en:player.start" | "en:player.start2" | "en:collections.enter.1" | "en:collections.help.1" | "en:void" | "en:bye.1" | "en:fallback.1" | "en:fallback.2" | "en:silence.1" | "en:silence.2" | "en:error.1" | "en:error.noBearerTokenInLinkedScene" | "en:noTitle",
+ "fr": "fr:main.welcome.noLinked.1" | "fr:main.welcome.linked.1" | "fr:home_new_user.enter.first.1" | "fr:home_new_user.enter.first.2" | "fr:home_new_user.no.1" | "fr:home_new_user.no.2" | "fr:home_new_user.help.1" | "fr:home_new_user.help.2" | "fr:home_new_user.maybeLater.1" | "fr:home_new_user.maybeLater.2" | "fr:home_new_user_maybe_later.help.1" | "fr:home_new_user_no.help.1" | "fr:info.about.1" | "fr:info.help.1" | "fr:info.yesOrMembership.1" | "fr:home_user.enter.newlyUser.1" | "fr:home_user.enter.newlyUser.2" | "fr:home_user.enter.playing.1" | "fr:home_user.enter.playing.2" | "fr:home_user.enter.playing.3" | "fr:home_user.enter.regular.1" | "fr:home_user.enter.regular.2" | "fr:home_user.currentBook.1" | "fr:home_user.help.1" | "fr:home_user.help.2" | "fr:search.enter.1" | "fr:search.enter.2" | "fr:search.empty.1" | "fr:search.empty.2" | "fr:selection.enter.bookshelf.first" | "fr:selection.enter.bookshelf.second" | "fr:selection.enter.search" | "fr:selection.enter.collection.publication" | "fr:selection.enter.collection.group" | "fr:selection.enter.lastPage.publication" | "fr:selection.enter.lastPage.group" | "fr:selection.enter.lastPage.notAvailable" | "fr:selection.enter.common.1" | "fr:selection.enter.common.2" | "fr:selection.enter.common.3" | "fr:selection.enter.nextPage.1" | "fr:selection.enter.empty.1" | "fr:selection.help.1" | "fr:player_prequel.summarize" | "fr:player_prequel.noSummary" | "fr:player_prequel.help.1" | "fr:player_prequel.enter.1" | "fr:player_prequel.enter.2" | "fr:player_prequel.enter.1-continue" | "fr:player_prequel.enter.1-begin" | "fr:player_prequel.enter.2-continue" | "fr:player_prequel.enter.2-begin" | "fr:player_prequel.summary.1" | "fr:player.explain" | "fr:player.start" | "fr:player.start2" | "fr:collections.enter.1" | "fr:collections.help.1" | "fr:void" | "fr:bye.1" | "fr:fallback.1" | "fr:fallback.2" | "fr:silence.1" | "fr:silence.2" | "fr:error.1" | "fr:error.noBearerTokenInLinkedScene" | "fr:noTitle"
+ };
+}
diff --git a/webhooks/functions/src/typings/sdkHandler.d.ts b/webhooks/functions/src/typings/sdkHandler.d.ts
new file mode 100644
index 00000000..12fd2aed
--- /dev/null
+++ b/webhooks/functions/src/typings/sdkHandler.d.ts
@@ -0,0 +1,4 @@
+// npm run handler-typed ;
+
+
+export type TSdkHandler = 'main' | 'home_new_user__intent__help' | 'home_new_user__intent__maybe_later' | 'home_new_user__intent__no' | 'home_new_user__intent__repeat' | 'home_new_user__intent__yes' | 'home_new_user__intent__fallback' | 'home_new_user__intent__fallback_end' | 'home_new_user__intent__silence' | 'home_new_user__intent__silence_end' | 'home_new_user_maybe_later__intent__learn_more' | 'home_new_user_maybe_later__intent__repeat' | 'home_new_user_maybe_later__intent__link_account' | 'home_new_user_maybe_later__intent__help' | 'home_new_user_maybe_later__intent__fallback' | 'home_new_user_maybe_later__intent__fallback_end' | 'home_new_user_maybe_later__intent__silence' | 'home_new_user_maybe_later__intent__silence_end' | 'info__intent__yes' | 'info__intent__help' | 'info__intent__repeat' | 'info__intent__fallback' | 'info__intent__fallback_end' | 'info__intent__silence' | 'info__intent__silence_end' | 'home_new_user_no__intent__yes' | 'home_new_user_no__intent__no' | 'home_new_user_no__intent__repeat' | 'home_new_user_no__intent__help' | 'home_new_user_no__intent__fallback' | 'home_new_user_no__intent__fallback_end' | 'home_new_user_no__intent__silence' | 'home_new_user_no__intent__silence_end' | 'cancel' | 'home_new_user__on_enter' | 'home_new_user_no__on_enter' | 'home_new_user_maybe_later__on_enter' | 'info__on_enter' | 'home_user__on_enter' | 'home_user__intent__help' | 'home_user__intent__repeat' | 'home_user__intent__bookshelf' | 'home_user__intent__collections' | 'home_user__intent__search' | 'home_user__intent__fallback' | 'home_user__intent__fallback_end' | 'home_user__intent__silence' | 'home_user__intent__silence_end' | 'selection__on_enter' | 'selection__intent__selects_book' | 'selection__intent__repeat' | 'selection__intent__another_one' | 'selection__intent__help' | 'selection__intent__fallback' | 'selection__intent__fallback_end' | 'selection__intent__silence' | 'selection__intent__silence_end' | 'fallback_1' | 'fallback_2' | 'fallback_end' | 'silence_1' | 'silence_2' | 'silence_end' | 'player__on_enter' | 'player__intent__media_status_finished' | 'player__intent__media_status_paused' | 'player__intent__media_status_stopped' | 'player__intent__media_status_failed' | 'search__on_enter' | 'search__intent__search_query' | 'search__intent__search' | 'collections__on_enter' | 'collections__intent__bookshelf' | 'collections__intent__by_genre' | 'collections__intent__by_theme' | 'collections__intent__help' | 'collections__intent__fallback' | 'collections__intent__fallback_end' | 'collections__intent__silence' | 'collections__intent__silence_end' | 'player_prequel__on_enter' | 'home_user__intent__recent_books' | 'info__intent__no' | 'home_user__intent__current_book' | 'player_prequel__intent__help' | 'player_prequel__intent__repeat' | 'player_prequel__intent__player_prequel_back' | 'player_prequel__intent__player_prequel_resume' | 'player_prequel__intent__player_prequel_start' | 'player_prequel__intent__player_prequel_summary' | 'player_prequel__fallback' | 'player_prequel__fallback_end' | 'player_prequel__silence' | 'player_prequel__silence_end';
diff --git a/webhooks/functions/src/typings/sdkScene.d.ts b/webhooks/functions/src/typings/sdkScene.d.ts
new file mode 100644
index 00000000..472d63f2
--- /dev/null
+++ b/webhooks/functions/src/typings/sdkScene.d.ts
@@ -0,0 +1,4 @@
+// npm run scene-typed ;
+
+
+export type TSdkScene = 'collections' | 'home_new_user' | 'home_new_user_AccountLinking' | 'home_new_user_maybe_later' | 'home_new_user_no' | 'home_user' | 'info' | 'player' | 'player_prequel' | 'search' | 'selection';
diff --git a/webhooks/functions/tsconfig.json b/webhooks/functions/tsconfig.json
new file mode 100644
index 00000000..95c910cc
--- /dev/null
+++ b/webhooks/functions/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "noImplicitAny": false,
+ "noEmitOnError": true,
+ "removeComments": false,
+ "sourceMap": true,
+ "target": "ES5",
+ "lib": ["ES2020"],
+ "moduleResolution": "node",
+ "outDir": "build",
+ "experimentalDecorators": true,
+ "strictNullChecks": true,
+ "resolveJsonModule": true,
+ "downlevelIteration": true
+ },
+ "include": [
+ "src/**/*"
+ ]
+}
+