mirror of
https://github.com/standardnotes/server
synced 2026-05-09 06:58:01 -04:00
Compare commits
127 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8070c70152 | |||
| c3ebb321cf | |||
| e54deb594a | |||
| 432d071ec8 | |||
| b9c06f1f5d | |||
| 52cc6462a6 | |||
| 35c2afef67 | |||
| 339c86fca0 | |||
| 0afd3de977 | |||
| e699569d46 | |||
| ced852d9db | |||
| a63612613e | |||
| c9ec7b492a | |||
| bf8ffc07ee | |||
| 73e1ea7f93 | |||
| 5979b99398 | |||
| 50ddb918cc | |||
| 6b19eb8876 | |||
| 47be0841fc | |||
| 99c7bb70fc | |||
| f139bb0036 | |||
| 23f592ca24 | |||
| fe4821d4f7 | |||
| c338d4fec5 | |||
| d7e6758089 | |||
| 0ad62636b9 | |||
| f872c7dfe9 | |||
| c5fdd59eb1 | |||
| 7132dc3ac0 | |||
| 956d5be959 | |||
| 936591d40b | |||
| 686e4f8ddf | |||
| b61825235e | |||
| 8157f324a0 | |||
| 132b617aaa | |||
| 25b1f3e9ea | |||
| f94c8fc26e | |||
| d149f46cf6 | |||
| 6a24ba5d56 | |||
| db8333a858 | |||
| 3af254d7c7 | |||
| 8151bb108a | |||
| 3b18769c2d | |||
| 2883cac6d4 | |||
| d7ae2f0625 | |||
| 318f6d0986 | |||
| 2ca430f40c | |||
| fd65060a8e | |||
| cb81f819ba | |||
| 61c7040e4b | |||
| fa10827443 | |||
| bcee779e74 | |||
| 34315c91d7 | |||
| 8d3bf6c4a5 | |||
| 0c176b70f8 | |||
| 87a5854357 | |||
| 9c2d51d718 | |||
| e618f046ea | |||
| a36cb925ff | |||
| 9e2aea2793 | |||
| ef1e2bb5ed | |||
| 6a457281ea | |||
| 41c512798d | |||
| ffa0f51305 | |||
| e0cec9e24a | |||
| f6b359a772 | |||
| 648eb89c7c | |||
| ba22e085b8 | |||
| 35373db1d3 | |||
| 932cfa7200 | |||
| 932ef933fc | |||
| 4f1293525c | |||
| dd6bec8a0c | |||
| 1abca64765 | |||
| dbe55d89ec | |||
| dcb3ad661c | |||
| 1e1f6cb4a3 | |||
| 83d96fd71d | |||
| 7dc4670028 | |||
| dc88e2413b | |||
| b7f7c3f164 | |||
| f7def38e20 | |||
| cf49e1ff74 | |||
| 38de2d6b30 | |||
| 4b3de264ef | |||
| 4bb785c7f0 | |||
| 2fb904d2cb | |||
| ee79347e27 | |||
| 3477c81d37 | |||
| 930789316c | |||
| 01a08eae58 | |||
| d73c9833ab | |||
| 1841597405 | |||
| 8003e5ce43 | |||
| d0023a6c92 | |||
| a9293f6ce1 | |||
| 58c5b586a9 | |||
| 21d224da22 | |||
| 43d957c8d3 | |||
| 917fad510a | |||
| 269eef7ef3 | |||
| b811f4527b | |||
| 67378e4535 | |||
| dad9033482 | |||
| 32c8333564 | |||
| 4d074e7f9a | |||
| c61b615da6 | |||
| fba6cfd62c | |||
| 1ba5ba5ff6 | |||
| 31b6988f17 | |||
| 16076382ba | |||
| 666c919b70 | |||
| dea5fd717d | |||
| 02a4b6f721 | |||
| 815a6c4e3b | |||
| ac26024990 | |||
| f67be9d3ba | |||
| bb85e3ef11 | |||
| edd254531d | |||
| 0f1ff97a60 | |||
| 24e439f017 | |||
| 0a01fd58eb | |||
| f25195b2c1 | |||
| 29674b02e6 | |||
| 572ea3febe | |||
| f8334cf9d2 | |||
| 0ffec66bea |
@@ -9,134 +9,83 @@ updates:
|
|||||||
directory: "/"
|
directory: "/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/analytics"
|
directory: "/packages/analytics"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/api-gateway"
|
directory: "/packages/api-gateway"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/auth"
|
directory: "/packages/auth"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/common"
|
directory: "/packages/common"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/domain-events"
|
directory: "/packages/domain-events"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/domain-events-infra"
|
directory: "/packages/domain-events-infra"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/event-store"
|
directory: "/packages/event-store"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/files"
|
directory: "/packages/files"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/predicates"
|
directory: "/packages/predicates"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/scheduler"
|
directory: "/packages/scheduler"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/security"
|
directory: "/packages/security"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/settings"
|
directory: "/packages/settings"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/sncrypto-node"
|
directory: "/packages/sncrypto-node"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/syncing-server"
|
directory: "/packages/syncing-server"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/packages/time"
|
directory: "/packages/time"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|
||||||
- package-ecosystem: "github-actions"
|
- package-ecosystem: "github-actions"
|
||||||
directory: "/"
|
directory: "/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "weekly"
|
interval: "weekly"
|
||||||
reviewers:
|
|
||||||
- "moughxyz"
|
|
||||||
- "karolsojko"
|
|
||||||
|
|||||||
@@ -60,6 +60,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: Build locally
|
- name: Build locally
|
||||||
run: yarn build
|
run: yarn build
|
||||||
- name: Configure AWS credentials
|
- name: Configure AWS credentials
|
||||||
@@ -90,6 +95,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: Build locally
|
- name: Build locally
|
||||||
run: yarn build
|
run: yarn build
|
||||||
- name: Login to Docker Hub
|
- name: Login to Docker Hub
|
||||||
|
|||||||
@@ -63,6 +63,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: Build locally
|
- name: Build locally
|
||||||
run: yarn build
|
run: yarn build
|
||||||
- name: Configure AWS credentials
|
- name: Configure AWS credentials
|
||||||
@@ -93,6 +98,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: Build locally
|
- name: Build locally
|
||||||
run: yarn build
|
run: yarn build
|
||||||
- name: Login to Docker Hub
|
- name: Login to Docker Hub
|
||||||
|
|||||||
@@ -32,6 +32,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: Build locally
|
- name: Build locally
|
||||||
run: yarn build
|
run: yarn build
|
||||||
- name: Configure AWS credentials
|
- name: Configure AWS credentials
|
||||||
@@ -62,6 +67,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: Build locally
|
- name: Build locally
|
||||||
run: yarn build
|
run: yarn build
|
||||||
- name: Login to Docker Hub
|
- name: Login to Docker Hub
|
||||||
|
|||||||
@@ -63,6 +63,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: Build locally
|
- name: Build locally
|
||||||
run: yarn build
|
run: yarn build
|
||||||
- name: Configure AWS credentials
|
- name: Configure AWS credentials
|
||||||
@@ -93,6 +98,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: Build locally
|
- name: Build locally
|
||||||
run: yarn build
|
run: yarn build
|
||||||
- name: Login to Docker Hub
|
- name: Login to Docker Hub
|
||||||
|
|||||||
@@ -11,6 +11,11 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: ESLint
|
- name: ESLint
|
||||||
run: yarn lint
|
run: yarn lint
|
||||||
- name: Build
|
- name: Build
|
||||||
|
|||||||
@@ -32,6 +32,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: Build locally
|
- name: Build locally
|
||||||
run: yarn build
|
run: yarn build
|
||||||
- name: Configure AWS credentials
|
- name: Configure AWS credentials
|
||||||
@@ -62,6 +67,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: Build locally
|
- name: Build locally
|
||||||
run: yarn build
|
run: yarn build
|
||||||
- name: Login to Docker Hub
|
- name: Login to Docker Hub
|
||||||
|
|||||||
@@ -14,9 +14,11 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
ref: main
|
ref: main
|
||||||
token: ${{ secrets.CI_PAT_TOKEN }}
|
token: ${{ secrets.CI_PAT_TOKEN }}
|
||||||
- uses: actions/setup-node@v3
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
registry-url: 'https://registry.npmjs.org'
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: Setup git config
|
- name: Setup git config
|
||||||
run: |
|
run: |
|
||||||
git config --global user.name "standardci"
|
git config --global user.name "standardci"
|
||||||
@@ -43,4 +45,4 @@ jobs:
|
|||||||
commit-message: "${{ 'chore(deps): upgrade snjs' }}"
|
commit-message: "${{ 'chore(deps): upgrade snjs' }}"
|
||||||
delete-branch: true
|
delete-branch: true
|
||||||
committer: standardci <ci@standardnotes.com>
|
committer: standardci <ci@standardnotes.com>
|
||||||
author: standardci <ci@standardnotes.com>
|
author: standardci <ci@standardnotes.com>
|
||||||
|
|||||||
@@ -63,6 +63,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: Build locally
|
- name: Build locally
|
||||||
run: yarn build
|
run: yarn build
|
||||||
- name: Configure AWS credentials
|
- name: Configure AWS credentials
|
||||||
@@ -93,6 +98,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
- name: Build locally
|
- name: Build locally
|
||||||
run: yarn build
|
run: yarn build
|
||||||
- name: Login to Docker Hub
|
- name: Login to Docker Hub
|
||||||
|
|||||||
@@ -121,10 +121,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
["eslint", "npm:8.19.0"],\
|
["eslint", "npm:8.19.0"],\
|
||||||
["eslint-config-prettier", "virtual:8859b278716fedf3e7458b5628625f7e35678c418626878559a0b816445001b7e24c55546f4677ba4c20b521aa0cf52cc33ac07deff171e383ada6eeab69933f#npm:8.5.0"],\
|
["eslint-config-prettier", "virtual:8859b278716fedf3e7458b5628625f7e35678c418626878559a0b816445001b7e24c55546f4677ba4c20b521aa0cf52cc33ac07deff171e383ada6eeab69933f#npm:8.5.0"],\
|
||||||
["ini", "npm:3.0.0"],\
|
["ini", "npm:3.0.0"],\
|
||||||
["newrelic", "npm:8.14.1"],\
|
["newrelic", "npm:9.0.0"],\
|
||||||
["npm-check-updates", "npm:16.0.1"],\
|
["npm-check-updates", "npm:16.0.1"],\
|
||||||
["prettier", "npm:2.7.1"],\
|
["prettier", "npm:2.7.1"],\
|
||||||
["ts-node", "virtual:c0eab07e71af57f5501e97e7ca7a2a4f4965035bd2455ad124a8b09fa55780657c55fe3df41019fa6c2c44487c897668c842a0939e380b3c1f13b3756d128543#npm:10.8.2"],\
|
["ts-node", "virtual:8859b278716fedf3e7458b5628625f7e35678c418626878559a0b816445001b7e24c55546f4677ba4c20b521aa0cf52cc33ac07deff171e383ada6eeab69933f#npm:10.9.1"],\
|
||||||
["typescript", "patch:typescript@npm%3A4.7.4#~builtin<compat/typescript>::version=4.7.4&hash=7ad353"]\
|
["typescript", "patch:typescript@npm%3A4.7.4#~builtin<compat/typescript>::version=4.7.4&hash=7ad353"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "SOFT"\
|
"linkType": "SOFT"\
|
||||||
@@ -1788,20 +1788,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["@newrelic/aws-sdk", [\
|
["@newrelic/aws-sdk", [\
|
||||||
["npm:4.1.2", {\
|
["npm:5.0.0", {\
|
||||||
"packageLocation": "./.yarn/cache/@newrelic-aws-sdk-npm-4.1.2-9930120a02-610f6353a7.zip/node_modules/@newrelic/aws-sdk/",\
|
"packageLocation": "./.yarn/cache/@newrelic-aws-sdk-npm-5.0.0-7d9d10d58f-b467b7306f.zip/node_modules/@newrelic/aws-sdk/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@newrelic/aws-sdk", "npm:4.1.2"]\
|
["@newrelic/aws-sdk", "npm:5.0.0"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "SOFT"\
|
"linkType": "SOFT"\
|
||||||
}],\
|
}],\
|
||||||
["virtual:b659d4d19ce37732618223b586685dc7b27d11c52dca80d8411fdda38a4e6a7967776a5d7bdcce0be779cd6a41e2d84f8bbd3d3b5c06ce5ae40ad814517dfcfb#npm:4.1.2", {\
|
["virtual:65e8703d5df08d5ff3f7296fcb759f276254ee430ae6f3cc1f03da392ff63066a3c6c59591c38f36f19d3e877285287a834b5c55e22d764dc2cb0938f7128707#npm:5.0.0", {\
|
||||||
"packageLocation": "./.yarn/__virtual__/@newrelic-aws-sdk-virtual-a259cc13ec/0/cache/@newrelic-aws-sdk-npm-4.1.2-9930120a02-610f6353a7.zip/node_modules/@newrelic/aws-sdk/",\
|
"packageLocation": "./.yarn/__virtual__/@newrelic-aws-sdk-virtual-e9040e4121/0/cache/@newrelic-aws-sdk-npm-5.0.0-7d9d10d58f-b467b7306f.zip/node_modules/@newrelic/aws-sdk/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@newrelic/aws-sdk", "virtual:b659d4d19ce37732618223b586685dc7b27d11c52dca80d8411fdda38a4e6a7967776a5d7bdcce0be779cd6a41e2d84f8bbd3d3b5c06ce5ae40ad814517dfcfb#npm:4.1.2"],\
|
["@newrelic/aws-sdk", "virtual:65e8703d5df08d5ff3f7296fcb759f276254ee430ae6f3cc1f03da392ff63066a3c6c59591c38f36f19d3e877285287a834b5c55e22d764dc2cb0938f7128707#npm:5.0.0"],\
|
||||||
["@types/newrelic", null],\
|
["@types/newrelic", null],\
|
||||||
["newrelic", "npm:8.14.1"],\
|
["newrelic", "npm:9.0.0"]\
|
||||||
["semver", "npm:7.3.7"]\
|
|
||||||
],\
|
],\
|
||||||
"packagePeers": [\
|
"packagePeers": [\
|
||||||
"@types/newrelic",\
|
"@types/newrelic",\
|
||||||
@@ -1811,19 +1810,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["@newrelic/koa", [\
|
["@newrelic/koa", [\
|
||||||
["npm:6.1.2", {\
|
["npm:7.0.0", {\
|
||||||
"packageLocation": "./.yarn/cache/@newrelic-koa-npm-6.1.2-df0f7c71b5-e269d37b13.zip/node_modules/@newrelic/koa/",\
|
"packageLocation": "./.yarn/cache/@newrelic-koa-npm-7.0.0-903c251b9f-13fb2bf0df.zip/node_modules/@newrelic/koa/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@newrelic/koa", "npm:6.1.2"]\
|
["@newrelic/koa", "npm:7.0.0"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "SOFT"\
|
"linkType": "SOFT"\
|
||||||
}],\
|
}],\
|
||||||
["virtual:b659d4d19ce37732618223b586685dc7b27d11c52dca80d8411fdda38a4e6a7967776a5d7bdcce0be779cd6a41e2d84f8bbd3d3b5c06ce5ae40ad814517dfcfb#npm:6.1.2", {\
|
["virtual:65e8703d5df08d5ff3f7296fcb759f276254ee430ae6f3cc1f03da392ff63066a3c6c59591c38f36f19d3e877285287a834b5c55e22d764dc2cb0938f7128707#npm:7.0.0", {\
|
||||||
"packageLocation": "./.yarn/__virtual__/@newrelic-koa-virtual-2df93240b5/0/cache/@newrelic-koa-npm-6.1.2-df0f7c71b5-e269d37b13.zip/node_modules/@newrelic/koa/",\
|
"packageLocation": "./.yarn/__virtual__/@newrelic-koa-virtual-d6376894e6/0/cache/@newrelic-koa-npm-7.0.0-903c251b9f-13fb2bf0df.zip/node_modules/@newrelic/koa/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@newrelic/koa", "virtual:b659d4d19ce37732618223b586685dc7b27d11c52dca80d8411fdda38a4e6a7967776a5d7bdcce0be779cd6a41e2d84f8bbd3d3b5c06ce5ae40ad814517dfcfb#npm:6.1.2"],\
|
["@newrelic/koa", "virtual:65e8703d5df08d5ff3f7296fcb759f276254ee430ae6f3cc1f03da392ff63066a3c6c59591c38f36f19d3e877285287a834b5c55e22d764dc2cb0938f7128707#npm:7.0.0"],\
|
||||||
["@types/newrelic", null],\
|
["@types/newrelic", null],\
|
||||||
["newrelic", "npm:8.14.1"]\
|
["newrelic", "npm:9.0.0"]\
|
||||||
],\
|
],\
|
||||||
"packagePeers": [\
|
"packagePeers": [\
|
||||||
"@types/newrelic",\
|
"@types/newrelic",\
|
||||||
@@ -1833,10 +1832,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["@newrelic/native-metrics", [\
|
["@newrelic/native-metrics", [\
|
||||||
["npm:8.0.0", {\
|
["npm:9.0.0", {\
|
||||||
"packageLocation": "./.yarn/unplugged/@newrelic-native-metrics-npm-8.0.0-c254393d6e/node_modules/@newrelic/native-metrics/",\
|
"packageLocation": "./.yarn/unplugged/@newrelic-native-metrics-npm-9.0.0-590d2e713a/node_modules/@newrelic/native-metrics/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@newrelic/native-metrics", "npm:8.0.0"],\
|
["@newrelic/native-metrics", "npm:9.0.0"],\
|
||||||
["https-proxy-agent", "npm:5.0.1"],\
|
["https-proxy-agent", "npm:5.0.1"],\
|
||||||
["nan", "npm:2.16.0"],\
|
["nan", "npm:2.16.0"],\
|
||||||
["node-gyp", "npm:9.0.0"],\
|
["node-gyp", "npm:9.0.0"],\
|
||||||
@@ -1846,19 +1845,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["@newrelic/superagent", [\
|
["@newrelic/superagent", [\
|
||||||
["npm:5.1.1", {\
|
["npm:6.0.0", {\
|
||||||
"packageLocation": "./.yarn/cache/@newrelic-superagent-npm-5.1.1-0d3c1fccf8-b43f7b9bb6.zip/node_modules/@newrelic/superagent/",\
|
"packageLocation": "./.yarn/cache/@newrelic-superagent-npm-6.0.0-db8b77d0f3-d9e9b20d75.zip/node_modules/@newrelic/superagent/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@newrelic/superagent", "npm:5.1.1"]\
|
["@newrelic/superagent", "npm:6.0.0"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "SOFT"\
|
"linkType": "SOFT"\
|
||||||
}],\
|
}],\
|
||||||
["virtual:b659d4d19ce37732618223b586685dc7b27d11c52dca80d8411fdda38a4e6a7967776a5d7bdcce0be779cd6a41e2d84f8bbd3d3b5c06ce5ae40ad814517dfcfb#npm:5.1.1", {\
|
["virtual:65e8703d5df08d5ff3f7296fcb759f276254ee430ae6f3cc1f03da392ff63066a3c6c59591c38f36f19d3e877285287a834b5c55e22d764dc2cb0938f7128707#npm:6.0.0", {\
|
||||||
"packageLocation": "./.yarn/__virtual__/@newrelic-superagent-virtual-d7de4099d8/0/cache/@newrelic-superagent-npm-5.1.1-0d3c1fccf8-b43f7b9bb6.zip/node_modules/@newrelic/superagent/",\
|
"packageLocation": "./.yarn/__virtual__/@newrelic-superagent-virtual-c2a5d7b8a8/0/cache/@newrelic-superagent-npm-6.0.0-db8b77d0f3-d9e9b20d75.zip/node_modules/@newrelic/superagent/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@newrelic/superagent", "virtual:b659d4d19ce37732618223b586685dc7b27d11c52dca80d8411fdda38a4e6a7967776a5d7bdcce0be779cd6a41e2d84f8bbd3d3b5c06ce5ae40ad814517dfcfb#npm:5.1.1"],\
|
["@newrelic/superagent", "virtual:65e8703d5df08d5ff3f7296fcb759f276254ee430ae6f3cc1f03da392ff63066a3c6c59591c38f36f19d3e877285287a834b5c55e22d764dc2cb0938f7128707#npm:6.0.0"],\
|
||||||
["@types/newrelic", null],\
|
["@types/newrelic", null],\
|
||||||
["newrelic", "npm:8.14.1"]\
|
["newrelic", "npm:9.0.0"]\
|
||||||
],\
|
],\
|
||||||
"packagePeers": [\
|
"packagePeers": [\
|
||||||
"@types/newrelic",\
|
"@types/newrelic",\
|
||||||
@@ -1880,7 +1879,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@newrelic/winston-enricher", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:4.0.0"],\
|
["@newrelic/winston-enricher", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:4.0.0"],\
|
||||||
["@types/newrelic", "npm:7.0.3"],\
|
["@types/newrelic", "npm:7.0.3"],\
|
||||||
["newrelic", "npm:8.14.1"]\
|
["newrelic", "npm:9.0.0"]\
|
||||||
],\
|
],\
|
||||||
"packagePeers": [\
|
"packagePeers": [\
|
||||||
"@types/newrelic",\
|
"@types/newrelic",\
|
||||||
@@ -2507,6 +2506,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
["@newrelic/winston-enricher", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:4.0.0"],\
|
["@newrelic/winston-enricher", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:4.0.0"],\
|
||||||
["@sentry/node", "npm:7.5.0"],\
|
["@sentry/node", "npm:7.5.0"],\
|
||||||
["@standardnotes/analytics", "workspace:packages/analytics"],\
|
["@standardnotes/analytics", "workspace:packages/analytics"],\
|
||||||
|
["@standardnotes/common", "workspace:packages/common"],\
|
||||||
["@standardnotes/domain-events", "workspace:packages/domain-events"],\
|
["@standardnotes/domain-events", "workspace:packages/domain-events"],\
|
||||||
["@standardnotes/domain-events-infra", "workspace:packages/domain-events-infra"],\
|
["@standardnotes/domain-events-infra", "workspace:packages/domain-events-infra"],\
|
||||||
["@standardnotes/security", "workspace:packages/security"],\
|
["@standardnotes/security", "workspace:packages/security"],\
|
||||||
@@ -2532,7 +2532,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
["ioredis", "npm:5.2.0"],\
|
["ioredis", "npm:5.2.0"],\
|
||||||
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
||||||
["jsonwebtoken", "npm:8.5.1"],\
|
["jsonwebtoken", "npm:8.5.1"],\
|
||||||
["newrelic", "npm:8.14.1"],\
|
["newrelic", "npm:9.0.0"],\
|
||||||
["nodemon", "npm:2.0.19"],\
|
["nodemon", "npm:2.0.19"],\
|
||||||
["npm-check-updates", "npm:16.0.1"],\
|
["npm-check-updates", "npm:16.0.1"],\
|
||||||
["prettyjson", "npm:1.2.5"],\
|
["prettyjson", "npm:1.2.5"],\
|
||||||
@@ -2599,7 +2599,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
["ioredis", "npm:5.2.0"],\
|
["ioredis", "npm:5.2.0"],\
|
||||||
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
||||||
["mysql2", "npm:2.3.3"],\
|
["mysql2", "npm:2.3.3"],\
|
||||||
["newrelic", "npm:8.14.1"],\
|
["newrelic", "npm:9.0.0"],\
|
||||||
["nodemon", "npm:2.0.19"],\
|
["nodemon", "npm:2.0.19"],\
|
||||||
["npm-check-updates", "npm:16.0.1"],\
|
["npm-check-updates", "npm:16.0.1"],\
|
||||||
["otplib", "npm:12.0.1"],\
|
["otplib", "npm:12.0.1"],\
|
||||||
@@ -2608,7 +2608,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
["ts-jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.0.5"],\
|
["ts-jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.0.5"],\
|
||||||
["typeorm", "virtual:31b5a94a105c89c9294c3d524a7f8929fe63ee5a2efadf21951ca4c0cfd2ecf02e8f4ef5a066bbda091f1e3a56e57c6749069a080618c96b22e51131a330fc4a#npm:0.3.7"],\
|
["typeorm", "virtual:31b5a94a105c89c9294c3d524a7f8929fe63ee5a2efadf21951ca4c0cfd2ecf02e8f4ef5a066bbda091f1e3a56e57c6749069a080618c96b22e51131a330fc4a#npm:0.3.7"],\
|
||||||
["ua-parser-js", "npm:1.0.2"],\
|
["ua-parser-js", "npm:1.0.2"],\
|
||||||
["uuid", "npm:8.3.2"],\
|
["uuid", "npm:9.0.0"],\
|
||||||
["winston", "npm:3.8.1"]\
|
["winston", "npm:3.8.1"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "SOFT"\
|
"linkType": "SOFT"\
|
||||||
@@ -2677,7 +2677,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
["eslint-plugin-prettier", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.2.1"],\
|
["eslint-plugin-prettier", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.2.1"],\
|
||||||
["ioredis", "npm:5.2.0"],\
|
["ioredis", "npm:5.2.0"],\
|
||||||
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
||||||
["newrelic", "npm:8.14.1"],\
|
["newrelic", "npm:9.0.0"],\
|
||||||
["reflect-metadata", "npm:0.1.13"],\
|
["reflect-metadata", "npm:0.1.13"],\
|
||||||
["sqs-consumer", "virtual:685a6222c3349423674bb7f0684ba34e2ab20912010f352e04dcf707a156e13183fc382e2417cb37a60f3e7b52fd0178c53181674890e1773eb83e190dc13378#npm:5.7.0"],\
|
["sqs-consumer", "virtual:685a6222c3349423674bb7f0684ba34e2ab20912010f352e04dcf707a156e13183fc382e2417cb37a60f3e7b52fd0178c53181674890e1773eb83e190dc13378#npm:5.7.0"],\
|
||||||
["ts-jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.0.5"],\
|
["ts-jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.0.5"],\
|
||||||
@@ -2723,7 +2723,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
["ioredis", "npm:5.2.0"],\
|
["ioredis", "npm:5.2.0"],\
|
||||||
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
||||||
["mysql2", "npm:2.3.3"],\
|
["mysql2", "npm:2.3.3"],\
|
||||||
["newrelic", "npm:8.14.1"],\
|
["newrelic", "npm:9.0.0"],\
|
||||||
["reflect-metadata", "npm:0.1.13"],\
|
["reflect-metadata", "npm:0.1.13"],\
|
||||||
["ts-jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.0.5"],\
|
["ts-jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.0.5"],\
|
||||||
["typeorm", "virtual:31b5a94a105c89c9294c3d524a7f8929fe63ee5a2efadf21951ca4c0cfd2ecf02e8f4ef5a066bbda091f1e3a56e57c6749069a080618c96b22e51131a330fc4a#npm:0.3.7"],\
|
["typeorm", "virtual:31b5a94a105c89c9294c3d524a7f8929fe63ee5a2efadf21951ca4c0cfd2ecf02e8f4ef5a066bbda091f1e3a56e57c6749069a080618c96b22e51131a330fc4a#npm:0.3.7"],\
|
||||||
@@ -2783,14 +2783,14 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
["ioredis", "npm:5.2.0"],\
|
["ioredis", "npm:5.2.0"],\
|
||||||
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
||||||
["jsonwebtoken", "npm:8.5.1"],\
|
["jsonwebtoken", "npm:8.5.1"],\
|
||||||
["newrelic", "npm:8.14.1"],\
|
["newrelic", "npm:9.0.0"],\
|
||||||
["nodemon", "npm:2.0.19"],\
|
["nodemon", "npm:2.0.19"],\
|
||||||
["npm-check-updates", "npm:16.0.1"],\
|
["npm-check-updates", "npm:16.0.1"],\
|
||||||
["prettyjson", "npm:1.2.5"],\
|
["prettyjson", "npm:1.2.5"],\
|
||||||
["reflect-metadata", "npm:0.1.13"],\
|
["reflect-metadata", "npm:0.1.13"],\
|
||||||
["ts-jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.0.5"],\
|
["ts-jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.0.5"],\
|
||||||
["ts-node", "virtual:b442cf0427cc365d1c137f7340f9b81f9b204561afe791a8564ae9590c3a7fc4b5f793aaf8817b946f75a3cb64d03ef8790eb847f8b576b41e700da7b00c240c#npm:10.8.2"],\
|
["ts-node", "virtual:b442cf0427cc365d1c137f7340f9b81f9b204561afe791a8564ae9590c3a7fc4b5f793aaf8817b946f75a3cb64d03ef8790eb847f8b576b41e700da7b00c240c#npm:10.9.1"],\
|
||||||
["uuid", "npm:8.3.2"],\
|
["uuid", "npm:9.0.0"],\
|
||||||
["winston", "npm:3.8.1"]\
|
["winston", "npm:3.8.1"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "SOFT"\
|
"linkType": "SOFT"\
|
||||||
@@ -2867,16 +2867,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
["@types/jest", "npm:28.1.4"],\
|
["@types/jest", "npm:28.1.4"],\
|
||||||
["@types/newrelic", "npm:7.0.3"],\
|
["@types/newrelic", "npm:7.0.3"],\
|
||||||
["@types/node", "npm:18.0.3"],\
|
["@types/node", "npm:18.0.3"],\
|
||||||
["@typescript-eslint/eslint-plugin", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:5.30.5"],\
|
["@typescript-eslint/eslint-plugin", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:5.30.5"],\
|
||||||
["aws-sdk", "npm:2.1168.0"],\
|
["aws-sdk", "npm:2.1168.0"],\
|
||||||
["dayjs", "npm:1.11.3"],\
|
["dayjs", "npm:1.11.3"],\
|
||||||
["dotenv", "npm:16.0.1"],\
|
["dotenv", "npm:16.0.1"],\
|
||||||
["eslint-plugin-prettier", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.2.1"],\
|
["eslint", "npm:8.19.0"],\
|
||||||
|
["eslint-plugin-prettier", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:4.2.1"],\
|
||||||
["inversify", "npm:6.0.1"],\
|
["inversify", "npm:6.0.1"],\
|
||||||
["ioredis", "npm:5.2.0"],\
|
["ioredis", "npm:5.2.0"],\
|
||||||
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
||||||
["mysql2", "npm:2.3.3"],\
|
["mysql2", "npm:2.3.3"],\
|
||||||
["newrelic", "npm:8.14.1"],\
|
["newrelic", "npm:9.0.0"],\
|
||||||
["npm-check-updates", "npm:16.0.1"],\
|
["npm-check-updates", "npm:16.0.1"],\
|
||||||
["reflect-metadata", "npm:0.1.13"],\
|
["reflect-metadata", "npm:0.1.13"],\
|
||||||
["ts-jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.0.5"],\
|
["ts-jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.0.5"],\
|
||||||
@@ -2922,10 +2923,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
["eslint", "npm:8.19.0"],\
|
["eslint", "npm:8.19.0"],\
|
||||||
["eslint-config-prettier", "virtual:8859b278716fedf3e7458b5628625f7e35678c418626878559a0b816445001b7e24c55546f4677ba4c20b521aa0cf52cc33ac07deff171e383ada6eeab69933f#npm:8.5.0"],\
|
["eslint-config-prettier", "virtual:8859b278716fedf3e7458b5628625f7e35678c418626878559a0b816445001b7e24c55546f4677ba4c20b521aa0cf52cc33ac07deff171e383ada6eeab69933f#npm:8.5.0"],\
|
||||||
["ini", "npm:3.0.0"],\
|
["ini", "npm:3.0.0"],\
|
||||||
["newrelic", "npm:8.14.1"],\
|
["newrelic", "npm:9.0.0"],\
|
||||||
["npm-check-updates", "npm:16.0.1"],\
|
["npm-check-updates", "npm:16.0.1"],\
|
||||||
["prettier", "npm:2.7.1"],\
|
["prettier", "npm:2.7.1"],\
|
||||||
["ts-node", "virtual:c0eab07e71af57f5501e97e7ca7a2a4f4965035bd2455ad124a8b09fa55780657c55fe3df41019fa6c2c44487c897668c842a0939e380b3c1f13b3756d128543#npm:10.8.2"],\
|
["ts-node", "virtual:8859b278716fedf3e7458b5628625f7e35678c418626878559a0b816445001b7e24c55546f4677ba4c20b521aa0cf52cc33ac07deff171e383ada6eeab69933f#npm:10.9.1"],\
|
||||||
["typescript", "patch:typescript@npm%3A4.7.4#~builtin<compat/typescript>::version=4.7.4&hash=7ad353"]\
|
["typescript", "patch:typescript@npm%3A4.7.4#~builtin<compat/typescript>::version=4.7.4&hash=7ad353"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "SOFT"\
|
"linkType": "SOFT"\
|
||||||
@@ -3028,7 +3029,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
["jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.1.2"],\
|
||||||
["jsonwebtoken", "npm:8.5.1"],\
|
["jsonwebtoken", "npm:8.5.1"],\
|
||||||
["mysql2", "npm:2.3.3"],\
|
["mysql2", "npm:2.3.3"],\
|
||||||
["newrelic", "npm:8.14.1"],\
|
["newrelic", "npm:9.0.0"],\
|
||||||
["nodemon", "npm:2.0.19"],\
|
["nodemon", "npm:2.0.19"],\
|
||||||
["npm-check-updates", "npm:16.0.1"],\
|
["npm-check-updates", "npm:16.0.1"],\
|
||||||
["prettyjson", "npm:1.2.5"],\
|
["prettyjson", "npm:1.2.5"],\
|
||||||
@@ -3036,7 +3037,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
["ts-jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.0.5"],\
|
["ts-jest", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:28.0.5"],\
|
||||||
["typeorm", "virtual:31b5a94a105c89c9294c3d524a7f8929fe63ee5a2efadf21951ca4c0cfd2ecf02e8f4ef5a066bbda091f1e3a56e57c6749069a080618c96b22e51131a330fc4a#npm:0.3.7"],\
|
["typeorm", "virtual:31b5a94a105c89c9294c3d524a7f8929fe63ee5a2efadf21951ca4c0cfd2ecf02e8f4ef5a066bbda091f1e3a56e57c6749069a080618c96b22e51131a330fc4a#npm:0.3.7"],\
|
||||||
["ua-parser-js", "npm:1.0.2"],\
|
["ua-parser-js", "npm:1.0.2"],\
|
||||||
["uuid", "npm:8.3.2"],\
|
["uuid", "npm:9.0.0"],\
|
||||||
["winston", "npm:3.8.1"]\
|
["winston", "npm:3.8.1"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "SOFT"\
|
"linkType": "SOFT"\
|
||||||
@@ -9540,16 +9541,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["newrelic", [\
|
["newrelic", [\
|
||||||
["npm:8.14.1", {\
|
["npm:9.0.0", {\
|
||||||
"packageLocation": "./.yarn/cache/newrelic-npm-8.14.1-b659d4d19c-cd12bb2ac9.zip/node_modules/newrelic/",\
|
"packageLocation": "./.yarn/cache/newrelic-npm-9.0.0-65e8703d5d-e92af072fd.zip/node_modules/newrelic/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["newrelic", "npm:8.14.1"],\
|
["newrelic", "npm:9.0.0"],\
|
||||||
["@grpc/grpc-js", "npm:1.6.7"],\
|
["@grpc/grpc-js", "npm:1.6.7"],\
|
||||||
["@grpc/proto-loader", "npm:0.6.13"],\
|
["@grpc/proto-loader", "npm:0.6.13"],\
|
||||||
["@newrelic/aws-sdk", "virtual:b659d4d19ce37732618223b586685dc7b27d11c52dca80d8411fdda38a4e6a7967776a5d7bdcce0be779cd6a41e2d84f8bbd3d3b5c06ce5ae40ad814517dfcfb#npm:4.1.2"],\
|
["@newrelic/aws-sdk", "virtual:65e8703d5df08d5ff3f7296fcb759f276254ee430ae6f3cc1f03da392ff63066a3c6c59591c38f36f19d3e877285287a834b5c55e22d764dc2cb0938f7128707#npm:5.0.0"],\
|
||||||
["@newrelic/koa", "virtual:b659d4d19ce37732618223b586685dc7b27d11c52dca80d8411fdda38a4e6a7967776a5d7bdcce0be779cd6a41e2d84f8bbd3d3b5c06ce5ae40ad814517dfcfb#npm:6.1.2"],\
|
["@newrelic/koa", "virtual:65e8703d5df08d5ff3f7296fcb759f276254ee430ae6f3cc1f03da392ff63066a3c6c59591c38f36f19d3e877285287a834b5c55e22d764dc2cb0938f7128707#npm:7.0.0"],\
|
||||||
["@newrelic/native-metrics", "npm:8.0.0"],\
|
["@newrelic/native-metrics", "npm:9.0.0"],\
|
||||||
["@newrelic/superagent", "virtual:b659d4d19ce37732618223b586685dc7b27d11c52dca80d8411fdda38a4e6a7967776a5d7bdcce0be779cd6a41e2d84f8bbd3d3b5c06ce5ae40ad814517dfcfb#npm:5.1.1"],\
|
["@newrelic/superagent", "virtual:65e8703d5df08d5ff3f7296fcb759f276254ee430ae6f3cc1f03da392ff63066a3c6c59591c38f36f19d3e877285287a834b5c55e22d764dc2cb0938f7128707#npm:6.0.0"],\
|
||||||
["@tyriar/fibonacci-heap", "npm:2.0.9"],\
|
["@tyriar/fibonacci-heap", "npm:2.0.9"],\
|
||||||
["async", "npm:3.2.4"],\
|
["async", "npm:3.2.4"],\
|
||||||
["concat-stream", "npm:2.0.0"],\
|
["concat-stream", "npm:2.0.0"],\
|
||||||
@@ -12188,10 +12189,53 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
],\
|
],\
|
||||||
"linkType": "SOFT"\
|
"linkType": "SOFT"\
|
||||||
}],\
|
}],\
|
||||||
["virtual:b442cf0427cc365d1c137f7340f9b81f9b204561afe791a8564ae9590c3a7fc4b5f793aaf8817b946f75a3cb64d03ef8790eb847f8b576b41e700da7b00c240c#npm:10.8.2", {\
|
["npm:10.9.1", {\
|
||||||
"packageLocation": "./.yarn/__virtual__/ts-node-virtual-8a01a45377/0/cache/ts-node-npm-10.8.2-f3c0c9eaee-1eede939be.zip/node_modules/ts-node/",\
|
"packageLocation": "./.yarn/cache/ts-node-npm-10.9.1-6c268be7f4-090adff130.zip/node_modules/ts-node/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["ts-node", "virtual:b442cf0427cc365d1c137f7340f9b81f9b204561afe791a8564ae9590c3a7fc4b5f793aaf8817b946f75a3cb64d03ef8790eb847f8b576b41e700da7b00c240c#npm:10.8.2"],\
|
["ts-node", "npm:10.9.1"]\
|
||||||
|
],\
|
||||||
|
"linkType": "SOFT"\
|
||||||
|
}],\
|
||||||
|
["virtual:8859b278716fedf3e7458b5628625f7e35678c418626878559a0b816445001b7e24c55546f4677ba4c20b521aa0cf52cc33ac07deff171e383ada6eeab69933f#npm:10.9.1", {\
|
||||||
|
"packageLocation": "./.yarn/__virtual__/ts-node-virtual-ac01688ebc/0/cache/ts-node-npm-10.9.1-6c268be7f4-090adff130.zip/node_modules/ts-node/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["ts-node", "virtual:8859b278716fedf3e7458b5628625f7e35678c418626878559a0b816445001b7e24c55546f4677ba4c20b521aa0cf52cc33ac07deff171e383ada6eeab69933f#npm:10.9.1"],\
|
||||||
|
["@cspotcode/source-map-support", "npm:0.8.1"],\
|
||||||
|
["@swc/core", null],\
|
||||||
|
["@swc/wasm", null],\
|
||||||
|
["@tsconfig/node10", "npm:1.0.9"],\
|
||||||
|
["@tsconfig/node12", "npm:1.0.11"],\
|
||||||
|
["@tsconfig/node14", "npm:1.0.3"],\
|
||||||
|
["@tsconfig/node16", "npm:1.0.3"],\
|
||||||
|
["@types/node", "npm:18.0.3"],\
|
||||||
|
["@types/swc__core", null],\
|
||||||
|
["@types/swc__wasm", null],\
|
||||||
|
["@types/typescript", null],\
|
||||||
|
["acorn", "npm:8.7.1"],\
|
||||||
|
["acorn-walk", "npm:8.2.0"],\
|
||||||
|
["arg", "npm:4.1.3"],\
|
||||||
|
["create-require", "npm:1.1.1"],\
|
||||||
|
["diff", "npm:4.0.2"],\
|
||||||
|
["make-error", "npm:1.3.6"],\
|
||||||
|
["typescript", "patch:typescript@npm%3A4.7.4#~builtin<compat/typescript>::version=4.7.4&hash=7ad353"],\
|
||||||
|
["v8-compile-cache-lib", "npm:3.0.1"],\
|
||||||
|
["yn", "npm:3.1.1"]\
|
||||||
|
],\
|
||||||
|
"packagePeers": [\
|
||||||
|
"@swc/core",\
|
||||||
|
"@swc/wasm",\
|
||||||
|
"@types/node",\
|
||||||
|
"@types/swc__core",\
|
||||||
|
"@types/swc__wasm",\
|
||||||
|
"@types/typescript",\
|
||||||
|
"typescript"\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}],\
|
||||||
|
["virtual:b442cf0427cc365d1c137f7340f9b81f9b204561afe791a8564ae9590c3a7fc4b5f793aaf8817b946f75a3cb64d03ef8790eb847f8b576b41e700da7b00c240c#npm:10.9.1", {\
|
||||||
|
"packageLocation": "./.yarn/__virtual__/ts-node-virtual-c4e9951caa/0/cache/ts-node-npm-10.9.1-6c268be7f4-090adff130.zip/node_modules/ts-node/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["ts-node", "virtual:b442cf0427cc365d1c137f7340f9b81f9b204561afe791a8564ae9590c3a7fc4b5f793aaf8817b946f75a3cb64d03ef8790eb847f8b576b41e700da7b00c240c#npm:10.9.1"],\
|
||||||
["@cspotcode/source-map-support", "npm:0.8.1"],\
|
["@cspotcode/source-map-support", "npm:0.8.1"],\
|
||||||
["@swc/core", null],\
|
["@swc/core", null],\
|
||||||
["@swc/wasm", null],\
|
["@swc/wasm", null],\
|
||||||
@@ -12736,6 +12780,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
|||||||
["uuid", "npm:8.3.2"]\
|
["uuid", "npm:8.3.2"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
|
}],\
|
||||||
|
["npm:9.0.0", {\
|
||||||
|
"packageLocation": "./.yarn/cache/uuid-npm-9.0.0-46c41e3e43-8dd2c83c43.zip/node_modules/uuid/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["uuid", "npm:9.0.0"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["v8-compile-cache", [\
|
["v8-compile-cache", [\
|
||||||
|
|||||||
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
+14
@@ -1,3 +1,17 @@
|
|||||||
|
### v9.0.0 (2022-08-01)
|
||||||
|
|
||||||
|
* **BREAKING** Removed support for Node 12.
|
||||||
|
|
||||||
|
The minimum supported version is now Node v14. For further information on our support policy, see: https://docs.newrelic.com/docs/agents/nodejs-agent/getting-started/compatibility-requirements-nodejs-agent.
|
||||||
|
|
||||||
|
* Added support for Node 18.
|
||||||
|
|
||||||
|
* Fixed GC binder to properly record Garbage Collection metrics in Node 18.
|
||||||
|
|
||||||
|
* Resolved several dev-dependency audit warnings.
|
||||||
|
|
||||||
|
* Bumped minimum `nan` version to ^2.16.0.
|
||||||
|
|
||||||
### v8.0.0 (2022-03-22)
|
### v8.0.0 (2022-03-22)
|
||||||
|
|
||||||
* **BREAKING** Removed RUSageMeter. This was used to get resource usage statistics via `libuv`. It is no longer needed since Node.js version 12 has support via `process.cpuUsage`.
|
* **BREAKING** Removed RUSageMeter. This was used to get resource usage statistics via `libuv`. It is no longer needed since Node.js version 12 has support via `process.cpuUsage`.
|
||||||
+6
-10
@@ -59,16 +59,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
|||||||
|
|
||||||
### nan
|
### nan
|
||||||
|
|
||||||
This product includes source derived from [nan](https://github.com/nodejs/nan) ([v2.15.0](https://github.com/nodejs/nan/tree/v2.15.0)), distributed under the [MIT License](https://github.com/nodejs/nan/blob/v2.15.0/LICENSE.md):
|
This product includes source derived from [nan](https://github.com/nodejs/nan) ([v2.16.0](https://github.com/nodejs/nan/tree/v2.16.0)), distributed under the [MIT License](https://github.com/nodejs/nan/blob/v2.16.0/LICENSE.md):
|
||||||
|
|
||||||
```
|
```
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
=====================
|
|
||||||
|
|
||||||
Copyright (c) 2018 NAN contributors
|
Copyright (c) 2018 [NAN contributors](<https://github.com/nodejs/nan#wg-members--collaborators>)
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
*NAN contributors listed at <https://github.com/nodejs/nan#contributors>*
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
@@ -106,7 +102,7 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||||||
|
|
||||||
### @newrelic/eslint-config
|
### @newrelic/eslint-config
|
||||||
|
|
||||||
This product includes source derived from [@newrelic/eslint-config](https://github.com/newrelic/eslint-config-newrelic) ([v0.0.2](https://github.com/newrelic/eslint-config-newrelic/tree/v0.0.2)), distributed under the [Apache-2.0 License](https://github.com/newrelic/eslint-config-newrelic/blob/v0.0.2/LICENSE):
|
This product includes source derived from [@newrelic/eslint-config](https://github.com/newrelic/eslint-config-newrelic) ([v0.0.4](https://github.com/newrelic/eslint-config-newrelic/tree/v0.0.4)), distributed under the [Apache-2.0 License](https://github.com/newrelic/eslint-config-newrelic/blob/v0.0.4/LICENSE):
|
||||||
|
|
||||||
```
|
```
|
||||||
Apache License
|
Apache License
|
||||||
@@ -539,7 +535,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
|||||||
|
|
||||||
### async
|
### async
|
||||||
|
|
||||||
This product includes source derived from [async](https://github.com/caolan/async) ([v3.2.0](https://github.com/caolan/async/tree/v3.2.0)), distributed under the [MIT License](https://github.com/caolan/async/blob/v3.2.0/LICENSE):
|
This product includes source derived from [async](https://github.com/caolan/async) ([v3.2.3](https://github.com/caolan/async/tree/v3.2.3)), distributed under the [MIT License](https://github.com/caolan/async/blob/v3.2.3/LICENSE):
|
||||||
|
|
||||||
```
|
```
|
||||||
Copyright (c) 2010-2018 Caolan McMahon
|
Copyright (c) 2010-2018 Caolan McMahon
|
||||||
@@ -1081,12 +1077,12 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
### tap
|
### tap
|
||||||
|
|
||||||
This product includes source derived from [tap](https://github.com/tapjs/node-tap) ([v15.0.9](https://github.com/tapjs/node-tap/tree/v15.0.9)), distributed under the [ISC License](https://github.com/tapjs/node-tap/blob/v15.0.9/LICENSE):
|
This product includes source derived from [tap](https://github.com/tapjs/node-tap) ([v16.0.1](https://github.com/tapjs/node-tap/tree/v16.0.1)), distributed under the [ISC License](https://github.com/tapjs/node-tap/blob/v16.0.1/LICENSE):
|
||||||
|
|
||||||
```
|
```
|
||||||
The ISC License
|
The ISC License
|
||||||
|
|
||||||
Copyright (c) Isaac Z. Schlueter and Contributors
|
Copyright (c) 2011-2022 Isaac Z. Schlueter and Contributors
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
+2
-2
@@ -326,8 +326,8 @@ ifeq ($(strip $(foreach prefix,$(NO_LOAD),\
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
quiet_cmd_regen_makefile = ACTION Regenerating $@
|
quiet_cmd_regen_makefile = ACTION Regenerating $@
|
||||||
cmd_regen_makefile = cd $(srcdir); /Users/karolsojko/workspace/server/.yarn/unplugged/node-gyp-npm-9.0.0-0eccfca4d1/node_modules/node-gyp/gyp/gyp_main.py -fmake --ignore-environment "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/Users/karolsojko/Library/Caches/node-gyp/16.15.1" "-Dnode_gyp_dir=/Users/karolsojko/workspace/server/.yarn/unplugged/node-gyp-npm-9.0.0-0eccfca4d1/node_modules/node-gyp" "-Dnode_lib_file=/Users/karolsojko/Library/Caches/node-gyp/16.15.1/<(target_arch)/node.lib" "-Dmodule_root_dir=/Users/karolsojko/workspace/server/.yarn/unplugged/@newrelic-native-metrics-npm-8.0.0-c254393d6e/node_modules/@newrelic/native-metrics" "-Dnode_engine=v8" "--depth=." "-Goutput_dir=." "--generator-output=build" -I/Users/karolsojko/workspace/server/.yarn/unplugged/@newrelic-native-metrics-npm-8.0.0-c254393d6e/node_modules/@newrelic/native-metrics/build/config.gypi -I/Users/karolsojko/workspace/server/.yarn/unplugged/node-gyp-npm-9.0.0-0eccfca4d1/node_modules/node-gyp/addon.gypi -I/Users/karolsojko/Library/Caches/node-gyp/16.15.1/include/node/common.gypi "--toplevel-dir=." binding.gyp
|
cmd_regen_makefile = cd $(srcdir); /Users/karolsojko/workspace/server/.yarn/unplugged/node-gyp-npm-9.0.0-0eccfca4d1/node_modules/node-gyp/gyp/gyp_main.py -fmake --ignore-environment "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/Users/karolsojko/Library/Caches/node-gyp/16.15.1" "-Dnode_gyp_dir=/Users/karolsojko/workspace/server/.yarn/unplugged/node-gyp-npm-9.0.0-0eccfca4d1/node_modules/node-gyp" "-Dnode_lib_file=/Users/karolsojko/Library/Caches/node-gyp/16.15.1/<(target_arch)/node.lib" "-Dmodule_root_dir=/Users/karolsojko/workspace/server/.yarn/unplugged/@newrelic-native-metrics-npm-9.0.0-590d2e713a/node_modules/@newrelic/native-metrics" "-Dnode_engine=v8" "--depth=." "-Goutput_dir=." "--generator-output=build" -I/Users/karolsojko/workspace/server/.yarn/unplugged/@newrelic-native-metrics-npm-9.0.0-590d2e713a/node_modules/@newrelic/native-metrics/build/config.gypi -I/Users/karolsojko/workspace/server/.yarn/unplugged/node-gyp-npm-9.0.0-0eccfca4d1/node_modules/node-gyp/addon.gypi -I/Users/karolsojko/Library/Caches/node-gyp/16.15.1/include/node/common.gypi "--toplevel-dir=." binding.gyp
|
||||||
Makefile: $(srcdir)/../../../../node-gyp-npm-9.0.0-0eccfca4d1/node_modules/node-gyp/addon.gypi $(srcdir)/../../../../../../../../Library/Caches/node-gyp/16.15.1/include/node/common.gypi $(srcdir)/binding.gyp $(srcdir)/build/config.gypi
|
Makefile: $(srcdir)/binding.gyp $(srcdir)/../../../../node-gyp-npm-9.0.0-0eccfca4d1/node_modules/node-gyp/addon.gypi $(srcdir)/../../../../../../../../Library/Caches/node-gyp/16.15.1/include/node/common.gypi $(srcdir)/build/config.gypi
|
||||||
$(call do_cmd,regen_makefile)
|
$(call do_cmd,regen_makefile)
|
||||||
|
|
||||||
# "all" is a concatenation of the "all" targets from all the included
|
# "all" is a concatenation of the "all" targets from all the included
|
||||||
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
+33
-17
@@ -5,20 +5,36 @@
|
|||||||
|
|
||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
var EventEmitter = require('events').EventEmitter
|
const EventEmitter = require('events').EventEmitter
|
||||||
var util = require('util')
|
const util = require('util')
|
||||||
var preBuild = require('./lib/pre-build')
|
const preBuild = require('./lib/pre-build')
|
||||||
var natives = preBuild.load('native_metrics')
|
const natives = preBuild.load('native_metrics')
|
||||||
|
const semver = require('semver')
|
||||||
|
|
||||||
var DEFAULT_TIMEOUT = 15 * 1000 // 15 seconds
|
const DEFAULT_TIMEOUT = 15 * 1000 // 15 seconds
|
||||||
var GC_TYPE_NAMES = {
|
let GC_TYPE_NAMES = null
|
||||||
1: 'Scavenge',
|
|
||||||
2: 'MarkSweepCompact',
|
|
||||||
4: 'IncrementalMarking',
|
|
||||||
8: 'ProcessWeakCallbacks',
|
|
||||||
|
|
||||||
3: 'All', // Node v4 and earlier only have Scavenge and MarkSweepCompact.
|
// In Node 18(v8 10) the GCType enum added `MinorMarkCompact`
|
||||||
15: 'All'
|
// we have to update our mapping to properly account for this
|
||||||
|
if (semver.satisfies(process.version, '>=18')) {
|
||||||
|
GC_TYPE_NAMES = {
|
||||||
|
1: 'Scavenge',
|
||||||
|
2: 'MinorMarkCompact',
|
||||||
|
4: 'MarkSweepCompact',
|
||||||
|
8: 'IncrementalMarking',
|
||||||
|
16: 'ProcessWeakCallbacks',
|
||||||
|
31: 'All'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
GC_TYPE_NAMES = {
|
||||||
|
1: 'Scavenge',
|
||||||
|
2: 'MarkSweepCompact',
|
||||||
|
4: 'IncrementalMarking',
|
||||||
|
8: 'ProcessWeakCallbacks',
|
||||||
|
|
||||||
|
3: 'All', // Node v4 and earlier only have Scavenge and MarkSweepCompact.
|
||||||
|
15: 'All'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -135,11 +151,11 @@ NativeMetricEmitter.prototype.getLoopMetrics = function getLoopMetrics() {
|
|||||||
* information on the GC events that happened.
|
* information on the GC events that happened.
|
||||||
*/
|
*/
|
||||||
NativeMetricEmitter.prototype.getGCMetrics = function getGCMetrics() {
|
NativeMetricEmitter.prototype.getGCMetrics = function getGCMetrics() {
|
||||||
var gcMetrics = this._gcBinder.read()
|
const gcMetrics = this._gcBinder.read()
|
||||||
var results = Object.create(null)
|
const results = Object.create(null)
|
||||||
for (var typeId in gcMetrics) {
|
for (const typeId in gcMetrics) {
|
||||||
if (gcMetrics.hasOwnProperty(typeId) && gcMetrics[typeId].count > 0) {
|
if (gcMetrics.hasOwnProperty(typeId) && gcMetrics[typeId].count > 0) {
|
||||||
var typeName = GC_TYPE_NAMES[String(typeId)]
|
const typeName = GC_TYPE_NAMES[String(typeId)]
|
||||||
results[typeName] = {
|
results[typeName] = {
|
||||||
typeId: parseInt(typeId, 10),
|
typeId: parseInt(typeId, 10),
|
||||||
type: typeName,
|
type: typeName,
|
||||||
@@ -151,7 +167,7 @@ NativeMetricEmitter.prototype.getGCMetrics = function getGCMetrics() {
|
|||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
|
|
||||||
var emitter = null
|
let emitter = null
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the {@link NativeMetricEmitter} singleton instance.
|
* Retrieves the {@link NativeMetricEmitter} singleton instance.
|
||||||
+2
-2
@@ -237,8 +237,8 @@ function download(target, cb) {
|
|||||||
return cb(new Error('Failed to download ' + url + ': code ' + res.statusCode))
|
return cb(new Error('Failed to download ' + url + ': code ' + res.statusCode))
|
||||||
}
|
}
|
||||||
|
|
||||||
var unzip = zlib.createGunzip()
|
const unzip = zlib.createGunzip()
|
||||||
var buffers = []
|
const buffers = []
|
||||||
let size = 0
|
let size = 0
|
||||||
res.pipe(unzip).on('data', function onResData(data) {
|
res.pipe(unzip).on('data', function onResData(data) {
|
||||||
buffers.push(data)
|
buffers.push(data)
|
||||||
+6
-6
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@newrelic/native-metrics",
|
"name": "@newrelic/native-metrics",
|
||||||
"version": "8.0.0",
|
"version": "9.0.0",
|
||||||
"description": "A module for generating metrics from V8.",
|
"description": "A module for generating metrics from V8.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -73,14 +73,14 @@
|
|||||||
],
|
],
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12",
|
"node": ">=14",
|
||||||
"npm": ">=6"
|
"npm": ">=6"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@newrelic/eslint-config": "^0.0.2",
|
"@newrelic/eslint-config": "^0.0.4",
|
||||||
"@newrelic/newrelic-oss-cli": "^0.1.2",
|
"@newrelic/newrelic-oss-cli": "^0.1.2",
|
||||||
"@newrelic/proxy": "^2.0.0",
|
"@newrelic/proxy": "^2.0.0",
|
||||||
"async": "^3.2.0",
|
"async": "^3.2.2",
|
||||||
"aws-sdk": "^2.266.1",
|
"aws-sdk": "^2.266.1",
|
||||||
"eslint": "^7.32.0",
|
"eslint": "^7.32.0",
|
||||||
"eslint-config-prettier": "^8.3.0",
|
"eslint-config-prettier": "^8.3.0",
|
||||||
@@ -93,11 +93,11 @@
|
|||||||
"prettier": "^2.3.2",
|
"prettier": "^2.3.2",
|
||||||
"segfault-handler": "^1.3.0",
|
"segfault-handler": "^1.3.0",
|
||||||
"sinon": "^11.1.2",
|
"sinon": "^11.1.2",
|
||||||
"tap": "^15.0.9"
|
"tap": "^16.0.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"https-proxy-agent": "^5.0.0",
|
"https-proxy-agent": "^5.0.0",
|
||||||
"nan": "^2.15.0",
|
"nan": "^2.16.0",
|
||||||
"semver": "^5.5.1"
|
"semver": "^5.5.1"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
+2
-2
@@ -60,12 +60,12 @@
|
|||||||
"ini": "^3.0.0",
|
"ini": "^3.0.0",
|
||||||
"npm-check-updates": "^16.0.1",
|
"npm-check-updates": "^16.0.1",
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^2.7.1",
|
||||||
"ts-node": "^10.8.1",
|
"ts-node": "^10.9.1",
|
||||||
"typescript": "^4.7.4"
|
"typescript": "^4.7.4"
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@3.2.1",
|
"packageManager": "yarn@3.2.1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@sentry/node": "^7.3.0",
|
"@sentry/node": "^7.3.0",
|
||||||
"newrelic": "^8.14.1"
|
"newrelic": "^9.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,138 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [1.28.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.27.0...@standardnotes/analytics@1.28.0) (2022-09-09)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **syncing-server:** add tracking files count in stats ([52cc646](https://github.com/standardnotes/server/commit/52cc6462a66dae3bd6c05f551d4ba661c8a9b8c8))
|
||||||
|
|
||||||
|
# [1.27.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.26.0...@standardnotes/analytics@1.27.0) (2022-09-09)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **api-gateway:** add tracking general activity for free and paid users breakdown ([0afd3de](https://github.com/standardnotes/server/commit/0afd3de9779e2abe10deede24626a3cbe6b15e6c))
|
||||||
|
|
||||||
|
# [1.26.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.25.0...@standardnotes/analytics@1.26.0) (2022-09-09)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **syncing-server:** add statistics for notes count for free and paid users ([c9ec7b4](https://github.com/standardnotes/server/commit/c9ec7b492aea1911e441ed8ad9a155f871be2ef7))
|
||||||
|
|
||||||
|
# [1.25.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.24.0...@standardnotes/analytics@1.25.0) (2022-09-07)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **analytics:** add discrete period key generation for last 7 days ([f872c7d](https://github.com/standardnotes/server/commit/f872c7dfe9f120f40dd0c28a9e0f5749eb251643))
|
||||||
|
|
||||||
|
# [1.24.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.23.0...@standardnotes/analytics@1.24.0) (2022-09-07)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **analytics:** add calculation retention for two activities ([7132dc3](https://github.com/standardnotes/server/commit/7132dc3ac0cf878d2c326243747343e8a6746e2f))
|
||||||
|
|
||||||
|
# [1.23.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.22.0...@standardnotes/analytics@1.23.0) (2022-09-07)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **auth:** add measuring registration to subscription time statistics ([b618252](https://github.com/standardnotes/server/commit/b61825235eebaf5eddb55cbda173176ca43c0099))
|
||||||
|
|
||||||
|
# [1.22.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.21.1...@standardnotes/analytics@1.22.0) (2022-09-06)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **auth:** add statistics for refunds and account deletions ([d7ae2f0](https://github.com/standardnotes/server/commit/d7ae2f06255b19eb5d3403a4989610390064754e))
|
||||||
|
|
||||||
|
## [1.21.1](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.21.0...@standardnotes/analytics@1.21.1) (2022-09-06)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **analytics:** increment by float instead of integer on measures ([cb81f81](https://github.com/standardnotes/server/commit/cb81f819ba30a45f27ec344480b5ef22e5a0a50d))
|
||||||
|
|
||||||
|
# [1.21.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.20.0...@standardnotes/analytics@1.21.0) (2022-09-05)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **auth:** add measuring subscription length ([fa10827](https://github.com/standardnotes/server/commit/fa108274430d8dff1016ddcba5bbcb2778eb781b))
|
||||||
|
|
||||||
|
# [1.20.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.19.0...@standardnotes/analytics@1.20.0) (2022-09-05)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **auth:** add keeping stats on payments ([0c176b7](https://github.com/standardnotes/server/commit/0c176b70f8281e1e490224b9c7ab85f272a3d4e9))
|
||||||
|
|
||||||
|
# [1.19.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.18.1...@standardnotes/analytics@1.19.0) (2022-09-05)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **analytics:** add statistics measurements tracking ([a36cb92](https://github.com/standardnotes/server/commit/a36cb925ff3bd8396a53f58c3e954549e904d694))
|
||||||
|
|
||||||
|
## [1.18.1](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.18.0...@standardnotes/analytics@1.18.1) (2022-08-15)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **analytics:** add payment success activity ([9307893](https://github.com/standardnotes/server/commit/930789316c2eec8227f26e75d4917796168f2d08))
|
||||||
|
|
||||||
|
# [1.18.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.17.2...@standardnotes/analytics@1.18.0) (2022-08-15)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **auth:** add payment failed event handler ([58c5b58](https://github.com/standardnotes/server/commit/58c5b586a904cf1fd179cc28783a6ae7da688063))
|
||||||
|
|
||||||
|
## [1.17.2](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.17.1...@standardnotes/analytics@1.17.2) (2022-08-15)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **analytics:** quarterly calculations over time ([43d957c](https://github.com/standardnotes/server/commit/43d957c8d382b501e8101b51e30b33f18a4dd871))
|
||||||
|
|
||||||
|
## [1.17.1](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.17.0...@standardnotes/analytics@1.17.1) (2022-08-15)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **analytics:** expire bitop keys ([269eef7](https://github.com/standardnotes/server/commit/269eef7ef31343390c6909350bf1bfede94c24b3))
|
||||||
|
|
||||||
|
# [1.17.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.16.0...@standardnotes/analytics@1.17.0) (2022-08-15)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **api-gateway:** add quarterly analytics ([67378e4](https://github.com/standardnotes/server/commit/67378e4535ef2760cfe3fe27256ffe117ee11a71))
|
||||||
|
|
||||||
|
# [1.16.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.15.0...@standardnotes/analytics@1.16.0) (2022-08-15)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **analytics:** add calculating quarterly stats ([32c8333](https://github.com/standardnotes/server/commit/32c8333564dea742b28ccc6f09e5fa33dd1f7af2))
|
||||||
|
|
||||||
|
# [1.15.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.14.0...@standardnotes/analytics@1.15.0) (2022-08-11)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add analytics for subscription cancelling, refunding and account deletion ([1607638](https://github.com/standardnotes/server/commit/16076382bae74552a35901bb5474e2c2c2d96f43))
|
||||||
|
|
||||||
|
# [1.14.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.13.0...@standardnotes/analytics@1.14.0) (2022-08-09)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **auth:** add subscription events to analytics ([24e439f](https://github.com/standardnotes/server/commit/24e439f017df23d0158940848c10e0b3398720b2))
|
||||||
|
|
||||||
|
# [1.13.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.12.2...@standardnotes/analytics@1.13.0) (2022-08-09)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **auth:** track registration in analytics ([f25195b](https://github.com/standardnotes/server/commit/f25195b2c156fa03ca5806ef568c4195da7b688a))
|
||||||
|
|
||||||
|
## [1.12.2](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.12.1...@standardnotes/analytics@1.12.2) (2022-08-09)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **analytics:** replace AND to OR operation on bitop ([572ea3f](https://github.com/standardnotes/server/commit/572ea3febe136518a33154937cf39347adf040ff))
|
||||||
|
|
||||||
|
## [1.12.1](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.12.0...@standardnotes/analytics@1.12.1) (2022-08-09)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **analytics:** bitop over analytics time ([0ffec66](https://github.com/standardnotes/server/commit/0ffec66bea480fe9cec55415d90b608fddc26a84))
|
||||||
|
|
||||||
# [1.12.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.11.0...@standardnotes/analytics@1.12.0) (2022-08-09)
|
# [1.12.0](https://github.com/standardnotes/server/compare/@standardnotes/analytics@1.11.0...@standardnotes/analytics@1.12.0) (2022-08-09)
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/analytics",
|
"name": "@standardnotes/analytics",
|
||||||
"version": "1.12.0",
|
"version": "1.28.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14.0.0 <17.0.0"
|
"node": ">=14.0.0 <17.0.0"
|
||||||
},
|
},
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"prebuild": "yarn clean",
|
"prebuild": "yarn clean",
|
||||||
"build": "tsc -p tsconfig.json",
|
"build": "tsc -p tsconfig.json",
|
||||||
"lint": "eslint . --ext .ts",
|
"lint": "eslint . --ext .ts",
|
||||||
"test:unit": "jest spec --coverage"
|
"test": "jest spec --coverage"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/ioredis": "^4.28.10",
|
"@types/ioredis": "^4.28.10",
|
||||||
|
|||||||
@@ -1,8 +1,19 @@
|
|||||||
export enum AnalyticsActivity {
|
export enum AnalyticsActivity {
|
||||||
GeneralActivity = 'general-activity',
|
GeneralActivity = 'general-activity',
|
||||||
|
GeneralActivityFreeUsers = 'general-activity-free-users',
|
||||||
|
GeneralActivityPaidUsers = 'general-activity-paid-users',
|
||||||
EditingItems = 'editing-items',
|
EditingItems = 'editing-items',
|
||||||
|
CheckingIntegrity = 'checking-integrity',
|
||||||
Login = 'login',
|
Login = 'login',
|
||||||
|
Register = 'register',
|
||||||
|
DeleteAccount = 'DeleteAccount',
|
||||||
|
SubscriptionPurchased = 'subscription-purchased',
|
||||||
|
SubscriptionRenewed = 'subscription-renewed',
|
||||||
|
SubscriptionRefunded = 'subscription-refunded',
|
||||||
|
SubscriptionCancelled = 'subscription-cancelled',
|
||||||
EmailUnbackedUpData = 'email-unbacked-up-data',
|
EmailUnbackedUpData = 'email-unbacked-up-data',
|
||||||
EmailBackup = 'email-backup',
|
EmailBackup = 'email-backup',
|
||||||
LimitedDiscountOfferPurchased = 'limited-discount-offer-purchased',
|
LimitedDiscountOfferPurchased = 'limited-discount-offer-purchased',
|
||||||
|
PaymentFailed = 'payment-failed',
|
||||||
|
PaymentSuccess = 'payment-success',
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,12 @@ export interface AnalyticsStoreInterface {
|
|||||||
markActivity(activities: AnalyticsActivity[], analyticsId: number, periods: Period[]): Promise<void>
|
markActivity(activities: AnalyticsActivity[], analyticsId: number, periods: Period[]): Promise<void>
|
||||||
wasActivityDone(activity: AnalyticsActivity, analyticsId: number, period: Period): Promise<boolean>
|
wasActivityDone(activity: AnalyticsActivity, analyticsId: number, period: Period): Promise<boolean>
|
||||||
calculateActivityRetention(activity: AnalyticsActivity, firstPeriod: Period, secondPeriod: Period): Promise<number>
|
calculateActivityRetention(activity: AnalyticsActivity, firstPeriod: Period, secondPeriod: Period): Promise<number>
|
||||||
|
calculateActivitiesRetention(parameters: {
|
||||||
|
firstActivity: AnalyticsActivity
|
||||||
|
firstActivityPeriodKey: string
|
||||||
|
secondActivity: AnalyticsActivity
|
||||||
|
secondActivityPeriodKey: string
|
||||||
|
}): Promise<number>
|
||||||
calculateActivityTotalCount(activity: AnalyticsActivity, period: Period): Promise<number>
|
calculateActivityTotalCount(activity: AnalyticsActivity, period: Period): Promise<number>
|
||||||
calculateActivityChangesTotalCount(
|
calculateActivityChangesTotalCount(
|
||||||
activity: AnalyticsActivity,
|
activity: AnalyticsActivity,
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
export enum StatisticsMeasure {
|
||||||
|
Income = 'income',
|
||||||
|
SubscriptionLength = 'subscription-length',
|
||||||
|
RegistrationLength = 'registration-length',
|
||||||
|
RegistrationToSubscriptionTime = 'registration-to-subscription-time',
|
||||||
|
Refunds = 'refunds',
|
||||||
|
NotesCountFreeUsers = 'notes-count-free-users',
|
||||||
|
NotesCountPaidUsers = 'notes-count-paid-users',
|
||||||
|
FilesCount = 'files-count',
|
||||||
|
}
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
|
import { Period } from '../Time/Period'
|
||||||
|
import { StatisticsMeasure } from './StatisticsMeasure'
|
||||||
|
|
||||||
export interface StatisticsStoreInterface {
|
export interface StatisticsStoreInterface {
|
||||||
incrementSNJSVersionUsage(snjsVersion: string): Promise<void>
|
incrementSNJSVersionUsage(snjsVersion: string): Promise<void>
|
||||||
incrementApplicationVersionUsage(applicationVersion: string): Promise<void>
|
incrementApplicationVersionUsage(applicationVersion: string): Promise<void>
|
||||||
@@ -5,4 +8,7 @@ export interface StatisticsStoreInterface {
|
|||||||
getYesterdaySNJSUsage(): Promise<Array<{ version: string; count: number }>>
|
getYesterdaySNJSUsage(): Promise<Array<{ version: string; count: number }>>
|
||||||
getYesterdayApplicationUsage(): Promise<Array<{ version: string; count: number }>>
|
getYesterdayApplicationUsage(): Promise<Array<{ version: string; count: number }>>
|
||||||
getYesterdayOutOfSyncIncidents(): Promise<number>
|
getYesterdayOutOfSyncIncidents(): Promise<number>
|
||||||
|
incrementMeasure(measure: StatisticsMeasure, value: number, periods: Period[]): Promise<void>
|
||||||
|
getMeasureAverage(measure: StatisticsMeasure, period: Period): Promise<number>
|
||||||
|
getMeasureTotal(measure: StatisticsMeasure, period: Period): Promise<number>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,4 +8,9 @@ export enum Period {
|
|||||||
ThisMonth,
|
ThisMonth,
|
||||||
LastMonth,
|
LastMonth,
|
||||||
Last30Days,
|
Last30Days,
|
||||||
|
Last7Days,
|
||||||
|
Q1ThisYear,
|
||||||
|
Q2ThisYear,
|
||||||
|
Q3ThisYear,
|
||||||
|
Q4ThisYear,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,34 @@ describe('PeriodKeyGenerator', () => {
|
|||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should generate period keys for last 7 days', () => {
|
||||||
|
expect(createGenerator().getDiscretePeriodKeys(Period.Last7Days)).toEqual([
|
||||||
|
'2022-5-17',
|
||||||
|
'2022-5-18',
|
||||||
|
'2022-5-19',
|
||||||
|
'2022-5-20',
|
||||||
|
'2022-5-21',
|
||||||
|
'2022-5-22',
|
||||||
|
'2022-5-23',
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should generate period keys for Q1', () => {
|
||||||
|
expect(createGenerator().getDiscretePeriodKeys(Period.Q1ThisYear)).toEqual(['2022-1', '2022-2', '2022-3'])
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should generate period keys for Q2', () => {
|
||||||
|
expect(createGenerator().getDiscretePeriodKeys(Period.Q2ThisYear)).toEqual(['2022-4', '2022-5', '2022-6'])
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should generate period keys for Q3', () => {
|
||||||
|
expect(createGenerator().getDiscretePeriodKeys(Period.Q3ThisYear)).toEqual(['2022-7', '2022-8', '2022-9'])
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should generate period keys for Q4', () => {
|
||||||
|
expect(createGenerator().getDiscretePeriodKeys(Period.Q4ThisYear)).toEqual(['2022-10', '2022-11', '2022-12'])
|
||||||
|
})
|
||||||
|
|
||||||
it('should generate a period key for today', () => {
|
it('should generate a period key for today', () => {
|
||||||
expect(createGenerator().getPeriodKey(Period.Today)).toEqual('2022-5-24')
|
expect(createGenerator().getPeriodKey(Period.Today)).toEqual('2022-5-24')
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -12,6 +12,20 @@ export class PeriodKeyGenerator implements PeriodKeyGeneratorInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return periodKeys
|
return periodKeys
|
||||||
|
case Period.Last7Days:
|
||||||
|
for (let i = 1; i <= 7; i++) {
|
||||||
|
periodKeys.unshift(this.getDailyKey(this.getDateNDaysBefore(i)))
|
||||||
|
}
|
||||||
|
|
||||||
|
return periodKeys
|
||||||
|
case Period.Q1ThisYear:
|
||||||
|
return this.generateMonthlyKeysRange(0, 3)
|
||||||
|
case Period.Q2ThisYear:
|
||||||
|
return this.generateMonthlyKeysRange(3, 6)
|
||||||
|
case Period.Q3ThisYear:
|
||||||
|
return this.generateMonthlyKeysRange(6, 9)
|
||||||
|
case Period.Q4ThisYear:
|
||||||
|
return this.generateMonthlyKeysRange(9, 12)
|
||||||
default:
|
default:
|
||||||
throw new Error(`Unsuporrted period: ${period}`)
|
throw new Error(`Unsuporrted period: ${period}`)
|
||||||
}
|
}
|
||||||
@@ -115,4 +129,16 @@ export class PeriodKeyGenerator implements PeriodKeyGeneratorInterface {
|
|||||||
|
|
||||||
return yesterday
|
return yesterday
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private generateMonthlyKeysRange(startingMonthIndex: number, endingMonthIndex: number): string[] {
|
||||||
|
const today = new Date()
|
||||||
|
const keys = []
|
||||||
|
for (let i = startingMonthIndex; i < endingMonthIndex; i++) {
|
||||||
|
today.setMonth(i)
|
||||||
|
today.setDate(1)
|
||||||
|
keys.push(this.getMonthlyKey(today))
|
||||||
|
}
|
||||||
|
|
||||||
|
return keys
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
export * from './Analytics/AnalyticsActivity'
|
export * from './Analytics/AnalyticsActivity'
|
||||||
export * from './Analytics/AnalyticsStoreInterface'
|
export * from './Analytics/AnalyticsStoreInterface'
|
||||||
|
export * from './Statistics/StatisticsMeasure'
|
||||||
export * from './Statistics/StatisticsStoreInterface'
|
export * from './Statistics/StatisticsStoreInterface'
|
||||||
export * from './Time/Period'
|
export * from './Time/Period'
|
||||||
export * from './Time/PeriodKeyGenerator'
|
export * from './Time/PeriodKeyGenerator'
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ describe('RedisAnalyticsStore', () => {
|
|||||||
redisClient.setbit = jest.fn()
|
redisClient.setbit = jest.fn()
|
||||||
redisClient.getbit = jest.fn().mockReturnValue(1)
|
redisClient.getbit = jest.fn().mockReturnValue(1)
|
||||||
redisClient.bitop = jest.fn()
|
redisClient.bitop = jest.fn()
|
||||||
|
redisClient.expire = jest.fn()
|
||||||
|
|
||||||
periodKeyGenerator = {} as jest.Mocked<PeriodKeyGeneratorInterface>
|
periodKeyGenerator = {} as jest.Mocked<PeriodKeyGeneratorInterface>
|
||||||
periodKeyGenerator.getPeriodKey = jest.fn().mockReturnValue('period-key')
|
periodKeyGenerator.getPeriodKey = jest.fn().mockReturnValue('period-key')
|
||||||
@@ -36,22 +37,27 @@ describe('RedisAnalyticsStore', () => {
|
|||||||
|
|
||||||
await createStore().calculateActivityTotalCountOverTime(AnalyticsActivity.EditingItems, Period.Last30Days)
|
await createStore().calculateActivityTotalCountOverTime(AnalyticsActivity.EditingItems, Period.Last30Days)
|
||||||
|
|
||||||
expect(redisClient.bitop).toHaveBeenCalledTimes(2)
|
expect(redisClient.bitop).toHaveBeenCalledTimes(1)
|
||||||
expect(redisClient.bitop).toHaveBeenNthCalledWith(
|
expect(redisClient.bitop).toHaveBeenNthCalledWith(
|
||||||
1,
|
1,
|
||||||
'AND',
|
'OR',
|
||||||
'bitmap:action:editing-items:timespan:2022-4-24-iteration-0',
|
'bitmap:action:editing-items:timespan:2022-4-24-2022-4-26',
|
||||||
'bitmap:action:editing-items:timespan:2022-4-24',
|
'bitmap:action:editing-items:timespan:2022-4-24',
|
||||||
'bitmap:action:editing-items:timespan:2022-4-25',
|
'bitmap:action:editing-items:timespan:2022-4-25',
|
||||||
)
|
|
||||||
expect(redisClient.bitop).toHaveBeenNthCalledWith(
|
|
||||||
2,
|
|
||||||
'AND',
|
|
||||||
'bitmap:action:editing-items:timespan:2022-4-24-iteration-1',
|
|
||||||
'bitmap:action:editing-items:timespan:2022-4-24-iteration-0',
|
|
||||||
'bitmap:action:editing-items:timespan:2022-4-26',
|
'bitmap:action:editing-items:timespan:2022-4-26',
|
||||||
)
|
)
|
||||||
expect(redisClient.bitcount).toHaveBeenCalledWith('bitmap:action:editing-items:timespan:2022-4-24-iteration-1')
|
expect(redisClient.bitcount).toHaveBeenCalledWith('bitmap:action:editing-items:timespan:2022-4-24-2022-4-26')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not calculate total count over time of activities if period is unsupported', async () => {
|
||||||
|
let caughtError = null
|
||||||
|
try {
|
||||||
|
await createStore().calculateActivityTotalCountOverTime(AnalyticsActivity.EditingItems, Period.LastWeek)
|
||||||
|
} catch (error) {
|
||||||
|
caughtError = error
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(caughtError).not.toBeNull()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should calculate total count changes of activities', async () => {
|
it('should calculate total count changes of activities', async () => {
|
||||||
@@ -119,7 +125,7 @@ describe('RedisAnalyticsStore', () => {
|
|||||||
|
|
||||||
expect(redisClient.bitop).toHaveBeenCalledWith(
|
expect(redisClient.bitop).toHaveBeenCalledWith(
|
||||||
'AND',
|
'AND',
|
||||||
'bitmap:action:editing-items:timespan:period-key-period-key',
|
'bitmap:action:editing-items-editing-items:timespan:period-key',
|
||||||
'bitmap:action:editing-items:timespan:period-key',
|
'bitmap:action:editing-items:timespan:period-key',
|
||||||
'bitmap:action:editing-items:timespan:period-key',
|
'bitmap:action:editing-items:timespan:period-key',
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -9,38 +9,40 @@ export class RedisAnalyticsStore implements AnalyticsStoreInterface {
|
|||||||
constructor(private periodKeyGenerator: PeriodKeyGeneratorInterface, private redisClient: IORedis.Redis) {}
|
constructor(private periodKeyGenerator: PeriodKeyGeneratorInterface, private redisClient: IORedis.Redis) {}
|
||||||
|
|
||||||
async calculateActivityTotalCountOverTime(activity: AnalyticsActivity, period: Period): Promise<number> {
|
async calculateActivityTotalCountOverTime(activity: AnalyticsActivity, period: Period): Promise<number> {
|
||||||
if (period !== Period.Last30Days) {
|
if (
|
||||||
|
![Period.Last30Days, Period.Q1ThisYear, Period.Q2ThisYear, Period.Q3ThisYear, Period.Q4ThisYear].includes(period)
|
||||||
|
) {
|
||||||
throw new Error(`Unsuporrted period: ${period}`)
|
throw new Error(`Unsuporrted period: ${period}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
const periodKeys = this.periodKeyGenerator.getDiscretePeriodKeys(Period.Last30Days)
|
const periodKeys = this.periodKeyGenerator.getDiscretePeriodKeys(period)
|
||||||
let previousPeriodKey = periodKeys[0]
|
await this.redisClient.bitop(
|
||||||
let intersectionPeriodKey = null
|
'OR',
|
||||||
for (let i = 0; i < periodKeys.length - 1; i++) {
|
`bitmap:action:${activity}:timespan:${periodKeys[0]}-${periodKeys[periodKeys.length - 1]}`,
|
||||||
intersectionPeriodKey = `${periodKeys[0]}-iteration-${i}`
|
...periodKeys.map((p) => `bitmap:action:${activity}:timespan:${p}`),
|
||||||
|
)
|
||||||
|
|
||||||
await this.redisClient.bitop(
|
await this.redisClient.expire(
|
||||||
'AND',
|
`bitmap:action:${activity}:timespan:${periodKeys[0]}-${periodKeys[periodKeys.length - 1]}`,
|
||||||
`bitmap:action:${activity}:timespan:${intersectionPeriodKey}`,
|
3600,
|
||||||
`bitmap:action:${activity}:timespan:${previousPeriodKey}`,
|
)
|
||||||
`bitmap:action:${activity}:timespan:${periodKeys[i + 1]}`,
|
|
||||||
)
|
|
||||||
|
|
||||||
previousPeriodKey = intersectionPeriodKey
|
return this.redisClient.bitcount(
|
||||||
}
|
`bitmap:action:${activity}:timespan:${periodKeys[0]}-${periodKeys[periodKeys.length - 1]}`,
|
||||||
|
)
|
||||||
return this.redisClient.bitcount(`bitmap:action:${activity}:timespan:${intersectionPeriodKey}`)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async calculateActivityChangesTotalCount(
|
async calculateActivityChangesTotalCount(
|
||||||
activity: AnalyticsActivity,
|
activity: AnalyticsActivity,
|
||||||
period: Period,
|
period: Period,
|
||||||
): Promise<Array<{ periodKey: string; totalCount: number }>> {
|
): Promise<Array<{ periodKey: string; totalCount: number }>> {
|
||||||
if (period !== Period.Last30Days) {
|
if (
|
||||||
|
![Period.Last30Days, Period.Q1ThisYear, Period.Q2ThisYear, Period.Q3ThisYear, Period.Q4ThisYear].includes(period)
|
||||||
|
) {
|
||||||
throw new Error(`Unsuporrted period: ${period}`)
|
throw new Error(`Unsuporrted period: ${period}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
const periodKeys = this.periodKeyGenerator.getDiscretePeriodKeys(Period.Last30Days)
|
const periodKeys = this.periodKeyGenerator.getDiscretePeriodKeys(period)
|
||||||
const counts = []
|
const counts = []
|
||||||
for (const periodKey of periodKeys) {
|
for (const periodKey of periodKeys) {
|
||||||
counts.push({
|
counts.push({
|
||||||
@@ -93,30 +95,43 @@ export class RedisAnalyticsStore implements AnalyticsStoreInterface {
|
|||||||
return bitValue === 1
|
return bitValue === 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async calculateActivitiesRetention(parameters: {
|
||||||
|
firstActivity: AnalyticsActivity
|
||||||
|
firstActivityPeriodKey: string
|
||||||
|
secondActivity: AnalyticsActivity
|
||||||
|
secondActivityPeriodKey: string
|
||||||
|
}): Promise<number> {
|
||||||
|
const diffKey = `bitmap:action:${parameters.firstActivity}-${parameters.secondActivity}:timespan:${parameters.secondActivityPeriodKey}`
|
||||||
|
|
||||||
|
await this.redisClient.bitop(
|
||||||
|
'AND',
|
||||||
|
diffKey,
|
||||||
|
`bitmap:action:${parameters.firstActivity}:timespan:${parameters.firstActivityPeriodKey}`,
|
||||||
|
`bitmap:action:${parameters.secondActivity}:timespan:${parameters.secondActivityPeriodKey}`,
|
||||||
|
)
|
||||||
|
|
||||||
|
await this.redisClient.expire(diffKey, 3600)
|
||||||
|
|
||||||
|
const retainedTotalInActivity = await this.redisClient.bitcount(diffKey)
|
||||||
|
|
||||||
|
const initialTotalInActivity = await this.redisClient.bitcount(
|
||||||
|
`bitmap:action:${parameters.firstActivity}:timespan:${parameters.firstActivityPeriodKey}`,
|
||||||
|
)
|
||||||
|
|
||||||
|
return Math.ceil((retainedTotalInActivity * 100) / initialTotalInActivity)
|
||||||
|
}
|
||||||
|
|
||||||
async calculateActivityRetention(
|
async calculateActivityRetention(
|
||||||
activity: AnalyticsActivity,
|
activity: AnalyticsActivity,
|
||||||
firstPeriod: Period,
|
firstPeriod: Period,
|
||||||
secondPeriod: Period,
|
secondPeriod: Period,
|
||||||
): Promise<number> {
|
): Promise<number> {
|
||||||
const initialPeriodKey = this.periodKeyGenerator.getPeriodKey(firstPeriod)
|
return this.calculateActivitiesRetention({
|
||||||
const subsequentPeriodKey = this.periodKeyGenerator.getPeriodKey(secondPeriod)
|
firstActivity: activity,
|
||||||
|
firstActivityPeriodKey: this.periodKeyGenerator.getPeriodKey(firstPeriod),
|
||||||
const diffKey = `bitmap:action:${activity}:timespan:${initialPeriodKey}-${subsequentPeriodKey}`
|
secondActivity: activity,
|
||||||
|
secondActivityPeriodKey: this.periodKeyGenerator.getPeriodKey(secondPeriod),
|
||||||
await this.redisClient.bitop(
|
})
|
||||||
'AND',
|
|
||||||
diffKey,
|
|
||||||
`bitmap:action:${activity}:timespan:${initialPeriodKey}`,
|
|
||||||
`bitmap:action:${activity}:timespan:${subsequentPeriodKey}`,
|
|
||||||
)
|
|
||||||
|
|
||||||
const retainedTotalInActivity = await this.redisClient.bitcount(diffKey)
|
|
||||||
|
|
||||||
const initialTotalInActivity = await this.redisClient.bitcount(
|
|
||||||
`bitmap:action:${activity}:timespan:${initialPeriodKey}`,
|
|
||||||
)
|
|
||||||
|
|
||||||
return Math.ceil((retainedTotalInActivity * 100) / initialTotalInActivity)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async calculateActivityTotalCount(activity: AnalyticsActivity, period: Period): Promise<number> {
|
async calculateActivityTotalCount(activity: AnalyticsActivity, period: Period): Promise<number> {
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import * as IORedis from 'ioredis'
|
import * as IORedis from 'ioredis'
|
||||||
import { PeriodKeyGeneratorInterface } from '../../Domain'
|
|
||||||
|
import { Period, PeriodKeyGeneratorInterface } from '../../Domain'
|
||||||
|
import { StatisticsMeasure } from '../../Domain/Statistics/StatisticsMeasure'
|
||||||
|
|
||||||
import { RedisStatisticsStore } from './RedisStatisticsStore'
|
import { RedisStatisticsStore } from './RedisStatisticsStore'
|
||||||
|
|
||||||
@@ -13,6 +15,7 @@ describe('RedisStatisticsStore', () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pipeline = {} as jest.Mocked<IORedis.Pipeline>
|
pipeline = {} as jest.Mocked<IORedis.Pipeline>
|
||||||
pipeline.incr = jest.fn()
|
pipeline.incr = jest.fn()
|
||||||
|
pipeline.incrbyfloat = jest.fn()
|
||||||
pipeline.setbit = jest.fn()
|
pipeline.setbit = jest.fn()
|
||||||
pipeline.exec = jest.fn()
|
pipeline.exec = jest.fn()
|
||||||
|
|
||||||
@@ -88,4 +91,30 @@ describe('RedisStatisticsStore', () => {
|
|||||||
expect(pipeline.incr).toHaveBeenCalled()
|
expect(pipeline.incr).toHaveBeenCalled()
|
||||||
expect(pipeline.exec).toHaveBeenCalled()
|
expect(pipeline.exec).toHaveBeenCalled()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should increment measure by a value', async () => {
|
||||||
|
await createStore().incrementMeasure(StatisticsMeasure.Income, 2, [Period.Today, Period.ThisMonth])
|
||||||
|
|
||||||
|
expect(pipeline.incr).toHaveBeenCalledTimes(2)
|
||||||
|
expect(pipeline.incrbyfloat).toHaveBeenCalledTimes(2)
|
||||||
|
expect(pipeline.exec).toHaveBeenCalled()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should count a measurement average', async () => {
|
||||||
|
redisClient.get = jest.fn().mockReturnValueOnce('5').mockReturnValueOnce('2')
|
||||||
|
|
||||||
|
expect(await createStore().getMeasureAverage(StatisticsMeasure.Income, Period.Today)).toEqual(2 / 5)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should count a measurement average - 0 increments', async () => {
|
||||||
|
redisClient.get = jest.fn().mockReturnValueOnce(null).mockReturnValueOnce(null)
|
||||||
|
|
||||||
|
expect(await createStore().getMeasureAverage(StatisticsMeasure.Income, Period.Today)).toEqual(0)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should count a measurement average - 0 total value', async () => {
|
||||||
|
redisClient.get = jest.fn().mockReturnValueOnce(5).mockReturnValueOnce(null)
|
||||||
|
|
||||||
|
expect(await createStore().getMeasureAverage(StatisticsMeasure.Income, Period.Today)).toEqual(0)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,12 +1,49 @@
|
|||||||
import * as IORedis from 'ioredis'
|
import * as IORedis from 'ioredis'
|
||||||
|
|
||||||
import { Period, PeriodKeyGeneratorInterface } from '../../Domain'
|
import { Period, PeriodKeyGeneratorInterface } from '../../Domain'
|
||||||
|
import { StatisticsMeasure } from '../../Domain/Statistics/StatisticsMeasure'
|
||||||
|
|
||||||
import { StatisticsStoreInterface } from '../../Domain/Statistics/StatisticsStoreInterface'
|
import { StatisticsStoreInterface } from '../../Domain/Statistics/StatisticsStoreInterface'
|
||||||
|
|
||||||
export class RedisStatisticsStore implements StatisticsStoreInterface {
|
export class RedisStatisticsStore implements StatisticsStoreInterface {
|
||||||
constructor(private periodKeyGenerator: PeriodKeyGeneratorInterface, private redisClient: IORedis.Redis) {}
|
constructor(private periodKeyGenerator: PeriodKeyGeneratorInterface, private redisClient: IORedis.Redis) {}
|
||||||
|
|
||||||
|
async getMeasureTotal(measure: StatisticsMeasure, period: Period): Promise<number> {
|
||||||
|
const totalValue = await this.redisClient.get(
|
||||||
|
`count:measure:${measure}:timespan:${this.periodKeyGenerator.getPeriodKey(period)}`,
|
||||||
|
)
|
||||||
|
|
||||||
|
if (totalValue === null) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return +totalValue
|
||||||
|
}
|
||||||
|
|
||||||
|
async incrementMeasure(measure: StatisticsMeasure, value: number, periods: Period[]): Promise<void> {
|
||||||
|
const pipeline = this.redisClient.pipeline()
|
||||||
|
|
||||||
|
for (const period of periods) {
|
||||||
|
pipeline.incrbyfloat(`count:measure:${measure}:timespan:${this.periodKeyGenerator.getPeriodKey(period)}`, value)
|
||||||
|
pipeline.incr(`count:increments:${measure}:timespan:${this.periodKeyGenerator.getPeriodKey(period)}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
await pipeline.exec()
|
||||||
|
}
|
||||||
|
|
||||||
|
async getMeasureAverage(measure: StatisticsMeasure, period: Period): Promise<number> {
|
||||||
|
const increments = await this.redisClient.get(
|
||||||
|
`count:increments:${measure}:timespan:${this.periodKeyGenerator.getPeriodKey(period)}`,
|
||||||
|
)
|
||||||
|
if (increments === null) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
const totalValue = await this.getMeasureTotal(measure, period)
|
||||||
|
|
||||||
|
return totalValue / +increments
|
||||||
|
}
|
||||||
|
|
||||||
async getYesterdayOutOfSyncIncidents(): Promise<number> {
|
async getYesterdayOutOfSyncIncidents(): Promise<number> {
|
||||||
const count = await this.redisClient.get(
|
const count = await this.redisClient.get(
|
||||||
`count:action:out-of-sync:timespan:${this.periodKeyGenerator.getPeriodKey(Period.Yesterday)}`,
|
`count:action:out-of-sync:timespan:${this.periodKeyGenerator.getPeriodKey(Period.Yesterday)}`,
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user