mirror of
https://github.com/standardnotes/server
synced 2026-06-10 03:45:21 -04:00
Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7f9e6e2f44 | |||
| d3c6c0d48e | |||
| 6c83476fd2 | |||
| 9cdf7e2c51 | |||
| 599119e14e | |||
| a2c484e0f3 | |||
| 97ff4d5ac2 | |||
| 5255cfbb25 | |||
| 780358368b | |||
| cf0b918913 | |||
| 4ea690204e | |||
| 14eb775749 | |||
| bf4a3be6d9 | |||
| b9e1e47871 | |||
| ff532ecb22 | |||
| eb21872db1 | |||
| 8e3df184dc | |||
| b34bbcac8b |
@@ -190,9 +190,9 @@ jobs:
|
|||||||
uses: convictional/trigger-workflow-and-wait@master
|
uses: convictional/trigger-workflow-and-wait@master
|
||||||
with:
|
with:
|
||||||
owner: standardnotes
|
owner: standardnotes
|
||||||
repo: e2e
|
repo: self-hosted
|
||||||
github_token: ${{ secrets.CI_PAT_TOKEN }}
|
github_token: ${{ secrets.CI_PAT_TOKEN }}
|
||||||
workflow_file_name: testing-with-stable-client.yml
|
workflow_file_name: testing-with-updating-client-and-server.yml
|
||||||
wait_interval: 30
|
wait_interval: 30
|
||||||
client_payload: '{"${{ inputs.e2e_tag_parameter_name }}": "${{ github.sha }}"}'
|
client_payload: '{"${{ inputs.e2e_tag_parameter_name }}": "${{ github.sha }}"}'
|
||||||
propagate_failure: true
|
propagate_failure: true
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ const RAW_RUNTIME_STATE =
|
|||||||
["@lerna-lite/cli", "npm:1.6.0"],\
|
["@lerna-lite/cli", "npm:1.6.0"],\
|
||||||
["@lerna-lite/list", "npm:1.6.0"],\
|
["@lerna-lite/list", "npm:1.6.0"],\
|
||||||
["@lerna-lite/run", "npm:1.6.0"],\
|
["@lerna-lite/run", "npm:1.6.0"],\
|
||||||
["@sentry/node", "npm:7.27.0"],\
|
["@sentry/node", "npm:7.28.1"],\
|
||||||
["@types/jest", "npm:29.1.1"],\
|
["@types/jest", "npm:29.1.1"],\
|
||||||
["@types/newrelic", "npm:7.0.4"],\
|
["@types/newrelic", "npm:7.0.4"],\
|
||||||
["@types/node", "npm:18.11.9"],\
|
["@types/node", "npm:18.11.9"],\
|
||||||
@@ -2447,6 +2447,16 @@ const RAW_RUNTIME_STATE =
|
|||||||
["tslib", "npm:1.14.1"]\
|
["tslib", "npm:1.14.1"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
|
}],\
|
||||||
|
["npm:7.28.1", {\
|
||||||
|
"packageLocation": "./.yarn/cache/@sentry-core-npm-7.28.1-a468033ea8-f29d747d3e.zip/node_modules/@sentry/core/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["@sentry/core", "npm:7.28.1"],\
|
||||||
|
["@sentry/types", "npm:7.28.1"],\
|
||||||
|
["@sentry/utils", "npm:7.28.1"],\
|
||||||
|
["tslib", "npm:1.14.1"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["@sentry/hub", [\
|
["@sentry/hub", [\
|
||||||
@@ -2476,6 +2486,20 @@ const RAW_RUNTIME_STATE =
|
|||||||
["tslib", "npm:1.14.1"]\
|
["tslib", "npm:1.14.1"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
|
}],\
|
||||||
|
["npm:7.28.1", {\
|
||||||
|
"packageLocation": "./.yarn/cache/@sentry-node-npm-7.28.1-b0e124fdfc-b4922d1f0a.zip/node_modules/@sentry/node/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["@sentry/node", "npm:7.28.1"],\
|
||||||
|
["@sentry/core", "npm:7.28.1"],\
|
||||||
|
["@sentry/types", "npm:7.28.1"],\
|
||||||
|
["@sentry/utils", "npm:7.28.1"],\
|
||||||
|
["cookie", "npm:0.4.2"],\
|
||||||
|
["https-proxy-agent", "npm:5.0.1"],\
|
||||||
|
["lru_map", "npm:0.3.3"],\
|
||||||
|
["tslib", "npm:1.14.1"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["@sentry/profiling-node", [\
|
["@sentry/profiling-node", [\
|
||||||
@@ -2506,6 +2530,17 @@ const RAW_RUNTIME_STATE =
|
|||||||
["tslib", "npm:1.14.1"]\
|
["tslib", "npm:1.14.1"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
|
}],\
|
||||||
|
["npm:7.28.1", {\
|
||||||
|
"packageLocation": "./.yarn/cache/@sentry-tracing-npm-7.28.1-e15d453d8e-be501ca9d7.zip/node_modules/@sentry/tracing/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["@sentry/tracing", "npm:7.28.1"],\
|
||||||
|
["@sentry/core", "npm:7.28.1"],\
|
||||||
|
["@sentry/types", "npm:7.28.1"],\
|
||||||
|
["@sentry/utils", "npm:7.28.1"],\
|
||||||
|
["tslib", "npm:1.14.1"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["@sentry/types", [\
|
["@sentry/types", [\
|
||||||
@@ -2515,6 +2550,13 @@ const RAW_RUNTIME_STATE =
|
|||||||
["@sentry/types", "npm:7.27.0"]\
|
["@sentry/types", "npm:7.27.0"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
|
}],\
|
||||||
|
["npm:7.28.1", {\
|
||||||
|
"packageLocation": "./.yarn/cache/@sentry-types-npm-7.28.1-42d9a8574c-7dc6639cb7.zip/node_modules/@sentry/types/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["@sentry/types", "npm:7.28.1"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["@sentry/utils", [\
|
["@sentry/utils", [\
|
||||||
@@ -2526,6 +2568,15 @@ const RAW_RUNTIME_STATE =
|
|||||||
["tslib", "npm:1.14.1"]\
|
["tslib", "npm:1.14.1"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
|
}],\
|
||||||
|
["npm:7.28.1", {\
|
||||||
|
"packageLocation": "./.yarn/cache/@sentry-utils-npm-7.28.1-71eaeb767f-a4b5f73db0.zip/node_modules/@sentry/utils/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["@sentry/utils", "npm:7.28.1"],\
|
||||||
|
["@sentry/types", "npm:7.28.1"],\
|
||||||
|
["tslib", "npm:1.14.1"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["@sinclair/typebox", [\
|
["@sinclair/typebox", [\
|
||||||
@@ -2581,7 +2632,7 @@ const RAW_RUNTIME_STATE =
|
|||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@standardnotes/analytics", "workspace:packages/analytics"],\
|
["@standardnotes/analytics", "workspace:packages/analytics"],\
|
||||||
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
||||||
["@sentry/node", "npm:7.27.0"],\
|
["@sentry/node", "npm:7.28.1"],\
|
||||||
["@standardnotes/common", "workspace:packages/common"],\
|
["@standardnotes/common", "workspace:packages/common"],\
|
||||||
["@standardnotes/domain-core", "workspace:packages/domain-core"],\
|
["@standardnotes/domain-core", "workspace:packages/domain-core"],\
|
||||||
["@standardnotes/domain-events", "workspace:packages/domain-events"],\
|
["@standardnotes/domain-events", "workspace:packages/domain-events"],\
|
||||||
@@ -2633,7 +2684,7 @@ const RAW_RUNTIME_STATE =
|
|||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@standardnotes/api-gateway", "workspace:packages/api-gateway"],\
|
["@standardnotes/api-gateway", "workspace:packages/api-gateway"],\
|
||||||
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
||||||
["@sentry/node", "npm:7.27.0"],\
|
["@sentry/node", "npm:7.28.1"],\
|
||||||
["@standardnotes/common", "workspace:packages/common"],\
|
["@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"],\
|
||||||
@@ -2689,9 +2740,9 @@ const RAW_RUNTIME_STATE =
|
|||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@standardnotes/auth-server", "workspace:packages/auth"],\
|
["@standardnotes/auth-server", "workspace:packages/auth"],\
|
||||||
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
||||||
["@sentry/node", "npm:7.27.0"],\
|
["@sentry/node", "npm:7.28.1"],\
|
||||||
["@sentry/profiling-node", "npm:0.0.12"],\
|
["@sentry/profiling-node", "npm:0.0.12"],\
|
||||||
["@sentry/tracing", "npm:7.27.0"],\
|
["@sentry/tracing", "npm:7.28.1"],\
|
||||||
["@standardnotes/api", "npm:1.19.0"],\
|
["@standardnotes/api", "npm:1.19.0"],\
|
||||||
["@standardnotes/common", "workspace:packages/common"],\
|
["@standardnotes/common", "workspace:packages/common"],\
|
||||||
["@standardnotes/domain-core", "workspace:packages/domain-core"],\
|
["@standardnotes/domain-core", "workspace:packages/domain-core"],\
|
||||||
@@ -2915,7 +2966,7 @@ const RAW_RUNTIME_STATE =
|
|||||||
"packageLocation": "./packages/files/",\
|
"packageLocation": "./packages/files/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@standardnotes/files-server", "workspace:packages/files"],\
|
["@standardnotes/files-server", "workspace:packages/files"],\
|
||||||
["@sentry/node", "npm:7.27.0"],\
|
["@sentry/node", "npm:7.28.1"],\
|
||||||
["@standardnotes/common", "workspace:packages/common"],\
|
["@standardnotes/common", "workspace:packages/common"],\
|
||||||
["@standardnotes/config", "npm:2.4.3"],\
|
["@standardnotes/config", "npm:2.4.3"],\
|
||||||
["@standardnotes/domain-events", "workspace:packages/domain-events"],\
|
["@standardnotes/domain-events", "workspace:packages/domain-events"],\
|
||||||
@@ -3050,7 +3101,7 @@ const RAW_RUNTIME_STATE =
|
|||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@standardnotes/revisions-server", "workspace:packages/revisions"],\
|
["@standardnotes/revisions-server", "workspace:packages/revisions"],\
|
||||||
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
||||||
["@sentry/node", "npm:7.27.0"],\
|
["@sentry/node", "npm:7.28.1"],\
|
||||||
["@standardnotes/api", "npm:1.19.0"],\
|
["@standardnotes/api", "npm:1.19.0"],\
|
||||||
["@standardnotes/common", "workspace:packages/common"],\
|
["@standardnotes/common", "workspace:packages/common"],\
|
||||||
["@standardnotes/domain-core", "workspace:packages/domain-core"],\
|
["@standardnotes/domain-core", "workspace:packages/domain-core"],\
|
||||||
@@ -3095,7 +3146,7 @@ const RAW_RUNTIME_STATE =
|
|||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@standardnotes/scheduler-server", "workspace:packages/scheduler"],\
|
["@standardnotes/scheduler-server", "workspace:packages/scheduler"],\
|
||||||
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
||||||
["@sentry/node", "npm:7.27.0"],\
|
["@sentry/node", "npm:7.28.1"],\
|
||||||
["@standardnotes/common", "workspace:packages/common"],\
|
["@standardnotes/common", "workspace:packages/common"],\
|
||||||
["@standardnotes/domain-core", "workspace:packages/domain-core"],\
|
["@standardnotes/domain-core", "workspace:packages/domain-core"],\
|
||||||
["@standardnotes/domain-events", "workspace:packages/domain-events"],\
|
["@standardnotes/domain-events", "workspace:packages/domain-events"],\
|
||||||
@@ -3156,7 +3207,7 @@ const RAW_RUNTIME_STATE =
|
|||||||
["@lerna-lite/cli", "npm:1.6.0"],\
|
["@lerna-lite/cli", "npm:1.6.0"],\
|
||||||
["@lerna-lite/list", "npm:1.6.0"],\
|
["@lerna-lite/list", "npm:1.6.0"],\
|
||||||
["@lerna-lite/run", "npm:1.6.0"],\
|
["@lerna-lite/run", "npm:1.6.0"],\
|
||||||
["@sentry/node", "npm:7.27.0"],\
|
["@sentry/node", "npm:7.28.1"],\
|
||||||
["@types/jest", "npm:29.1.1"],\
|
["@types/jest", "npm:29.1.1"],\
|
||||||
["@types/newrelic", "npm:7.0.4"],\
|
["@types/newrelic", "npm:7.0.4"],\
|
||||||
["@types/node", "npm:18.11.9"],\
|
["@types/node", "npm:18.11.9"],\
|
||||||
@@ -3222,9 +3273,9 @@ const RAW_RUNTIME_STATE =
|
|||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@standardnotes/syncing-server", "workspace:packages/syncing-server"],\
|
["@standardnotes/syncing-server", "workspace:packages/syncing-server"],\
|
||||||
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
||||||
["@sentry/node", "npm:7.27.0"],\
|
["@sentry/node", "npm:7.28.1"],\
|
||||||
["@sentry/profiling-node", "npm:0.0.12"],\
|
["@sentry/profiling-node", "npm:0.0.12"],\
|
||||||
["@sentry/tracing", "npm:7.27.0"],\
|
["@sentry/tracing", "npm:7.28.1"],\
|
||||||
["@standardnotes/common", "workspace:packages/common"],\
|
["@standardnotes/common", "workspace:packages/common"],\
|
||||||
["@standardnotes/domain-core", "workspace:packages/domain-core"],\
|
["@standardnotes/domain-core", "workspace:packages/domain-core"],\
|
||||||
["@standardnotes/domain-events", "workspace:packages/domain-events"],\
|
["@standardnotes/domain-events", "workspace:packages/domain-events"],\
|
||||||
@@ -3324,7 +3375,7 @@ const RAW_RUNTIME_STATE =
|
|||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@standardnotes/websockets-server", "workspace:packages/websockets"],\
|
["@standardnotes/websockets-server", "workspace:packages/websockets"],\
|
||||||
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
||||||
["@sentry/node", "npm:7.27.0"],\
|
["@sentry/node", "npm:7.28.1"],\
|
||||||
["@standardnotes/api", "npm:1.19.0"],\
|
["@standardnotes/api", "npm:1.19.0"],\
|
||||||
["@standardnotes/common", "workspace:packages/common"],\
|
["@standardnotes/common", "workspace:packages/common"],\
|
||||||
["@standardnotes/domain-events", "workspace:packages/domain-events"],\
|
["@standardnotes/domain-events", "workspace:packages/domain-events"],\
|
||||||
@@ -3364,7 +3415,7 @@ const RAW_RUNTIME_STATE =
|
|||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["@standardnotes/workspace-server", "workspace:packages/workspace"],\
|
["@standardnotes/workspace-server", "workspace:packages/workspace"],\
|
||||||
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
["@newrelic/winston-enricher", "virtual:c66bf20e88479ada0172094776519a9f51acc4731d22079b60a295bcec7ea42d5545cbce58a77a50d932bf953298799135e99707486e343da6d99ba1d167bdbd#npm:4.0.0"],\
|
||||||
["@sentry/node", "npm:7.27.0"],\
|
["@sentry/node", "npm:7.28.1"],\
|
||||||
["@standardnotes/api", "npm:1.19.0"],\
|
["@standardnotes/api", "npm:1.19.0"],\
|
||||||
["@standardnotes/common", "workspace:packages/common"],\
|
["@standardnotes/common", "workspace:packages/common"],\
|
||||||
["@standardnotes/domain-core", "workspace:packages/domain-core"],\
|
["@standardnotes/domain-core", "workspace:packages/domain-core"],\
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
-1
@@ -61,7 +61,7 @@
|
|||||||
},
|
},
|
||||||
"packageManager": "yarn@4.0.0-rc.25",
|
"packageManager": "yarn@4.0.0-rc.25",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@sentry/node": "^7.27.0",
|
"@sentry/node": "^7.28.1",
|
||||||
"newrelic": "^9.6.0"
|
"newrelic": "^9.6.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,16 @@
|
|||||||
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.
|
||||||
|
|
||||||
|
## [2.17.8](https://github.com/standardnotes/server/compare/@standardnotes/analytics@2.17.7...@standardnotes/analytics@2.17.8) (2022-12-28)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/analytics
|
||||||
|
|
||||||
|
## [2.17.7](https://github.com/standardnotes/server/compare/@standardnotes/analytics@2.17.6...@standardnotes/analytics@2.17.7) (2022-12-20)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **analytics:** monthly numbers of active users ([b34bbca](https://github.com/standardnotes/server/commit/b34bbcac8b9604283b3a5959ab3218c468ce8a00))
|
||||||
|
|
||||||
## [2.17.6](https://github.com/standardnotes/server/compare/@standardnotes/analytics@2.17.5...@standardnotes/analytics@2.17.6) (2022-12-20)
|
## [2.17.6](https://github.com/standardnotes/server/compare/@standardnotes/analytics@2.17.5...@standardnotes/analytics@2.17.6) (2022-12-20)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/analytics",
|
"name": "@standardnotes/analytics",
|
||||||
"version": "2.17.6",
|
"version": "2.17.8",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18.0.0 <19.0.0"
|
"node": ">=18.0.0 <19.0.0"
|
||||||
},
|
},
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@newrelic/winston-enricher": "^4.0.0",
|
"@newrelic/winston-enricher": "^4.0.0",
|
||||||
"@sentry/node": "^7.27.0",
|
"@sentry/node": "^7.28.1",
|
||||||
"@standardnotes/common": "workspace:*",
|
"@standardnotes/common": "workspace:*",
|
||||||
"@standardnotes/domain-core": "workspace:^",
|
"@standardnotes/domain-core": "workspace:^",
|
||||||
"@standardnotes/domain-events": "workspace:*",
|
"@standardnotes/domain-events": "workspace:*",
|
||||||
|
|||||||
@@ -24,11 +24,12 @@ const countActiveUsers = (measureName: string, data: any): { yesterday: number;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const averageActiveUsersLast30Days = Math.floor(
|
const last30DaysNumbers = filteredCounts.map((count: { totalCount: number }) => count.totalCount)
|
||||||
filteredCounts.reduce((previousValue: { totalCount: any }, currentValue: { totalCount: any }) => {
|
const last30DaysCount = last30DaysNumbers.reduce((previousValue: number, currentValue: number) => {
|
||||||
return previousValue.totalCount + currentValue.totalCount
|
return previousValue + currentValue
|
||||||
}) / filteredCounts.length,
|
})
|
||||||
)
|
|
||||||
|
const averageActiveUsersLast30Days = Math.floor(last30DaysCount / last30DaysNumbers.length)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
yesterday: totalActiveUsersYesterday,
|
yesterday: totalActiveUsersYesterday,
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
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.41.3](https://github.com/standardnotes/api-gateway/compare/@standardnotes/api-gateway@1.41.2...@standardnotes/api-gateway@1.41.3) (2022-12-28)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/api-gateway
|
||||||
|
|
||||||
## [1.41.2](https://github.com/standardnotes/api-gateway/compare/@standardnotes/api-gateway@1.41.1...@standardnotes/api-gateway@1.41.2) (2022-12-20)
|
## [1.41.2](https://github.com/standardnotes/api-gateway/compare/@standardnotes/api-gateway@1.41.1...@standardnotes/api-gateway@1.41.2) (2022-12-20)
|
||||||
|
|
||||||
**Note:** Version bump only for package @standardnotes/api-gateway
|
**Note:** Version bump only for package @standardnotes/api-gateway
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/api-gateway",
|
"name": "@standardnotes/api-gateway",
|
||||||
"version": "1.41.2",
|
"version": "1.41.3",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18.0.0 <19.0.0"
|
"node": ">=18.0.0 <19.0.0"
|
||||||
},
|
},
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@newrelic/winston-enricher": "^4.0.0",
|
"@newrelic/winston-enricher": "^4.0.0",
|
||||||
"@sentry/node": "^7.27.0",
|
"@sentry/node": "^7.28.1",
|
||||||
"@standardnotes/common": "workspace:^",
|
"@standardnotes/common": "workspace:^",
|
||||||
"@standardnotes/domain-events": "workspace:*",
|
"@standardnotes/domain-events": "workspace:*",
|
||||||
"@standardnotes/domain-events-infra": "workspace:*",
|
"@standardnotes/domain-events-infra": "workspace:*",
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ ENCRYPTION_SERVER_KEY=change-me-!
|
|||||||
|
|
||||||
PORT=3000
|
PORT=3000
|
||||||
|
|
||||||
DB_HOST=localhost
|
DB_HOST=127.0.0.1
|
||||||
DB_REPLICA_HOST=localhost
|
DB_REPLICA_HOST=127.0.0.1
|
||||||
DB_PORT=3306
|
DB_PORT=3306
|
||||||
DB_USERNAME=auth
|
DB_USERNAME=auth
|
||||||
DB_PASSWORD=changeme123
|
DB_PASSWORD=changeme123
|
||||||
|
|||||||
@@ -3,6 +3,34 @@
|
|||||||
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.70.9](https://github.com/standardnotes/server/compare/@standardnotes/auth-server@1.70.8...@standardnotes/auth-server@1.70.9) (2022-12-28)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/auth-server
|
||||||
|
|
||||||
|
## [1.70.8](https://github.com/standardnotes/server/compare/@standardnotes/auth-server@1.70.7...@standardnotes/auth-server@1.70.8) (2022-12-20)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **auth:** move tracing sessions to session creation instead of cross service token creation ([5255cfb](https://github.com/standardnotes/server/commit/5255cfbb257cc9e6ac437fe0c5b28d938e3e599b))
|
||||||
|
|
||||||
|
## [1.70.7](https://github.com/standardnotes/server/compare/@standardnotes/auth-server@1.70.6...@standardnotes/auth-server@1.70.7) (2022-12-20)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **auth:** change severity on tracing session errors - most probably hazardous reads ([cf0b918](https://github.com/standardnotes/server/commit/cf0b91891370e1c1799ad80c10ee9f6b98087a94))
|
||||||
|
|
||||||
|
## [1.70.6](https://github.com/standardnotes/server/compare/@standardnotes/auth-server@1.70.5...@standardnotes/auth-server@1.70.6) (2022-12-20)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **auth:** query for session traces ([14eb775](https://github.com/standardnotes/server/commit/14eb775749bfa9972dc3c07049505f3d15f0b556))
|
||||||
|
|
||||||
|
## [1.70.5](https://github.com/standardnotes/server/compare/@standardnotes/auth-server@1.70.4...@standardnotes/auth-server@1.70.5) (2022-12-20)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **auth:** add session traces index ([b9e1e47](https://github.com/standardnotes/server/commit/b9e1e4787129f00fab8f98cb721141f2e7d75600))
|
||||||
|
|
||||||
## [1.70.4](https://github.com/standardnotes/server/compare/@standardnotes/auth-server@1.70.3...@standardnotes/auth-server@1.70.4) (2022-12-20)
|
## [1.70.4](https://github.com/standardnotes/server/compare/@standardnotes/auth-server@1.70.3...@standardnotes/auth-server@1.70.4) (2022-12-20)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
import { MigrationInterface, QueryRunner } from 'typeorm'
|
||||||
|
|
||||||
|
export class addSessionTracesCompoundIndex1671561748264 implements MigrationInterface {
|
||||||
|
name = 'addSessionTracesCompoundIndex1671561748264'
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(
|
||||||
|
'CREATE UNIQUE INDEX `user_uuid_and_creation_date` ON `session_traces` (`user_uuid`, `creation_date`)',
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query('DROP INDEX `user_uuid_and_creation_date` ON `session_traces`')
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/auth-server",
|
"name": "@standardnotes/auth-server",
|
||||||
"version": "1.70.4",
|
"version": "1.70.9",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18.0.0 <19.0.0"
|
"node": ">=18.0.0 <19.0.0"
|
||||||
},
|
},
|
||||||
@@ -33,9 +33,9 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@newrelic/winston-enricher": "^4.0.0",
|
"@newrelic/winston-enricher": "^4.0.0",
|
||||||
"@sentry/node": "^7.27.0",
|
"@sentry/node": "^7.28.1",
|
||||||
"@sentry/profiling-node": "^0.0.12",
|
"@sentry/profiling-node": "^0.0.12",
|
||||||
"@sentry/tracing": "^7.27.0",
|
"@sentry/tracing": "^7.28.1",
|
||||||
"@standardnotes/api": "^1.19.0",
|
"@standardnotes/api": "^1.19.0",
|
||||||
"@standardnotes/common": "workspace:*",
|
"@standardnotes/common": "workspace:*",
|
||||||
"@standardnotes/domain-core": "workspace:^",
|
"@standardnotes/domain-core": "workspace:^",
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ import { SettingServiceInterface } from '../Setting/SettingServiceInterface'
|
|||||||
import { LogSessionUserAgentOption } from '@standardnotes/settings'
|
import { LogSessionUserAgentOption } from '@standardnotes/settings'
|
||||||
import { Setting } from '../Setting/Setting'
|
import { Setting } from '../Setting/Setting'
|
||||||
import { CryptoNode } from '@standardnotes/sncrypto-node'
|
import { CryptoNode } from '@standardnotes/sncrypto-node'
|
||||||
|
import { UserSubscriptionRepositoryInterface } from '../Subscription/UserSubscriptionRepositoryInterface'
|
||||||
|
import { TraceSession } from '../UseCase/TraceSession/TraceSession'
|
||||||
|
import { UserSubscription } from '../Subscription/UserSubscription'
|
||||||
|
import { Result } from '@standardnotes/domain-core'
|
||||||
|
|
||||||
describe('SessionService', () => {
|
describe('SessionService', () => {
|
||||||
let sessionRepository: SessionRepositoryInterface
|
let sessionRepository: SessionRepositoryInterface
|
||||||
@@ -28,6 +32,8 @@ describe('SessionService', () => {
|
|||||||
let timer: TimerInterface
|
let timer: TimerInterface
|
||||||
let logger: winston.Logger
|
let logger: winston.Logger
|
||||||
let cryptoNode: CryptoNode
|
let cryptoNode: CryptoNode
|
||||||
|
let traceSession: TraceSession
|
||||||
|
let userSubscriptionRepository: UserSubscriptionRepositoryInterface
|
||||||
|
|
||||||
const createService = () =>
|
const createService = () =>
|
||||||
new SessionService(
|
new SessionService(
|
||||||
@@ -41,6 +47,8 @@ describe('SessionService', () => {
|
|||||||
234,
|
234,
|
||||||
settingService,
|
settingService,
|
||||||
cryptoNode,
|
cryptoNode,
|
||||||
|
traceSession,
|
||||||
|
userSubscriptionRepository,
|
||||||
)
|
)
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
@@ -106,6 +114,14 @@ describe('SessionService', () => {
|
|||||||
cryptoNode = {} as jest.Mocked<CryptoNode>
|
cryptoNode = {} as jest.Mocked<CryptoNode>
|
||||||
cryptoNode.generateRandomKey = jest.fn().mockReturnValue('foo bar')
|
cryptoNode.generateRandomKey = jest.fn().mockReturnValue('foo bar')
|
||||||
cryptoNode.base64URLEncode = jest.fn().mockReturnValue('foobar')
|
cryptoNode.base64URLEncode = jest.fn().mockReturnValue('foobar')
|
||||||
|
|
||||||
|
traceSession = {} as jest.Mocked<TraceSession>
|
||||||
|
traceSession.execute = jest.fn()
|
||||||
|
|
||||||
|
userSubscriptionRepository = {} as jest.Mocked<UserSubscriptionRepositoryInterface>
|
||||||
|
userSubscriptionRepository.findOneByUserUuid = jest.fn().mockReturnValue({
|
||||||
|
planName: 'PRO_PLAN',
|
||||||
|
} as jest.Mocked<UserSubscription>)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should mark a revoked session as received', async () => {
|
it('should mark a revoked session as received', async () => {
|
||||||
@@ -204,6 +220,129 @@ describe('SessionService', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should trace a session', async () => {
|
||||||
|
const user = {} as jest.Mocked<User>
|
||||||
|
user.uuid = '123'
|
||||||
|
user.email = 'test@test.te'
|
||||||
|
|
||||||
|
await createService().createNewSessionForUser({
|
||||||
|
user,
|
||||||
|
apiVersion: '003',
|
||||||
|
userAgent: 'Google Chrome',
|
||||||
|
readonlyAccess: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(traceSession.execute).toHaveBeenCalledWith({
|
||||||
|
userUuid: '123',
|
||||||
|
username: 'test@test.te',
|
||||||
|
subscriptionPlanName: 'PRO_PLAN',
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should trace a session without a subscription', async () => {
|
||||||
|
userSubscriptionRepository.findOneByUserUuid = jest.fn().mockReturnValue(null)
|
||||||
|
const user = {} as jest.Mocked<User>
|
||||||
|
user.uuid = '123'
|
||||||
|
user.email = 'test@test.te'
|
||||||
|
|
||||||
|
await createService().createNewSessionForUser({
|
||||||
|
user,
|
||||||
|
apiVersion: '003',
|
||||||
|
userAgent: 'Google Chrome',
|
||||||
|
readonlyAccess: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(traceSession.execute).toHaveBeenCalledWith({
|
||||||
|
userUuid: '123',
|
||||||
|
username: 'test@test.te',
|
||||||
|
subscriptionPlanName: null,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should create a session if tracing session throws an error', async () => {
|
||||||
|
traceSession.execute = jest.fn().mockRejectedValue(new Error('foo bar'))
|
||||||
|
userSubscriptionRepository.findOneByUserUuid = jest.fn().mockReturnValue(null)
|
||||||
|
const user = {} as jest.Mocked<User>
|
||||||
|
user.uuid = '123'
|
||||||
|
user.email = 'test@test.te'
|
||||||
|
|
||||||
|
const sessionPayload = await createService().createNewSessionForUser({
|
||||||
|
user,
|
||||||
|
apiVersion: '003',
|
||||||
|
userAgent: 'Google Chrome',
|
||||||
|
readonlyAccess: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(traceSession.execute).toHaveBeenCalledWith({
|
||||||
|
userUuid: '123',
|
||||||
|
username: 'test@test.te',
|
||||||
|
subscriptionPlanName: null,
|
||||||
|
})
|
||||||
|
expect(sessionPayload).toEqual({
|
||||||
|
access_expiration: 123,
|
||||||
|
access_token: expect.any(String),
|
||||||
|
refresh_expiration: 123,
|
||||||
|
refresh_token: expect.any(String),
|
||||||
|
readonly_access: false,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should create a session if tracing session throws an error', async () => {
|
||||||
|
traceSession.execute = jest.fn().mockRejectedValue(new Error('foo bar'))
|
||||||
|
userSubscriptionRepository.findOneByUserUuid = jest.fn().mockReturnValue(null)
|
||||||
|
const user = {} as jest.Mocked<User>
|
||||||
|
user.uuid = '123'
|
||||||
|
user.email = 'test@test.te'
|
||||||
|
|
||||||
|
const sessionPayload = await createService().createNewSessionForUser({
|
||||||
|
user,
|
||||||
|
apiVersion: '003',
|
||||||
|
userAgent: 'Google Chrome',
|
||||||
|
readonlyAccess: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(traceSession.execute).toHaveBeenCalledWith({
|
||||||
|
userUuid: '123',
|
||||||
|
username: 'test@test.te',
|
||||||
|
subscriptionPlanName: null,
|
||||||
|
})
|
||||||
|
expect(sessionPayload).toEqual({
|
||||||
|
access_expiration: 123,
|
||||||
|
access_token: expect.any(String),
|
||||||
|
refresh_expiration: 123,
|
||||||
|
refresh_token: expect.any(String),
|
||||||
|
readonly_access: false,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should create a session if tracing session fails', async () => {
|
||||||
|
traceSession.execute = jest.fn().mockReturnValue(Result.fail('Oops'))
|
||||||
|
userSubscriptionRepository.findOneByUserUuid = jest.fn().mockReturnValue(null)
|
||||||
|
const user = {} as jest.Mocked<User>
|
||||||
|
user.uuid = '123'
|
||||||
|
user.email = 'test@test.te'
|
||||||
|
|
||||||
|
const sessionPayload = await createService().createNewSessionForUser({
|
||||||
|
user,
|
||||||
|
apiVersion: '003',
|
||||||
|
userAgent: 'Google Chrome',
|
||||||
|
readonlyAccess: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(traceSession.execute).toHaveBeenCalledWith({
|
||||||
|
userUuid: '123',
|
||||||
|
username: 'test@test.te',
|
||||||
|
subscriptionPlanName: null,
|
||||||
|
})
|
||||||
|
expect(sessionPayload).toEqual({
|
||||||
|
access_expiration: 123,
|
||||||
|
access_token: expect.any(String),
|
||||||
|
refresh_expiration: 123,
|
||||||
|
refresh_token: expect.any(String),
|
||||||
|
readonly_access: false,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
it('should create new ephemeral session for a user', async () => {
|
it('should create new ephemeral session for a user', async () => {
|
||||||
const user = {} as jest.Mocked<User>
|
const user = {} as jest.Mocked<User>
|
||||||
user.uuid = '123'
|
user.uuid = '123'
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
import * as crypto from 'crypto'
|
import * as crypto from 'crypto'
|
||||||
import * as winston from 'winston'
|
|
||||||
import * as dayjs from 'dayjs'
|
import * as dayjs from 'dayjs'
|
||||||
import { UAParser } from 'ua-parser-js'
|
import { UAParser } from 'ua-parser-js'
|
||||||
import { inject, injectable } from 'inversify'
|
import { inject, injectable } from 'inversify'
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
import { TimerInterface } from '@standardnotes/time'
|
import { TimerInterface } from '@standardnotes/time'
|
||||||
|
import { Logger } from 'winston'
|
||||||
|
import { LogSessionUserAgentOption, SettingName } from '@standardnotes/settings'
|
||||||
|
import { SessionBody } from '@standardnotes/responses'
|
||||||
|
import { Uuid } from '@standardnotes/common'
|
||||||
|
import { CryptoNode } from '@standardnotes/sncrypto-node'
|
||||||
|
|
||||||
import TYPES from '../../Bootstrap/Types'
|
import TYPES from '../../Bootstrap/Types'
|
||||||
import { Session } from './Session'
|
import { Session } from './Session'
|
||||||
@@ -16,10 +20,8 @@ import { EphemeralSession } from './EphemeralSession'
|
|||||||
import { RevokedSession } from './RevokedSession'
|
import { RevokedSession } from './RevokedSession'
|
||||||
import { RevokedSessionRepositoryInterface } from './RevokedSessionRepositoryInterface'
|
import { RevokedSessionRepositoryInterface } from './RevokedSessionRepositoryInterface'
|
||||||
import { SettingServiceInterface } from '../Setting/SettingServiceInterface'
|
import { SettingServiceInterface } from '../Setting/SettingServiceInterface'
|
||||||
import { LogSessionUserAgentOption, SettingName } from '@standardnotes/settings'
|
import { TraceSession } from '../UseCase/TraceSession/TraceSession'
|
||||||
import { SessionBody } from '@standardnotes/responses'
|
import { UserSubscriptionRepositoryInterface } from '../Subscription/UserSubscriptionRepositoryInterface'
|
||||||
import { Uuid } from '@standardnotes/common'
|
|
||||||
import { CryptoNode } from '@standardnotes/sncrypto-node'
|
|
||||||
|
|
||||||
@injectable()
|
@injectable()
|
||||||
export class SessionService implements SessionServiceInterface {
|
export class SessionService implements SessionServiceInterface {
|
||||||
@@ -31,11 +33,13 @@ export class SessionService implements SessionServiceInterface {
|
|||||||
@inject(TYPES.RevokedSessionRepository) private revokedSessionRepository: RevokedSessionRepositoryInterface,
|
@inject(TYPES.RevokedSessionRepository) private revokedSessionRepository: RevokedSessionRepositoryInterface,
|
||||||
@inject(TYPES.DeviceDetector) private deviceDetector: UAParser,
|
@inject(TYPES.DeviceDetector) private deviceDetector: UAParser,
|
||||||
@inject(TYPES.Timer) private timer: TimerInterface,
|
@inject(TYPES.Timer) private timer: TimerInterface,
|
||||||
@inject(TYPES.Logger) private logger: winston.Logger,
|
@inject(TYPES.Logger) private logger: Logger,
|
||||||
@inject(TYPES.ACCESS_TOKEN_AGE) private accessTokenAge: number,
|
@inject(TYPES.ACCESS_TOKEN_AGE) private accessTokenAge: number,
|
||||||
@inject(TYPES.REFRESH_TOKEN_AGE) private refreshTokenAge: number,
|
@inject(TYPES.REFRESH_TOKEN_AGE) private refreshTokenAge: number,
|
||||||
@inject(TYPES.SettingService) private settingService: SettingServiceInterface,
|
@inject(TYPES.SettingService) private settingService: SettingServiceInterface,
|
||||||
@inject(TYPES.CryptoNode) private cryptoNode: CryptoNode,
|
@inject(TYPES.CryptoNode) private cryptoNode: CryptoNode,
|
||||||
|
@inject(TYPES.TraceSession) private traceSession: TraceSession,
|
||||||
|
@inject(TYPES.UserSubscriptionRepository) private userSubscriptionRepository: UserSubscriptionRepositoryInterface,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async createNewSessionForUser(dto: {
|
async createNewSessionForUser(dto: {
|
||||||
@@ -53,6 +57,20 @@ export class SessionService implements SessionServiceInterface {
|
|||||||
|
|
||||||
await this.sessionRepository.save(session)
|
await this.sessionRepository.save(session)
|
||||||
|
|
||||||
|
try {
|
||||||
|
const userSubscription = await this.userSubscriptionRepository.findOneByUserUuid(dto.user.uuid)
|
||||||
|
const traceSessionResult = await this.traceSession.execute({
|
||||||
|
userUuid: dto.user.uuid,
|
||||||
|
username: dto.user.email,
|
||||||
|
subscriptionPlanName: userSubscription ? userSubscription.planName : null,
|
||||||
|
})
|
||||||
|
if (traceSessionResult.isFailed()) {
|
||||||
|
this.logger.error(traceSessionResult.getError())
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error(`Could not trace session while creating cross service token.: ${(error as Error).message}`)
|
||||||
|
}
|
||||||
|
|
||||||
return sessionPayload
|
return sessionPayload
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-157
@@ -8,10 +8,6 @@ import { Role } from '../../Role/Role'
|
|||||||
import { UserRepositoryInterface } from '../../User/UserRepositoryInterface'
|
import { UserRepositoryInterface } from '../../User/UserRepositoryInterface'
|
||||||
|
|
||||||
import { CreateCrossServiceToken } from './CreateCrossServiceToken'
|
import { CreateCrossServiceToken } from './CreateCrossServiceToken'
|
||||||
import { RoleToSubscriptionMapInterface } from '../../Role/RoleToSubscriptionMapInterface'
|
|
||||||
import { TraceSession } from '../TraceSession/TraceSession'
|
|
||||||
import { Logger } from 'winston'
|
|
||||||
import { Result, RoleName, SubscriptionPlanName } from '@standardnotes/domain-core'
|
|
||||||
|
|
||||||
describe('CreateCrossServiceToken', () => {
|
describe('CreateCrossServiceToken', () => {
|
||||||
let userProjector: ProjectorInterface<User>
|
let userProjector: ProjectorInterface<User>
|
||||||
@@ -19,9 +15,6 @@ describe('CreateCrossServiceToken', () => {
|
|||||||
let roleProjector: ProjectorInterface<Role>
|
let roleProjector: ProjectorInterface<Role>
|
||||||
let tokenEncoder: TokenEncoderInterface<CrossServiceTokenData>
|
let tokenEncoder: TokenEncoderInterface<CrossServiceTokenData>
|
||||||
let userRepository: UserRepositoryInterface
|
let userRepository: UserRepositoryInterface
|
||||||
let roleToSubscriptionMap: RoleToSubscriptionMapInterface
|
|
||||||
let traceSession: TraceSession
|
|
||||||
let logger: Logger
|
|
||||||
const jwtTTL = 60
|
const jwtTTL = 60
|
||||||
|
|
||||||
let session: Session
|
let session: Session
|
||||||
@@ -29,17 +22,7 @@ describe('CreateCrossServiceToken', () => {
|
|||||||
let role: Role
|
let role: Role
|
||||||
|
|
||||||
const createUseCase = () =>
|
const createUseCase = () =>
|
||||||
new CreateCrossServiceToken(
|
new CreateCrossServiceToken(userProjector, sessionProjector, roleProjector, tokenEncoder, userRepository, jwtTTL)
|
||||||
userProjector,
|
|
||||||
sessionProjector,
|
|
||||||
roleProjector,
|
|
||||||
tokenEncoder,
|
|
||||||
userRepository,
|
|
||||||
jwtTTL,
|
|
||||||
roleToSubscriptionMap,
|
|
||||||
traceSession,
|
|
||||||
logger,
|
|
||||||
)
|
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
session = {} as jest.Mocked<Session>
|
session = {} as jest.Mocked<Session>
|
||||||
@@ -65,18 +48,6 @@ describe('CreateCrossServiceToken', () => {
|
|||||||
|
|
||||||
userRepository = {} as jest.Mocked<UserRepositoryInterface>
|
userRepository = {} as jest.Mocked<UserRepositoryInterface>
|
||||||
userRepository.findOneByUuid = jest.fn().mockReturnValue(user)
|
userRepository.findOneByUuid = jest.fn().mockReturnValue(user)
|
||||||
|
|
||||||
roleToSubscriptionMap = {} as jest.Mocked<RoleToSubscriptionMapInterface>
|
|
||||||
roleToSubscriptionMap.filterSubscriptionRoles = jest.fn().mockReturnValue([RoleName.NAMES.PlusUser])
|
|
||||||
roleToSubscriptionMap.getSubscriptionNameForRoleName = jest
|
|
||||||
.fn()
|
|
||||||
.mockReturnValue(SubscriptionPlanName.NAMES.PlusPlan)
|
|
||||||
|
|
||||||
traceSession = {} as jest.Mocked<TraceSession>
|
|
||||||
traceSession.execute = jest.fn()
|
|
||||||
|
|
||||||
logger = {} as jest.Mocked<Logger>
|
|
||||||
logger.error = jest.fn()
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should create a cross service token for user', async () => {
|
it('should create a cross service token for user', async () => {
|
||||||
@@ -85,11 +56,6 @@ describe('CreateCrossServiceToken', () => {
|
|||||||
session,
|
session,
|
||||||
})
|
})
|
||||||
|
|
||||||
expect(traceSession.execute).toHaveBeenCalledWith({
|
|
||||||
userUuid: '1-2-3',
|
|
||||||
username: 'test@test.te',
|
|
||||||
subscriptionPlanName: 'PLUS_PLAN',
|
|
||||||
})
|
|
||||||
expect(tokenEncoder.encodeExpirableToken).toHaveBeenCalledWith(
|
expect(tokenEncoder.encodeExpirableToken).toHaveBeenCalledWith(
|
||||||
{
|
{
|
||||||
roles: [
|
roles: [
|
||||||
@@ -168,126 +134,4 @@ describe('CreateCrossServiceToken', () => {
|
|||||||
|
|
||||||
expect(caughtError).not.toBeNull()
|
expect(caughtError).not.toBeNull()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should trace session without a subscription role', async () => {
|
|
||||||
roleToSubscriptionMap.filterSubscriptionRoles = jest.fn().mockReturnValue([])
|
|
||||||
|
|
||||||
await createUseCase().execute({
|
|
||||||
user,
|
|
||||||
session,
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(traceSession.execute).toHaveBeenCalledWith({
|
|
||||||
userUuid: '1-2-3',
|
|
||||||
username: 'test@test.te',
|
|
||||||
subscriptionPlanName: null,
|
|
||||||
})
|
|
||||||
expect(tokenEncoder.encodeExpirableToken).toHaveBeenCalledWith(
|
|
||||||
{
|
|
||||||
roles: [
|
|
||||||
{
|
|
||||||
name: 'role1',
|
|
||||||
uuid: '1-3-4',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
session: {
|
|
||||||
test: 'test',
|
|
||||||
},
|
|
||||||
user: {
|
|
||||||
email: 'test@test.te',
|
|
||||||
uuid: '1-2-3',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
60,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should trace session without a subscription', async () => {
|
|
||||||
roleToSubscriptionMap.getSubscriptionNameForRoleName = jest.fn().mockReturnValue(undefined)
|
|
||||||
|
|
||||||
await createUseCase().execute({
|
|
||||||
user,
|
|
||||||
session,
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(traceSession.execute).toHaveBeenCalledWith({
|
|
||||||
userUuid: '1-2-3',
|
|
||||||
username: 'test@test.te',
|
|
||||||
subscriptionPlanName: null,
|
|
||||||
})
|
|
||||||
expect(tokenEncoder.encodeExpirableToken).toHaveBeenCalledWith(
|
|
||||||
{
|
|
||||||
roles: [
|
|
||||||
{
|
|
||||||
name: 'role1',
|
|
||||||
uuid: '1-3-4',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
session: {
|
|
||||||
test: 'test',
|
|
||||||
},
|
|
||||||
user: {
|
|
||||||
email: 'test@test.te',
|
|
||||||
uuid: '1-2-3',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
60,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should create token if tracing session throws an error', async () => {
|
|
||||||
traceSession.execute = jest.fn().mockRejectedValue(new Error('test'))
|
|
||||||
|
|
||||||
await createUseCase().execute({
|
|
||||||
user,
|
|
||||||
session,
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(tokenEncoder.encodeExpirableToken).toHaveBeenCalledWith(
|
|
||||||
{
|
|
||||||
roles: [
|
|
||||||
{
|
|
||||||
name: 'role1',
|
|
||||||
uuid: '1-3-4',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
session: {
|
|
||||||
test: 'test',
|
|
||||||
},
|
|
||||||
user: {
|
|
||||||
email: 'test@test.te',
|
|
||||||
uuid: '1-2-3',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
60,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should create token if tracing session fails', async () => {
|
|
||||||
traceSession.execute = jest.fn().mockReturnValue(Result.fail('Ooops'))
|
|
||||||
|
|
||||||
await createUseCase().execute({
|
|
||||||
user,
|
|
||||||
session,
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(tokenEncoder.encodeExpirableToken).toHaveBeenCalledWith(
|
|
||||||
{
|
|
||||||
roles: [
|
|
||||||
{
|
|
||||||
name: 'role1',
|
|
||||||
uuid: '1-3-4',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
session: {
|
|
||||||
test: 'test',
|
|
||||||
},
|
|
||||||
user: {
|
|
||||||
email: 'test@test.te',
|
|
||||||
uuid: '1-2-3',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
60,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,16 +1,13 @@
|
|||||||
import { RoleName } from '@standardnotes/common'
|
import { RoleName } from '@standardnotes/common'
|
||||||
import { TokenEncoderInterface, CrossServiceTokenData } from '@standardnotes/security'
|
import { TokenEncoderInterface, CrossServiceTokenData } from '@standardnotes/security'
|
||||||
import { inject, injectable } from 'inversify'
|
import { inject, injectable } from 'inversify'
|
||||||
import { Logger } from 'winston'
|
|
||||||
|
|
||||||
import TYPES from '../../../Bootstrap/Types'
|
import TYPES from '../../../Bootstrap/Types'
|
||||||
import { ProjectorInterface } from '../../../Projection/ProjectorInterface'
|
import { ProjectorInterface } from '../../../Projection/ProjectorInterface'
|
||||||
import { Role } from '../../Role/Role'
|
import { Role } from '../../Role/Role'
|
||||||
import { RoleToSubscriptionMapInterface } from '../../Role/RoleToSubscriptionMapInterface'
|
|
||||||
import { Session } from '../../Session/Session'
|
import { Session } from '../../Session/Session'
|
||||||
import { User } from '../../User/User'
|
import { User } from '../../User/User'
|
||||||
import { UserRepositoryInterface } from '../../User/UserRepositoryInterface'
|
import { UserRepositoryInterface } from '../../User/UserRepositoryInterface'
|
||||||
import { TraceSession } from '../TraceSession/TraceSession'
|
|
||||||
import { UseCaseInterface } from '../UseCaseInterface'
|
import { UseCaseInterface } from '../UseCaseInterface'
|
||||||
|
|
||||||
import { CreateCrossServiceTokenDTO } from './CreateCrossServiceTokenDTO'
|
import { CreateCrossServiceTokenDTO } from './CreateCrossServiceTokenDTO'
|
||||||
@@ -25,9 +22,6 @@ export class CreateCrossServiceToken implements UseCaseInterface {
|
|||||||
@inject(TYPES.CrossServiceTokenEncoder) private tokenEncoder: TokenEncoderInterface<CrossServiceTokenData>,
|
@inject(TYPES.CrossServiceTokenEncoder) private tokenEncoder: TokenEncoderInterface<CrossServiceTokenData>,
|
||||||
@inject(TYPES.UserRepository) private userRepository: UserRepositoryInterface,
|
@inject(TYPES.UserRepository) private userRepository: UserRepositoryInterface,
|
||||||
@inject(TYPES.AUTH_JWT_TTL) private jwtTTL: number,
|
@inject(TYPES.AUTH_JWT_TTL) private jwtTTL: number,
|
||||||
@inject(TYPES.RoleToSubscriptionMap) private roleToSubscriptionMap: RoleToSubscriptionMapInterface,
|
|
||||||
@inject(TYPES.TraceSession) private traceSession: TraceSession,
|
|
||||||
@inject(TYPES.Logger) private logger: Logger,
|
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async execute(dto: CreateCrossServiceTokenDTO): Promise<CreateCrossServiceTokenResponse> {
|
async execute(dto: CreateCrossServiceTokenDTO): Promise<CreateCrossServiceTokenResponse> {
|
||||||
@@ -51,19 +45,6 @@ export class CreateCrossServiceToken implements UseCaseInterface {
|
|||||||
authTokenData.session = this.projectSession(dto.session)
|
authTokenData.session = this.projectSession(dto.session)
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
const traceSessionResult = await this.traceSession.execute({
|
|
||||||
userUuid: user.uuid,
|
|
||||||
username: user.email,
|
|
||||||
subscriptionPlanName: this.getSubscriptionNameFromRoles(roles),
|
|
||||||
})
|
|
||||||
if (traceSessionResult.isFailed()) {
|
|
||||||
this.logger.error(traceSessionResult.getError())
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
this.logger.error(`Could not trace session while creating cross service token: ${(error as Error).message}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
token: this.tokenEncoder.encodeExpirableToken(authTokenData, this.jwtTTL),
|
token: this.tokenEncoder.encodeExpirableToken(authTokenData, this.jwtTTL),
|
||||||
}
|
}
|
||||||
@@ -100,17 +81,4 @@ export class CreateCrossServiceToken implements UseCaseInterface {
|
|||||||
private projectRoles(roles: Array<Role>): Array<{ uuid: string; name: RoleName }> {
|
private projectRoles(roles: Array<Role>): Array<{ uuid: string; name: RoleName }> {
|
||||||
return roles.map((role) => <{ uuid: string; name: RoleName }>this.roleProjector.projectSimple(role))
|
return roles.map((role) => <{ uuid: string; name: RoleName }>this.roleProjector.projectSimple(role))
|
||||||
}
|
}
|
||||||
|
|
||||||
private getSubscriptionNameFromRoles(roles: Array<Role>): string | null {
|
|
||||||
const nonSubscriptionRoles = this.roleToSubscriptionMap.filterSubscriptionRoles(roles)
|
|
||||||
if (nonSubscriptionRoles.length === 0) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
const subscriptionName = this.roleToSubscriptionMap.getSubscriptionNameForRoleName(
|
|
||||||
nonSubscriptionRoles[0].name as RoleName,
|
|
||||||
)
|
|
||||||
|
|
||||||
return subscriptionName === undefined ? null : subscriptionName
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export class MySQLSessionTraceRepository implements SessionTraceRepositoryInterf
|
|||||||
return this.ormRepository
|
return this.ormRepository
|
||||||
.createQueryBuilder('trace')
|
.createQueryBuilder('trace')
|
||||||
.where('trace.creation_date = :creationDate', {
|
.where('trace.creation_date = :creationDate', {
|
||||||
creationDate: new Date(date.getFullYear(), date.getMonth(), date.getDate()),
|
creationDate: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`,
|
||||||
})
|
})
|
||||||
.andWhere('trace.subscription_plan_name = :subscriptionPlanName', {
|
.andWhere('trace.subscription_plan_name = :subscriptionPlanName', {
|
||||||
subscriptionPlanName: subscriptionPlanName.value,
|
subscriptionPlanName: subscriptionPlanName.value,
|
||||||
@@ -26,7 +26,7 @@ export class MySQLSessionTraceRepository implements SessionTraceRepositoryInterf
|
|||||||
return this.ormRepository
|
return this.ormRepository
|
||||||
.createQueryBuilder('trace')
|
.createQueryBuilder('trace')
|
||||||
.where('trace.creation_date = :creationDate', {
|
.where('trace.creation_date = :creationDate', {
|
||||||
creationDate: new Date(date.getFullYear(), date.getMonth(), date.getDate()),
|
creationDate: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`,
|
||||||
})
|
})
|
||||||
.getCount()
|
.getCount()
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,7 @@ export class MySQLSessionTraceRepository implements SessionTraceRepositoryInterf
|
|||||||
.createQueryBuilder('trace')
|
.createQueryBuilder('trace')
|
||||||
.where('trace.user_uuid = :userUuid AND trace.creation_date = :creationDate', {
|
.where('trace.user_uuid = :userUuid AND trace.creation_date = :creationDate', {
|
||||||
userUuid: userUuid.value,
|
userUuid: userUuid.value,
|
||||||
creationDate: new Date(date.getFullYear(), date.getMonth(), date.getDate()),
|
creationDate: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`,
|
||||||
})
|
})
|
||||||
.getOne()
|
.getOne()
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Column, Entity, Index, PrimaryGeneratedColumn } from 'typeorm'
|
import { Column, Entity, Index, PrimaryGeneratedColumn } from 'typeorm'
|
||||||
|
|
||||||
@Entity({ name: 'session_traces' })
|
@Entity({ name: 'session_traces' })
|
||||||
|
@Index('user_uuid_and_creation_date', ['userUuid', 'creationDate'], { unique: true })
|
||||||
export class TypeORMSessionTrace {
|
export class TypeORMSessionTrace {
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
declare uuid: string
|
declare uuid: string
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
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.9.3](https://github.com/standardnotes/files/compare/@standardnotes/files-server@1.9.2...@standardnotes/files-server@1.9.3) (2022-12-28)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/files-server
|
||||||
|
|
||||||
## [1.9.2](https://github.com/standardnotes/files/compare/@standardnotes/files-server@1.9.1...@standardnotes/files-server@1.9.2) (2022-12-20)
|
## [1.9.2](https://github.com/standardnotes/files/compare/@standardnotes/files-server@1.9.1...@standardnotes/files-server@1.9.2) (2022-12-20)
|
||||||
|
|
||||||
**Note:** Version bump only for package @standardnotes/files-server
|
**Note:** Version bump only for package @standardnotes/files-server
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/files-server",
|
"name": "@standardnotes/files-server",
|
||||||
"version": "1.9.2",
|
"version": "1.9.3",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18.0.0 <19.0.0"
|
"node": ">=18.0.0 <19.0.0"
|
||||||
},
|
},
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
"upgrade:snjs": "yarn ncu -u '@standardnotes/*'"
|
"upgrade:snjs": "yarn ncu -u '@standardnotes/*'"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@sentry/node": "^7.27.0",
|
"@sentry/node": "^7.28.1",
|
||||||
"@standardnotes/common": "workspace:*",
|
"@standardnotes/common": "workspace:*",
|
||||||
"@standardnotes/domain-events": "workspace:*",
|
"@standardnotes/domain-events": "workspace:*",
|
||||||
"@standardnotes/domain-events-infra": "workspace:*",
|
"@standardnotes/domain-events-infra": "workspace:*",
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
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.10.3](https://github.com/standardnotes/server/compare/@standardnotes/revisions-server@1.10.2...@standardnotes/revisions-server@1.10.3) (2022-12-28)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/revisions-server
|
||||||
|
|
||||||
## [1.10.2](https://github.com/standardnotes/server/compare/@standardnotes/revisions-server@1.10.1...@standardnotes/revisions-server@1.10.2) (2022-12-20)
|
## [1.10.2](https://github.com/standardnotes/server/compare/@standardnotes/revisions-server@1.10.1...@standardnotes/revisions-server@1.10.2) (2022-12-20)
|
||||||
|
|
||||||
**Note:** Version bump only for package @standardnotes/revisions-server
|
**Note:** Version bump only for package @standardnotes/revisions-server
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/revisions-server",
|
"name": "@standardnotes/revisions-server",
|
||||||
"version": "1.10.2",
|
"version": "1.10.3",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18.0.0 <19.0.0"
|
"node": ">=18.0.0 <19.0.0"
|
||||||
},
|
},
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@newrelic/winston-enricher": "^4.0.0",
|
"@newrelic/winston-enricher": "^4.0.0",
|
||||||
"@sentry/node": "^7.27.0",
|
"@sentry/node": "^7.28.1",
|
||||||
"@standardnotes/api": "^1.19.0",
|
"@standardnotes/api": "^1.19.0",
|
||||||
"@standardnotes/common": "workspace:^",
|
"@standardnotes/common": "workspace:^",
|
||||||
"@standardnotes/domain-core": "workspace:^",
|
"@standardnotes/domain-core": "workspace:^",
|
||||||
|
|||||||
@@ -3,6 +3,16 @@
|
|||||||
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.16.4](https://github.com/standardnotes/server/compare/@standardnotes/scheduler-server@1.16.3...@standardnotes/scheduler-server@1.16.4) (2022-12-28)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/scheduler-server
|
||||||
|
|
||||||
|
## [1.16.3](https://github.com/standardnotes/server/compare/@standardnotes/scheduler-server@1.16.2...@standardnotes/scheduler-server@1.16.3) (2022-12-20)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **scheduler:** new pricing for subscription encouragement email ([eb21872](https://github.com/standardnotes/server/commit/eb21872db1726c4f8a55b5d16de712650c5e946b))
|
||||||
|
|
||||||
## [1.16.2](https://github.com/standardnotes/server/compare/@standardnotes/scheduler-server@1.16.1...@standardnotes/scheduler-server@1.16.2) (2022-12-20)
|
## [1.16.2](https://github.com/standardnotes/server/compare/@standardnotes/scheduler-server@1.16.1...@standardnotes/scheduler-server@1.16.2) (2022-12-20)
|
||||||
|
|
||||||
**Note:** Version bump only for package @standardnotes/scheduler-server
|
**Note:** Version bump only for package @standardnotes/scheduler-server
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/scheduler-server",
|
"name": "@standardnotes/scheduler-server",
|
||||||
"version": "1.16.2",
|
"version": "1.16.4",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18.0.0 <19.0.0"
|
"node": ">=18.0.0 <19.0.0"
|
||||||
},
|
},
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@newrelic/winston-enricher": "^4.0.0",
|
"@newrelic/winston-enricher": "^4.0.0",
|
||||||
"@sentry/node": "^7.27.0",
|
"@sentry/node": "^7.28.1",
|
||||||
"@standardnotes/common": "workspace:*",
|
"@standardnotes/common": "workspace:*",
|
||||||
"@standardnotes/domain-core": "workspace:^",
|
"@standardnotes/domain-core": "workspace:^",
|
||||||
"@standardnotes/domain-events": "workspace:*",
|
"@standardnotes/domain-events": "workspace:*",
|
||||||
|
|||||||
@@ -5,7 +5,5 @@ export function getSubject(): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getBody(registrationDate: string): string {
|
export function getBody(registrationDate: string): string {
|
||||||
const body = html
|
return html(registrationDate, 90, 120)
|
||||||
|
|
||||||
return body.replace('%%REGISTRATION_DATE%%', registrationDate)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export const html = `<div>
|
export const html = (registrationDate: string, annualPlusPrice: number, annualProPrice: number) => `<div>
|
||||||
<p>Hi there,</p>
|
<p>Hi there,</p>
|
||||||
<p>
|
<p>
|
||||||
We hope you've been finding great use out of Standard Notes. We built Standard Notes to be a secure place for
|
We hope you've been finding great use out of Standard Notes. We built Standard Notes to be a secure place for
|
||||||
@@ -7,7 +7,7 @@ export const html = `<div>
|
|||||||
<p>
|
<p>
|
||||||
As a reminder,
|
As a reminder,
|
||||||
<strong>
|
<strong>
|
||||||
<em>you signed up for the Standard Notes free plan on %%REGISTRATION_DATE%%</em>
|
<em>you signed up for the Standard Notes free plan on ${registrationDate}</em>
|
||||||
</strong>
|
</strong>
|
||||||
Your free account comes with standard features like end-to-end encryption, multiple-device sync, and
|
Your free account comes with standard features like end-to-end encryption, multiple-device sync, and
|
||||||
two-factor authentication.
|
two-factor authentication.
|
||||||
@@ -19,13 +19,13 @@ export const html = `<div>
|
|||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<p>
|
<p>
|
||||||
<strong>Productivity</strong> <strong>($59/year)</strong> powers up your editing experience with unique
|
<strong>Productivity</strong> <strong>($${annualPlusPrice}/year)</strong> powers up your editing experience with unique
|
||||||
and special-built note-types for markdown, rich text, spreadsheets, todo, and more.
|
and special-built note-types for markdown, rich text, spreadsheets, todo, and more.
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p>
|
<p>
|
||||||
<strong>Professional</strong> <strong>($99/year)</strong> gives you all the power of Productivity plus
|
<strong>Professional</strong> <strong>($${annualProPrice}/year)</strong> gives you all the power of Productivity plus
|
||||||
100GB of end-to-end encrypted file storage for your private photos, videos, and documents, plus family
|
100GB of end-to-end encrypted file storage for your private photos, videos, and documents, plus family
|
||||||
subscription sharing with up to 5 people.
|
subscription sharing with up to 5 people.
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
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.3](https://github.com/standardnotes/syncing-server-js/compare/@standardnotes/syncing-server@1.28.2...@standardnotes/syncing-server@1.28.3) (2022-12-28)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/syncing-server
|
||||||
|
|
||||||
## [1.28.2](https://github.com/standardnotes/syncing-server-js/compare/@standardnotes/syncing-server@1.28.1...@standardnotes/syncing-server@1.28.2) (2022-12-20)
|
## [1.28.2](https://github.com/standardnotes/syncing-server-js/compare/@standardnotes/syncing-server@1.28.1...@standardnotes/syncing-server@1.28.2) (2022-12-20)
|
||||||
|
|
||||||
**Note:** Version bump only for package @standardnotes/syncing-server
|
**Note:** Version bump only for package @standardnotes/syncing-server
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/syncing-server",
|
"name": "@standardnotes/syncing-server",
|
||||||
"version": "1.28.2",
|
"version": "1.28.3",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18.0.0 <19.0.0"
|
"node": ">=18.0.0 <19.0.0"
|
||||||
},
|
},
|
||||||
@@ -27,9 +27,9 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@newrelic/winston-enricher": "^4.0.0",
|
"@newrelic/winston-enricher": "^4.0.0",
|
||||||
"@sentry/node": "^7.27.0",
|
"@sentry/node": "^7.28.1",
|
||||||
"@sentry/profiling-node": "^0.0.12",
|
"@sentry/profiling-node": "^0.0.12",
|
||||||
"@sentry/tracing": "^7.27.0",
|
"@sentry/tracing": "^7.28.1",
|
||||||
"@standardnotes/common": "workspace:*",
|
"@standardnotes/common": "workspace:*",
|
||||||
"@standardnotes/domain-core": "workspace:^",
|
"@standardnotes/domain-core": "workspace:^",
|
||||||
"@standardnotes/domain-events": "workspace:*",
|
"@standardnotes/domain-events": "workspace:*",
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
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.5.3](https://github.com/standardnotes/server/compare/@standardnotes/websockets-server@1.5.2...@standardnotes/websockets-server@1.5.3) (2022-12-28)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/websockets-server
|
||||||
|
|
||||||
## [1.5.2](https://github.com/standardnotes/server/compare/@standardnotes/websockets-server@1.5.1...@standardnotes/websockets-server@1.5.2) (2022-12-20)
|
## [1.5.2](https://github.com/standardnotes/server/compare/@standardnotes/websockets-server@1.5.1...@standardnotes/websockets-server@1.5.2) (2022-12-20)
|
||||||
|
|
||||||
**Note:** Version bump only for package @standardnotes/websockets-server
|
**Note:** Version bump only for package @standardnotes/websockets-server
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/websockets-server",
|
"name": "@standardnotes/websockets-server",
|
||||||
"version": "1.5.2",
|
"version": "1.5.3",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18.0.0 <19.0.0"
|
"node": ">=18.0.0 <19.0.0"
|
||||||
},
|
},
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@newrelic/winston-enricher": "^4.0.0",
|
"@newrelic/winston-enricher": "^4.0.0",
|
||||||
"@sentry/node": "^7.27.0",
|
"@sentry/node": "^7.28.1",
|
||||||
"@standardnotes/api": "^1.19.0",
|
"@standardnotes/api": "^1.19.0",
|
||||||
"@standardnotes/common": "workspace:^",
|
"@standardnotes/common": "workspace:^",
|
||||||
"@standardnotes/domain-events": "workspace:^",
|
"@standardnotes/domain-events": "workspace:^",
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
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.19.4](https://github.com/standardnotes/server/compare/@standardnotes/workspace-server@1.19.3...@standardnotes/workspace-server@1.19.4) (2022-12-28)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/workspace-server
|
||||||
|
|
||||||
## [1.19.3](https://github.com/standardnotes/server/compare/@standardnotes/workspace-server@1.19.2...@standardnotes/workspace-server@1.19.3) (2022-12-20)
|
## [1.19.3](https://github.com/standardnotes/server/compare/@standardnotes/workspace-server@1.19.2...@standardnotes/workspace-server@1.19.3) (2022-12-20)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/workspace-server",
|
"name": "@standardnotes/workspace-server",
|
||||||
"version": "1.19.3",
|
"version": "1.19.4",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18.0.0 <19.0.0"
|
"node": ">=18.0.0 <19.0.0"
|
||||||
},
|
},
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@newrelic/winston-enricher": "^4.0.0",
|
"@newrelic/winston-enricher": "^4.0.0",
|
||||||
"@sentry/node": "^7.27.0",
|
"@sentry/node": "^7.28.1",
|
||||||
"@standardnotes/api": "^1.19.0",
|
"@standardnotes/api": "^1.19.0",
|
||||||
"@standardnotes/common": "workspace:*",
|
"@standardnotes/common": "workspace:*",
|
||||||
"@standardnotes/domain-core": "workspace:^",
|
"@standardnotes/domain-core": "workspace:^",
|
||||||
|
|||||||
@@ -1717,6 +1717,17 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@sentry/core@npm:7.28.1":
|
||||||
|
version: 7.28.1
|
||||||
|
resolution: "@sentry/core@npm:7.28.1"
|
||||||
|
dependencies:
|
||||||
|
"@sentry/types": "npm:7.28.1"
|
||||||
|
"@sentry/utils": "npm:7.28.1"
|
||||||
|
tslib: "npm:^1.9.3"
|
||||||
|
checksum: f29d747d3e15000d8010fe3c192260a78927f37d30a3bb82cd533f3a5beca0c7fd81353ec57420c4295daea5384a045bde70ff6d3af1468ec1201b1d84131d6d
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@sentry/hub@npm:^7.16.0":
|
"@sentry/hub@npm:^7.16.0":
|
||||||
version: 7.27.0
|
version: 7.27.0
|
||||||
resolution: "@sentry/hub@npm:7.27.0"
|
resolution: "@sentry/hub@npm:7.27.0"
|
||||||
@@ -1729,7 +1740,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@sentry/node@npm:^7.16.0, @sentry/node@npm:^7.27.0":
|
"@sentry/node@npm:^7.16.0":
|
||||||
version: 7.27.0
|
version: 7.27.0
|
||||||
resolution: "@sentry/node@npm:7.27.0"
|
resolution: "@sentry/node@npm:7.27.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -1744,6 +1755,21 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@sentry/node@npm:^7.28.1":
|
||||||
|
version: 7.28.1
|
||||||
|
resolution: "@sentry/node@npm:7.28.1"
|
||||||
|
dependencies:
|
||||||
|
"@sentry/core": "npm:7.28.1"
|
||||||
|
"@sentry/types": "npm:7.28.1"
|
||||||
|
"@sentry/utils": "npm:7.28.1"
|
||||||
|
cookie: "npm:^0.4.1"
|
||||||
|
https-proxy-agent: "npm:^5.0.0"
|
||||||
|
lru_map: "npm:^0.3.3"
|
||||||
|
tslib: "npm:^1.9.3"
|
||||||
|
checksum: b4922d1f0a1b1e96cd73e5381871d0a2d20c4a05dd09f1cb9def6795c5fbe099b2e2b97025262cac595d19a42ebc82a34a8f9e59f87c0176e5206ae1f6377532
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@sentry/profiling-node@npm:^0.0.12":
|
"@sentry/profiling-node@npm:^0.0.12":
|
||||||
version: 0.0.12
|
version: 0.0.12
|
||||||
resolution: "@sentry/profiling-node@npm:0.0.12"
|
resolution: "@sentry/profiling-node@npm:0.0.12"
|
||||||
@@ -1760,7 +1786,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@sentry/tracing@npm:^7.16.0, @sentry/tracing@npm:^7.27.0":
|
"@sentry/tracing@npm:^7.16.0":
|
||||||
version: 7.27.0
|
version: 7.27.0
|
||||||
resolution: "@sentry/tracing@npm:7.27.0"
|
resolution: "@sentry/tracing@npm:7.27.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -1772,6 +1798,18 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@sentry/tracing@npm:^7.28.1":
|
||||||
|
version: 7.28.1
|
||||||
|
resolution: "@sentry/tracing@npm:7.28.1"
|
||||||
|
dependencies:
|
||||||
|
"@sentry/core": "npm:7.28.1"
|
||||||
|
"@sentry/types": "npm:7.28.1"
|
||||||
|
"@sentry/utils": "npm:7.28.1"
|
||||||
|
tslib: "npm:^1.9.3"
|
||||||
|
checksum: be501ca9d727f4893121c208f80fa82589964970c5a01155ba1d24cfd7ebdb2a1d6e325ea5556f0747d16519631013315781ad1c178f8721e5eab77de2446b63
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@sentry/types@npm:7.27.0, @sentry/types@npm:^7.16.0":
|
"@sentry/types@npm:7.27.0, @sentry/types@npm:^7.16.0":
|
||||||
version: 7.27.0
|
version: 7.27.0
|
||||||
resolution: "@sentry/types@npm:7.27.0"
|
resolution: "@sentry/types@npm:7.27.0"
|
||||||
@@ -1779,6 +1817,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@sentry/types@npm:7.28.1":
|
||||||
|
version: 7.28.1
|
||||||
|
resolution: "@sentry/types@npm:7.28.1"
|
||||||
|
checksum: 7dc6639cb7645c37bd8f759b60dbf2a149573b8a24dfb06baf7d7978f785e4635a65b3fb9e007f0eea56d33b543043fcfa1c1a376a83aa9824bb2d25be1a56dc
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@sentry/utils@npm:7.27.0, @sentry/utils@npm:^7.16.0":
|
"@sentry/utils@npm:7.27.0, @sentry/utils@npm:^7.16.0":
|
||||||
version: 7.27.0
|
version: 7.27.0
|
||||||
resolution: "@sentry/utils@npm:7.27.0"
|
resolution: "@sentry/utils@npm:7.27.0"
|
||||||
@@ -1789,6 +1834,16 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@sentry/utils@npm:7.28.1":
|
||||||
|
version: 7.28.1
|
||||||
|
resolution: "@sentry/utils@npm:7.28.1"
|
||||||
|
dependencies:
|
||||||
|
"@sentry/types": "npm:7.28.1"
|
||||||
|
tslib: "npm:^1.9.3"
|
||||||
|
checksum: a4b5f73db0e287e49b2eab5da80d6bbf1f6c7e11e1cc06ae06f49a9477d2b45de98310b143198207f3ae1fdd25ef76c90984eb99553a8308f6516e12c0c9c98c
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@sinclair/typebox@npm:^0.24.1":
|
"@sinclair/typebox@npm:^0.24.1":
|
||||||
version: 0.24.44
|
version: 0.24.44
|
||||||
resolution: "@sinclair/typebox@npm:0.24.44"
|
resolution: "@sinclair/typebox@npm:0.24.44"
|
||||||
@@ -1833,7 +1888,7 @@ __metadata:
|
|||||||
resolution: "@standardnotes/analytics@workspace:packages/analytics"
|
resolution: "@standardnotes/analytics@workspace:packages/analytics"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@newrelic/winston-enricher": "npm:^4.0.0"
|
"@newrelic/winston-enricher": "npm:^4.0.0"
|
||||||
"@sentry/node": "npm:^7.27.0"
|
"@sentry/node": "npm:^7.28.1"
|
||||||
"@standardnotes/common": "workspace:*"
|
"@standardnotes/common": "workspace:*"
|
||||||
"@standardnotes/domain-core": "workspace:^"
|
"@standardnotes/domain-core": "workspace:^"
|
||||||
"@standardnotes/domain-events": "workspace:*"
|
"@standardnotes/domain-events": "workspace:*"
|
||||||
@@ -1867,7 +1922,7 @@ __metadata:
|
|||||||
resolution: "@standardnotes/api-gateway@workspace:packages/api-gateway"
|
resolution: "@standardnotes/api-gateway@workspace:packages/api-gateway"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@newrelic/winston-enricher": "npm:^4.0.0"
|
"@newrelic/winston-enricher": "npm:^4.0.0"
|
||||||
"@sentry/node": "npm:^7.27.0"
|
"@sentry/node": "npm:^7.28.1"
|
||||||
"@standardnotes/common": "workspace:^"
|
"@standardnotes/common": "workspace:^"
|
||||||
"@standardnotes/domain-events": "workspace:*"
|
"@standardnotes/domain-events": "workspace:*"
|
||||||
"@standardnotes/domain-events-infra": "workspace:*"
|
"@standardnotes/domain-events-infra": "workspace:*"
|
||||||
@@ -1925,9 +1980,9 @@ __metadata:
|
|||||||
resolution: "@standardnotes/auth-server@workspace:packages/auth"
|
resolution: "@standardnotes/auth-server@workspace:packages/auth"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@newrelic/winston-enricher": "npm:^4.0.0"
|
"@newrelic/winston-enricher": "npm:^4.0.0"
|
||||||
"@sentry/node": "npm:^7.27.0"
|
"@sentry/node": "npm:^7.28.1"
|
||||||
"@sentry/profiling-node": "npm:^0.0.12"
|
"@sentry/profiling-node": "npm:^0.0.12"
|
||||||
"@sentry/tracing": "npm:^7.27.0"
|
"@sentry/tracing": "npm:^7.28.1"
|
||||||
"@standardnotes/api": "npm:^1.19.0"
|
"@standardnotes/api": "npm:^1.19.0"
|
||||||
"@standardnotes/common": "workspace:*"
|
"@standardnotes/common": "workspace:*"
|
||||||
"@standardnotes/domain-core": "workspace:^"
|
"@standardnotes/domain-core": "workspace:^"
|
||||||
@@ -2147,7 +2202,7 @@ __metadata:
|
|||||||
version: 0.0.0-use.local
|
version: 0.0.0-use.local
|
||||||
resolution: "@standardnotes/files-server@workspace:packages/files"
|
resolution: "@standardnotes/files-server@workspace:packages/files"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@sentry/node": "npm:^7.27.0"
|
"@sentry/node": "npm:^7.28.1"
|
||||||
"@standardnotes/common": "workspace:*"
|
"@standardnotes/common": "workspace:*"
|
||||||
"@standardnotes/config": "npm:2.4.3"
|
"@standardnotes/config": "npm:2.4.3"
|
||||||
"@standardnotes/domain-events": "workspace:*"
|
"@standardnotes/domain-events": "workspace:*"
|
||||||
@@ -2277,7 +2332,7 @@ __metadata:
|
|||||||
resolution: "@standardnotes/revisions-server@workspace:packages/revisions"
|
resolution: "@standardnotes/revisions-server@workspace:packages/revisions"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@newrelic/winston-enricher": "npm:^4.0.0"
|
"@newrelic/winston-enricher": "npm:^4.0.0"
|
||||||
"@sentry/node": "npm:^7.27.0"
|
"@sentry/node": "npm:^7.28.1"
|
||||||
"@standardnotes/api": "npm:^1.19.0"
|
"@standardnotes/api": "npm:^1.19.0"
|
||||||
"@standardnotes/common": "workspace:^"
|
"@standardnotes/common": "workspace:^"
|
||||||
"@standardnotes/domain-core": "workspace:^"
|
"@standardnotes/domain-core": "workspace:^"
|
||||||
@@ -2320,7 +2375,7 @@ __metadata:
|
|||||||
resolution: "@standardnotes/scheduler-server@workspace:packages/scheduler"
|
resolution: "@standardnotes/scheduler-server@workspace:packages/scheduler"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@newrelic/winston-enricher": "npm:^4.0.0"
|
"@newrelic/winston-enricher": "npm:^4.0.0"
|
||||||
"@sentry/node": "npm:^7.27.0"
|
"@sentry/node": "npm:^7.28.1"
|
||||||
"@standardnotes/common": "workspace:*"
|
"@standardnotes/common": "workspace:*"
|
||||||
"@standardnotes/domain-core": "workspace:^"
|
"@standardnotes/domain-core": "workspace:^"
|
||||||
"@standardnotes/domain-events": "workspace:*"
|
"@standardnotes/domain-events": "workspace:*"
|
||||||
@@ -2377,7 +2432,7 @@ __metadata:
|
|||||||
"@lerna-lite/cli": "npm:^1.5.1"
|
"@lerna-lite/cli": "npm:^1.5.1"
|
||||||
"@lerna-lite/list": "npm:^1.5.1"
|
"@lerna-lite/list": "npm:^1.5.1"
|
||||||
"@lerna-lite/run": "npm:^1.5.1"
|
"@lerna-lite/run": "npm:^1.5.1"
|
||||||
"@sentry/node": "npm:^7.27.0"
|
"@sentry/node": "npm:^7.28.1"
|
||||||
"@types/jest": "npm:^29.1.1"
|
"@types/jest": "npm:^29.1.1"
|
||||||
"@types/newrelic": "npm:^7.0.4"
|
"@types/newrelic": "npm:^7.0.4"
|
||||||
"@types/node": "npm:^18.11.9"
|
"@types/node": "npm:^18.11.9"
|
||||||
@@ -2436,9 +2491,9 @@ __metadata:
|
|||||||
resolution: "@standardnotes/syncing-server@workspace:packages/syncing-server"
|
resolution: "@standardnotes/syncing-server@workspace:packages/syncing-server"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@newrelic/winston-enricher": "npm:^4.0.0"
|
"@newrelic/winston-enricher": "npm:^4.0.0"
|
||||||
"@sentry/node": "npm:^7.27.0"
|
"@sentry/node": "npm:^7.28.1"
|
||||||
"@sentry/profiling-node": "npm:^0.0.12"
|
"@sentry/profiling-node": "npm:^0.0.12"
|
||||||
"@sentry/tracing": "npm:^7.27.0"
|
"@sentry/tracing": "npm:^7.28.1"
|
||||||
"@standardnotes/common": "workspace:*"
|
"@standardnotes/common": "workspace:*"
|
||||||
"@standardnotes/domain-core": "workspace:^"
|
"@standardnotes/domain-core": "workspace:^"
|
||||||
"@standardnotes/domain-events": "workspace:*"
|
"@standardnotes/domain-events": "workspace:*"
|
||||||
@@ -2534,7 +2589,7 @@ __metadata:
|
|||||||
resolution: "@standardnotes/websockets-server@workspace:packages/websockets"
|
resolution: "@standardnotes/websockets-server@workspace:packages/websockets"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@newrelic/winston-enricher": "npm:^4.0.0"
|
"@newrelic/winston-enricher": "npm:^4.0.0"
|
||||||
"@sentry/node": "npm:^7.27.0"
|
"@sentry/node": "npm:^7.28.1"
|
||||||
"@standardnotes/api": "npm:^1.19.0"
|
"@standardnotes/api": "npm:^1.19.0"
|
||||||
"@standardnotes/common": "workspace:^"
|
"@standardnotes/common": "workspace:^"
|
||||||
"@standardnotes/domain-events": "workspace:^"
|
"@standardnotes/domain-events": "workspace:^"
|
||||||
@@ -2572,7 +2627,7 @@ __metadata:
|
|||||||
resolution: "@standardnotes/workspace-server@workspace:packages/workspace"
|
resolution: "@standardnotes/workspace-server@workspace:packages/workspace"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@newrelic/winston-enricher": "npm:^4.0.0"
|
"@newrelic/winston-enricher": "npm:^4.0.0"
|
||||||
"@sentry/node": "npm:^7.27.0"
|
"@sentry/node": "npm:^7.28.1"
|
||||||
"@standardnotes/api": "npm:^1.19.0"
|
"@standardnotes/api": "npm:^1.19.0"
|
||||||
"@standardnotes/common": "workspace:*"
|
"@standardnotes/common": "workspace:*"
|
||||||
"@standardnotes/domain-core": "workspace:^"
|
"@standardnotes/domain-core": "workspace:^"
|
||||||
|
|||||||
Reference in New Issue
Block a user