Compare commits

..

25 Commits

Author SHA1 Message Date
standardci
c9c496c63f chore(release): publish new version
- @standardnotes/api-gateway@1.2.2
 - @standardnotes/auth-server@1.3.1
 - @standardnotes/files-server@1.1.7
 - @standardnotes/scheduler-server@1.2.2
 - @standardnotes/syncing-server@1.1.7
2022-06-27 21:57:06 +00:00
Mo
b1c9f8ca6e Merge pull request #1 from standardnotes/chore/snjs-workflow
chore: upgrade snjs event workflow
2022-06-27 16:56:33 -05:00
Mo
e84bd73a39 chore: add snjs workflow event handler 2022-06-27 16:53:57 -05:00
Mo
c69d1b02fb chore: add ini dep for ncu 2022-06-27 16:52:20 -05:00
Mo
b590d33b88 chore: ncu version 2022-06-27 16:48:02 -05:00
Mo
c1e7a3eb7e chore: add ncu to each package 2022-06-27 16:47:19 -05:00
Mo
fd743a9d5e chore: add npm-check-updates dev dep 2022-06-27 16:44:43 -05:00
standardci
4c40fd5186 chore(release): publish new version
- @standardnotes/api-gateway@1.2.1
2022-06-27 10:27:36 +00:00
Karol Sójko
2cb470b99e fix: issue with NaN error code responses 2022-06-27 12:27:00 +02:00
standardci
b6539f8795 chore(release): publish new version
- @standardnotes/auth-server@1.3.0
2022-06-27 10:18:23 +00:00
Karol Sójko
6d7de4a8da feat: add endpoint for muting marketing emails 2022-06-27 12:17:47 +02:00
standardci
41999f36f0 chore(release): publish new version
- @standardnotes/api-gateway@1.2.0
 - @standardnotes/auth-server@1.2.1
2022-06-27 10:07:19 +00:00
Karol Sójko
fa2a8da17b feat: add endpoint to mute marketing emails 2022-06-27 12:06:33 +02:00
Karol Sójko
214684eae7 fix: add setting uuid to email requests 2022-06-27 12:06:33 +02:00
standardci
b3a92af04d chore(release): publish new version
- @standardnotes/auth-server@1.2.0
2022-06-27 09:57:22 +00:00
Karol Sójko
210a314c81 feat: add docker commands to start sending emails 2022-06-27 11:56:42 +02:00
standardci
46cba52bcb chore(release): publish new version
- @standardnotes/auth-server@1.1.7
2022-06-27 08:44:03 +00:00
Karol Sójko
bf14ec05f9 fix: add sending out email campaigns 2022-06-27 10:43:23 +02:00
standardci
6f88a96c3e chore(release): publish new version
- @standardnotes/scheduler-server@1.2.1
2022-06-27 07:42:47 +00:00
Karol Sójko
e12c9c47a7 fix: change subscription encouragement scheduled from 14 to 30 days 2022-06-27 09:42:08 +02:00
standardci
83085052f8 chore(release): publish new version
- @standardnotes/api-gateway@1.1.6
 - @standardnotes/auth-server@1.1.6
 - @standardnotes/files-server@1.1.6
 - @standardnotes/scheduler-server@1.2.0
 - @standardnotes/syncing-server@1.1.6
2022-06-27 07:25:46 +00:00
Karol Sójko
eda618d845 Merge branch 'main' of github.com:standardnotes/server 2022-06-27 09:25:04 +02:00
Karol Sójko
8d4280f4ca feat: add context for requesting email message 2022-06-27 09:24:43 +02:00
standardci
b57816bba4 chore(release): publish new version
- @standardnotes/api-gateway@1.1.5
 - @standardnotes/auth-server@1.1.5
 - @standardnotes/files-server@1.1.5
 - @standardnotes/scheduler-server@1.1.5
 - @standardnotes/syncing-server@1.1.5
2022-06-27 04:59:52 +00:00
Karol Sójko
b6db194a22 fix: upgrade sentry node sdk 2022-06-27 06:59:15 +02:00
80 changed files with 1311 additions and 174 deletions

View File

@@ -0,0 +1,46 @@
name: Update SNJS Packages
on:
workflow_dispatch:
repository_dispatch:
types: [snjs-updated-event]
jobs:
SNJSUpdateEvent:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
ref: main
token: ${{ secrets.CI_PAT_TOKEN }}
- uses: actions/setup-node@v3
with:
registry-url: 'https://registry.npmjs.org'
- name: Setup git config
run: |
git config --global user.name "standardci"
git config --global user.email "ci@standardnotes.com"
- name: Import GPG key
uses: crazy-max/ghaction-import-gpg@v4
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.PASSPHRASE }}
git_user_signingkey: true
git_commit_gpgsign: true
- run: yarn install
- run: |
yarn upgrade:snjs
yarn install --no-immutable
- name: Create Pull Request
uses: peter-evans/create-pull-request@v4
with:
token: ${{ secrets.CI_PAT_TOKEN }}
title: "${{ 'chore(deps): upgrade snjs' }}"
body: Updates all packages prefixed with "@standardnotes/"
commit-message: "${{ 'chore(deps): upgrade snjs' }}"
delete-branch: true
committer: standardci <ci@standardnotes.com>
author: standardci <ci@standardnotes.com>

386
.pnp.cjs generated
View File

@@ -63,13 +63,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@lerna-lite/cli", "npm:1.5.1"],\
["@lerna-lite/list", "npm:1.5.1"],\
["@lerna-lite/run", "npm:1.5.1"],\
["@sentry/node", "npm:7.3.0"],\
["@types/jest", "npm:28.1.3"],\
["@types/newrelic", "npm:7.0.3"],\
["@types/node", "npm:18.0.0"],\
["@typescript-eslint/parser", "virtual:8859b278716fedf3e7458b5628625f7e35678c418626878559a0b816445001b7e24c55546f4677ba4c20b521aa0cf52cc33ac07deff171e383ada6eeab69933f#npm:5.29.0"],\
["eslint", "npm:8.18.0"],\
["eslint-config-prettier", "virtual:8859b278716fedf3e7458b5628625f7e35678c418626878559a0b816445001b7e24c55546f4677ba4c20b521aa0cf52cc33ac07deff171e383ada6eeab69933f#npm:8.5.0"],\
["ini", "npm:3.0.0"],\
["newrelic", "npm:8.14.1"],\
["npm-check-updates", "npm:14.1.1"],\
["prettier", "npm:2.7.1"],\
["ts-node", "virtual:9e9d2b94dac68914cfc6173c41e92914f6d1fe30b9ab6e163c2043744960a73d771c78f37827a8773b7adeb75f4b67f907cd8c18197a7807ce979a4aea3b2602#npm:10.8.1"],\
["typescript", "patch:typescript@npm%3A4.7.4#~builtin<compat/typescript>::version=4.7.4&hash=7ad353"]\
@@ -2305,52 +2308,39 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["@sentry/core", [\
["npm:6.19.7", {\
"packageLocation": "./.yarn/cache/@sentry-core-npm-6.19.7-4cbb62d040-d212e8ef07.zip/node_modules/@sentry/core/",\
["npm:7.3.0", {\
"packageLocation": "./.yarn/cache/@sentry-core-npm-7.3.0-8e7d2a21e6-1768568404.zip/node_modules/@sentry/core/",\
"packageDependencies": [\
["@sentry/core", "npm:6.19.7"],\
["@sentry/hub", "npm:6.19.7"],\
["@sentry/minimal", "npm:6.19.7"],\
["@sentry/types", "npm:6.19.7"],\
["@sentry/utils", "npm:6.19.7"],\
["@sentry/core", "npm:7.3.0"],\
["@sentry/hub", "npm:7.3.0"],\
["@sentry/types", "npm:7.3.0"],\
["@sentry/utils", "npm:7.3.0"],\
["tslib", "npm:1.14.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["@sentry/hub", [\
["npm:6.19.7", {\
"packageLocation": "./.yarn/cache/@sentry-hub-npm-6.19.7-6469362c23-10bb1c5cba.zip/node_modules/@sentry/hub/",\
["npm:7.3.0", {\
"packageLocation": "./.yarn/cache/@sentry-hub-npm-7.3.0-b5d4219eb3-a052a7c940.zip/node_modules/@sentry/hub/",\
"packageDependencies": [\
["@sentry/hub", "npm:6.19.7"],\
["@sentry/types", "npm:6.19.7"],\
["@sentry/utils", "npm:6.19.7"],\
["tslib", "npm:1.14.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["@sentry/minimal", [\
["npm:6.19.7", {\
"packageLocation": "./.yarn/cache/@sentry-minimal-npm-6.19.7-7527a9814c-9153ac426e.zip/node_modules/@sentry/minimal/",\
"packageDependencies": [\
["@sentry/minimal", "npm:6.19.7"],\
["@sentry/hub", "npm:6.19.7"],\
["@sentry/types", "npm:6.19.7"],\
["@sentry/hub", "npm:7.3.0"],\
["@sentry/types", "npm:7.3.0"],\
["@sentry/utils", "npm:7.3.0"],\
["tslib", "npm:1.14.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["@sentry/node", [\
["npm:6.19.7", {\
"packageLocation": "./.yarn/cache/@sentry-node-npm-6.19.7-edcd5da482-2293b0d1d1.zip/node_modules/@sentry/node/",\
["npm:7.3.0", {\
"packageLocation": "./.yarn/cache/@sentry-node-npm-7.3.0-ae73eb5bb5-a92c2d2d1b.zip/node_modules/@sentry/node/",\
"packageDependencies": [\
["@sentry/node", "npm:6.19.7"],\
["@sentry/core", "npm:6.19.7"],\
["@sentry/hub", "npm:6.19.7"],\
["@sentry/types", "npm:6.19.7"],\
["@sentry/utils", "npm:6.19.7"],\
["@sentry/node", "npm:7.3.0"],\
["@sentry/core", "npm:7.3.0"],\
["@sentry/hub", "npm:7.3.0"],\
["@sentry/types", "npm:7.3.0"],\
["@sentry/utils", "npm:7.3.0"],\
["cookie", "npm:0.4.2"],\
["https-proxy-agent", "npm:5.0.1"],\
["lru_map", "npm:0.3.3"],\
@@ -2360,20 +2350,20 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["@sentry/types", [\
["npm:6.19.7", {\
"packageLocation": "./.yarn/cache/@sentry-types-npm-6.19.7-f75535a9f4-f46ef74a33.zip/node_modules/@sentry/types/",\
["npm:7.3.0", {\
"packageLocation": "./.yarn/cache/@sentry-types-npm-7.3.0-4a455bc29c-3ddbc3c7eb.zip/node_modules/@sentry/types/",\
"packageDependencies": [\
["@sentry/types", "npm:6.19.7"]\
["@sentry/types", "npm:7.3.0"]\
],\
"linkType": "HARD"\
}]\
]],\
["@sentry/utils", [\
["npm:6.19.7", {\
"packageLocation": "./.yarn/cache/@sentry-utils-npm-6.19.7-d61c6c8632-a000223b9c.zip/node_modules/@sentry/utils/",\
["npm:7.3.0", {\
"packageLocation": "./.yarn/cache/@sentry-utils-npm-7.3.0-a4b6fc94f0-2696b1bfad.zip/node_modules/@sentry/utils/",\
"packageDependencies": [\
["@sentry/utils", "npm:6.19.7"],\
["@sentry/types", "npm:6.19.7"],\
["@sentry/utils", "npm:7.3.0"],\
["@sentry/types", "npm:7.3.0"],\
["tslib", "npm:1.14.1"]\
],\
"linkType": "HARD"\
@@ -2456,7 +2446,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageDependencies": [\
["@standardnotes/api-gateway", "workspace:packages/api-gateway"],\
["@newrelic/winston-enricher", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:2.1.2"],\
["@sentry/node", "npm:6.19.7"],\
["@sentry/node", "npm:7.3.0"],\
["@standardnotes/analytics", "npm:1.6.0"],\
["@standardnotes/auth", "npm:3.19.2"],\
["@standardnotes/domain-events", "npm:2.29.0"],\
@@ -2485,6 +2475,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["jsonwebtoken", "npm:8.5.1"],\
["newrelic", "npm:8.14.1"],\
["nodemon", "npm:2.0.16"],\
["npm-check-updates", "npm:14.1.1"],\
["prettyjson", "npm:1.2.1"],\
["reflect-metadata", "npm:0.1.13"],\
["ts-jest", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:28.0.5"],\
@@ -2511,6 +2502,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["jsonwebtoken", "npm:8.5.1"]\
],\
"linkType": "HARD"\
}],\
["npm:3.19.4", {\
"packageLocation": "./.yarn/cache/@standardnotes-auth-npm-3.19.4-29b35c1352-84ac9e669e.zip/node_modules/@standardnotes/auth/",\
"packageDependencies": [\
["@standardnotes/auth", "npm:3.19.4"],\
["@standardnotes/common", "npm:1.23.1"],\
["jsonwebtoken", "npm:8.5.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["@standardnotes/auth-server", [\
@@ -2519,17 +2519,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageDependencies": [\
["@standardnotes/auth-server", "workspace:packages/auth"],\
["@newrelic/winston-enricher", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:2.1.2"],\
["@sentry/node", "npm:6.19.7"],\
["@sentry/node", "npm:7.3.0"],\
["@standardnotes/analytics", "npm:1.6.0"],\
["@standardnotes/api", "npm:1.1.13"],\
["@standardnotes/auth", "npm:3.19.3"],\
["@standardnotes/common", "npm:1.23.0"],\
["@standardnotes/domain-events", "npm:2.32.2"],\
["@standardnotes/common", "npm:1.23.1"],\
["@standardnotes/domain-events", "npm:2.32.4"],\
["@standardnotes/domain-events-infra", "npm:1.5.2"],\
["@standardnotes/features", "npm:1.45.5"],\
["@standardnotes/responses", "npm:1.6.36"],\
["@standardnotes/scheduler", "npm:1.1.1"],\
["@standardnotes/settings", "npm:1.14.3"],\
["@standardnotes/settings", "npm:1.15.0"],\
["@standardnotes/sncrypto-common", "npm:1.9.0"],\
["@standardnotes/sncrypto-node", "npm:1.8.3"],\
["@standardnotes/time", "npm:1.7.0"],\
@@ -2561,6 +2561,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["mysql2", "npm:2.3.3"],\
["newrelic", "npm:8.14.1"],\
["nodemon", "npm:2.0.16"],\
["npm-check-updates", "npm:14.1.1"],\
["otplib", "npm:12.0.1"],\
["prettyjson", "npm:1.2.1"],\
["reflect-metadata", "npm:0.1.13"],\
@@ -2580,6 +2581,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@standardnotes/common", "npm:1.23.0"]\
],\
"linkType": "HARD"\
}],\
["npm:1.23.1", {\
"packageLocation": "./.yarn/cache/@standardnotes-common-npm-1.23.1-ed73dbb679-f498f4c469.zip/node_modules/@standardnotes/common/",\
"packageDependencies": [\
["@standardnotes/common", "npm:1.23.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["@standardnotes/config", [\
@@ -2612,6 +2620,26 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@standardnotes/scheduler", "npm:1.1.1"]\
],\
"linkType": "HARD"\
}],\
["npm:2.32.3", {\
"packageLocation": "./.yarn/cache/@standardnotes-domain-events-npm-2.32.3-d2cd9a7c7f-ea6151d137.zip/node_modules/@standardnotes/domain-events/",\
"packageDependencies": [\
["@standardnotes/domain-events", "npm:2.32.3"],\
["@standardnotes/auth", "npm:3.19.3"],\
["@standardnotes/features", "npm:1.45.5"],\
["@standardnotes/scheduler", "npm:1.1.1"]\
],\
"linkType": "HARD"\
}],\
["npm:2.32.4", {\
"packageLocation": "./.yarn/cache/@standardnotes-domain-events-npm-2.32.4-0b0cc85196-9f8a1637aa.zip/node_modules/@standardnotes/domain-events/",\
"packageDependencies": [\
["@standardnotes/domain-events", "npm:2.32.4"],\
["@standardnotes/auth", "npm:3.19.4"],\
["@standardnotes/features", "npm:1.45.6"],\
["@standardnotes/scheduler", "npm:1.1.2"]\
],\
"linkType": "HARD"\
}]\
]],\
["@standardnotes/domain-events-infra", [\
@@ -2665,6 +2693,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@standardnotes/common", "npm:1.23.0"]\
],\
"linkType": "HARD"\
}],\
["npm:1.45.6", {\
"packageLocation": "./.yarn/cache/@standardnotes-features-npm-1.45.6-6f88b4fd2a-572780d6e2.zip/node_modules/@standardnotes/features/",\
"packageDependencies": [\
["@standardnotes/features", "npm:1.45.6"],\
["@standardnotes/auth", "npm:3.19.4"],\
["@standardnotes/common", "npm:1.23.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["@standardnotes/files-server", [\
@@ -2672,7 +2709,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageLocation": "./packages/files/",\
"packageDependencies": [\
["@standardnotes/files-server", "workspace:packages/files"],\
["@sentry/node", "npm:6.19.7"],\
["@sentry/node", "npm:7.3.0"],\
["@standardnotes/auth", "npm:3.19.3"],\
["@standardnotes/common", "npm:1.23.0"],\
["@standardnotes/config", "npm:2.0.1"],\
@@ -2708,6 +2745,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["jsonwebtoken", "npm:8.5.1"],\
["newrelic", "npm:8.14.1"],\
["nodemon", "npm:2.0.16"],\
["npm-check-updates", "npm:14.1.1"],\
["prettyjson", "npm:1.2.5"],\
["reflect-metadata", "npm:0.1.13"],\
["ts-jest", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:28.0.5"],\
@@ -2762,6 +2800,14 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@standardnotes/common", "npm:1.23.0"]\
],\
"linkType": "HARD"\
}],\
["npm:1.1.2", {\
"packageLocation": "./.yarn/cache/@standardnotes-scheduler-npm-1.1.2-78f89314fb-68642a0874.zip/node_modules/@standardnotes/scheduler/",\
"packageDependencies": [\
["@standardnotes/scheduler", "npm:1.1.2"],\
["@standardnotes/common", "npm:1.23.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["@standardnotes/scheduler-server", [\
@@ -2770,8 +2816,9 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageDependencies": [\
["@standardnotes/scheduler-server", "workspace:packages/scheduler"],\
["@newrelic/winston-enricher", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:2.1.2"],\
["@sentry/node", "npm:7.3.0"],\
["@standardnotes/common", "npm:1.23.0"],\
["@standardnotes/domain-events", "npm:2.32.2"],\
["@standardnotes/domain-events", "npm:2.32.3"],\
["@standardnotes/domain-events-infra", "npm:1.5.2"],\
["@standardnotes/scheduler", "npm:1.1.1"],\
["@standardnotes/time", "npm:1.7.0"],\
@@ -2789,6 +2836,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["jest", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:28.1.1"],\
["mysql2", "npm:2.3.3"],\
["newrelic", "npm:8.14.1"],\
["npm-check-updates", "npm:14.1.1"],\
["reflect-metadata", "npm:0.1.13"],\
["ts-jest", "virtual:16bfd8597041deb71e4581ea0755edd4dcd1b09b8ab14bfbbf5e4d5ca6b5d47ed7fbe2a25cdf57fcbb8e092c30b6beb93d2e7533f9e31c5dc62f7f0e487d1e4b#npm:28.0.5"],\
["typeorm", "virtual:31b5a94a105c89c9294c3d524a7f8929fe63ee5a2efadf21951ca4c0cfd2ecf02e8f4ef5a066bbda091f1e3a56e57c6749069a080618c96b22e51131a330fc4a#npm:0.3.6"],\
@@ -2807,13 +2855,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@lerna-lite/cli", "npm:1.5.1"],\
["@lerna-lite/list", "npm:1.5.1"],\
["@lerna-lite/run", "npm:1.5.1"],\
["@sentry/node", "npm:7.3.0"],\
["@types/jest", "npm:28.1.3"],\
["@types/newrelic", "npm:7.0.3"],\
["@types/node", "npm:18.0.0"],\
["@typescript-eslint/parser", "virtual:8859b278716fedf3e7458b5628625f7e35678c418626878559a0b816445001b7e24c55546f4677ba4c20b521aa0cf52cc33ac07deff171e383ada6eeab69933f#npm:5.29.0"],\
["eslint", "npm:8.18.0"],\
["eslint-config-prettier", "virtual:8859b278716fedf3e7458b5628625f7e35678c418626878559a0b816445001b7e24c55546f4677ba4c20b521aa0cf52cc33ac07deff171e383ada6eeab69933f#npm:8.5.0"],\
["ini", "npm:3.0.0"],\
["newrelic", "npm:8.14.1"],\
["npm-check-updates", "npm:14.1.1"],\
["prettier", "npm:2.7.1"],\
["ts-node", "virtual:9e9d2b94dac68914cfc6173c41e92914f6d1fe30b9ab6e163c2043744960a73d771c78f37827a8773b7adeb75f4b67f907cd8c18197a7807ce979a4aea3b2602#npm:10.8.1"],\
["typescript", "patch:typescript@npm%3A4.7.4#~builtin<compat/typescript>::version=4.7.4&hash=7ad353"]\
@@ -2842,6 +2893,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@standardnotes/settings", "npm:1.14.3"]\
],\
"linkType": "HARD"\
}],\
["npm:1.15.0", {\
"packageLocation": "./.yarn/cache/@standardnotes-settings-npm-1.15.0-bfec86ee49-4397d453a1.zip/node_modules/@standardnotes/settings/",\
"packageDependencies": [\
["@standardnotes/settings", "npm:1.15.0"]\
],\
"linkType": "HARD"\
}]\
]],\
["@standardnotes/sncrypto-common", [\
@@ -2869,7 +2927,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageDependencies": [\
["@standardnotes/syncing-server", "workspace:packages/syncing-server"],\
["@newrelic/winston-enricher", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:2.1.2"],\
["@sentry/node", "npm:6.19.7"],\
["@sentry/node", "npm:7.3.0"],\
["@standardnotes/analytics", "npm:1.6.0"],\
["@standardnotes/auth", "npm:3.19.3"],\
["@standardnotes/common", "npm:1.23.0"],\
@@ -2907,6 +2965,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["mysql2", "npm:2.3.3"],\
["newrelic", "npm:8.14.1"],\
["nodemon", "npm:2.0.7"],\
["npm-check-updates", "npm:14.1.1"],\
["prettyjson", "npm:1.2.1"],\
["reflect-metadata", "npm:0.1.13"],\
["ts-jest", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:28.0.5"],\
@@ -4903,6 +4962,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["cint", [\
["npm:8.2.1", {\
"packageLocation": "./.yarn/cache/cint-npm-8.2.1-958b3dddeb-5f32feed16.zip/node_modules/cint/",\
"packageDependencies": [\
["cint", "npm:8.2.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["cjs-module-lexer", [\
["npm:1.2.2", {\
"packageLocation": "./.yarn/cache/cjs-module-lexer-npm-1.2.2-473ce063ea-977f3f042b.zip/node_modules/cjs-module-lexer/",\
@@ -4964,6 +5032,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["cli-table", [\
["npm:0.3.11", {\
"packageLocation": "./.yarn/cache/cli-table-npm-0.3.11-f912789cff-59fb61f992.zip/node_modules/cli-table/",\
"packageDependencies": [\
["cli-table", "npm:0.3.11"],\
["colors", "npm:1.0.3"]\
],\
"linkType": "HARD"\
}]\
]],\
["cli-width", [\
["npm:3.0.0", {\
"packageLocation": "./.yarn/cache/cli-width-npm-3.0.0-387b3f68f9-4c94af3769.zip/node_modules/cli-width/",\
@@ -5109,6 +5187,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["colors", [\
["npm:1.0.3", {\
"packageLocation": "./.yarn/cache/colors-npm-1.0.3-6c5d583ab3-234e8d3ab7.zip/node_modules/colors/",\
"packageDependencies": [\
["colors", "npm:1.0.3"]\
],\
"linkType": "HARD"\
}],\
["npm:1.4.0", {\
"packageLocation": "./.yarn/cache/colors-npm-1.4.0-7e2cf12234-98aa2c2418.zip/node_modules/colors/",\
"packageDependencies": [\
@@ -5139,6 +5224,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["commander", [\
["npm:9.3.0", {\
"packageLocation": "./.yarn/cache/commander-npm-9.3.0-1393a6e1f6-d421ce66fe.zip/node_modules/commander/",\
"packageDependencies": [\
["commander", "npm:9.3.0"]\
],\
"linkType": "HARD"\
}]\
]],\
["compare-func", [\
["npm:2.0.0", {\
"packageLocation": "./.yarn/cache/compare-func-npm-2.0.0-9cd7852f23-fb71d70632.zip/node_modules/compare-func/",\
@@ -6547,6 +6641,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["fast-memoize", [\
["npm:2.5.2", {\
"packageLocation": "./.yarn/cache/fast-memoize-npm-2.5.2-f42a7c6940-79fa759719.zip/node_modules/fast-memoize/",\
"packageDependencies": [\
["fast-memoize", "npm:2.5.2"]\
],\
"linkType": "HARD"\
}]\
]],\
["fastq", [\
["npm:1.13.0", {\
"packageLocation": "./.yarn/cache/fastq-npm-1.13.0-a45963881c-32cf15c29a.zip/node_modules/fastq/",\
@@ -6733,6 +6836,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["fp-and-or", [\
["npm:0.1.3", {\
"packageLocation": "./.yarn/cache/fp-and-or-npm-0.1.3-033d5c60bb-d556ad1fb0.zip/node_modules/fp-and-or/",\
"packageDependencies": [\
["fp-and-or", "npm:0.1.3"]\
],\
"linkType": "HARD"\
}]\
]],\
["fresh", [\
["npm:0.5.2", {\
"packageLocation": "./.yarn/cache/fresh-npm-0.5.2-ad2bb4c0a2-13ea8b08f9.zip/node_modules/fresh/",\
@@ -6880,6 +6992,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["get-stdin", [\
["npm:8.0.0", {\
"packageLocation": "./.yarn/cache/get-stdin-npm-8.0.0-920f876bc2-40128b6cd2.zip/node_modules/get-stdin/",\
"packageDependencies": [\
["get-stdin", "npm:8.0.0"]\
],\
"linkType": "HARD"\
}]\
]],\
["get-stream", [\
["npm:4.1.0", {\
"packageLocation": "./.yarn/cache/get-stream-npm-4.1.0-314d430a5d-443e191417.zip/node_modules/get-stream/",\
@@ -7524,6 +7645,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["ini", "npm:2.0.0"]\
],\
"linkType": "HARD"\
}],\
["npm:3.0.0", {\
"packageLocation": "./.yarn/cache/ini-npm-3.0.0-c2af955701-e92b6b0835.zip/node_modules/ini/",\
"packageDependencies": [\
["ini", "npm:3.0.0"]\
],\
"linkType": "HARD"\
}]\
]],\
["inquirer", [\
@@ -8516,6 +8644,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["jju", [\
["npm:1.4.0", {\
"packageLocation": "./.yarn/cache/jju-npm-1.4.0-670678eaa3-3790481bd2.zip/node_modules/jju/",\
"packageDependencies": [\
["jju", "npm:1.4.0"]\
],\
"linkType": "HARD"\
}]\
]],\
["jmespath", [\
["npm:0.16.0", {\
"packageLocation": "./.yarn/cache/jmespath-npm-0.16.0-d47535c65a-2d602493a1.zip/node_modules/jmespath/",\
@@ -8589,6 +8726,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["json-parse-helpfulerror", [\
["npm:1.0.3", {\
"packageLocation": "./.yarn/cache/json-parse-helpfulerror-npm-1.0.3-003666633e-376d85c372.zip/node_modules/json-parse-helpfulerror/",\
"packageDependencies": [\
["json-parse-helpfulerror", "npm:1.0.3"],\
["jju", "npm:1.4.0"]\
],\
"linkType": "HARD"\
}]\
]],\
["json-schema-traverse", [\
["npm:0.4.1", {\
"packageLocation": "./.yarn/cache/json-schema-traverse-npm-0.4.1-4759091693-7486074d3b.zip/node_modules/json-schema-traverse/",\
@@ -8636,6 +8783,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["jsonlines", [\
["npm:0.1.1", {\
"packageLocation": "./.yarn/cache/jsonlines-npm-0.1.1-0b9cdf648d-5408cbdbd3.zip/node_modules/jsonlines/",\
"packageDependencies": [\
["jsonlines", "npm:0.1.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["jsonparse", [\
["npm:1.3.1", {\
"packageLocation": "./.yarn/cache/jsonparse-npm-1.3.1-b6fde74828-6514a7be46.zip/node_modules/jsonparse/",\
@@ -8713,6 +8869,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["kleur", "npm:3.0.3"]\
],\
"linkType": "HARD"\
}],\
["npm:4.1.5", {\
"packageLocation": "./.yarn/cache/kleur-npm-4.1.5-46b6135f41-1dc476e327.zip/node_modules/kleur/",\
"packageDependencies": [\
["kleur", "npm:4.1.5"]\
],\
"linkType": "HARD"\
}]\
]],\
["kuler", [\
@@ -9831,6 +9994,43 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["npm-check-updates", [\
["npm:14.1.1", {\
"packageLocation": "./.yarn/cache/npm-check-updates-npm-14.1.1-c02bfe3d02-a3ec52312c.zip/node_modules/npm-check-updates/",\
"packageDependencies": [\
["npm-check-updates", "npm:14.1.1"],\
["chalk", "npm:4.1.2"],\
["cint", "npm:8.2.1"],\
["cli-table", "npm:0.3.11"],\
["commander", "npm:9.3.0"],\
["fast-memoize", "npm:2.5.2"],\
["find-up", "npm:5.0.0"],\
["fp-and-or", "npm:0.1.3"],\
["get-stdin", "npm:8.0.0"],\
["globby", "npm:11.1.0"],\
["hosted-git-info", "npm:5.0.0"],\
["json-parse-helpfulerror", "npm:1.0.3"],\
["jsonlines", "npm:0.1.1"],\
["lodash", "npm:4.17.21"],\
["minimatch", "npm:5.1.0"],\
["p-map", "npm:4.0.0"],\
["pacote", "npm:13.6.0"],\
["parse-github-url", "npm:1.0.2"],\
["progress", "npm:2.0.3"],\
["prompts-ncu", "npm:2.5.0"],\
["rc-config-loader", "npm:4.1.0"],\
["remote-git-tags", "npm:3.0.0"],\
["rimraf", "npm:3.0.2"],\
["semver", "npm:7.3.7"],\
["semver-utils", "npm:1.1.4"],\
["source-map-support", "npm:0.5.21"],\
["spawn-please", "npm:1.0.0"],\
["update-notifier", "npm:5.1.0"],\
["yaml", "npm:2.1.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["npm-install-checks", [\
["npm:5.0.0", {\
"packageLocation": "./.yarn/cache/npm-install-checks-npm-5.0.0-ca22f8c8a0-0e7d1aae52.zip/node_modules/npm-install-checks/",\
@@ -10251,6 +10451,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["parse-github-url", [\
["npm:1.0.2", {\
"packageLocation": "./.yarn/cache/parse-github-url-npm-1.0.2-290c32ecbc-a19b8bc6f8.zip/node_modules/parse-github-url/",\
"packageDependencies": [\
["parse-github-url", "npm:1.0.2"]\
],\
"linkType": "HARD"\
}]\
]],\
["parse-json", [\
["npm:4.0.0", {\
"packageLocation": "./.yarn/cache/parse-json-npm-4.0.0-a6f7771010-0fe227d410.zip/node_modules/parse-json/",\
@@ -10578,6 +10787,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["progress", [\
["npm:2.0.3", {\
"packageLocation": "./.yarn/cache/progress-npm-2.0.3-d1f87e2ac6-f67403fe7b.zip/node_modules/progress/",\
"packageDependencies": [\
["progress", "npm:2.0.3"]\
],\
"linkType": "HARD"\
}]\
]],\
["promise-inflight", [\
["npm:1.0.1", {\
"packageLocation": "./.yarn/cache/promise-inflight-npm-1.0.1-5bb925afac-2274948309.zip/node_modules/promise-inflight/",\
@@ -10622,6 +10840,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["prompts-ncu", [\
["npm:2.5.0", {\
"packageLocation": "./.yarn/cache/prompts-ncu-npm-2.5.0-5d11c7d5b9-e050961c30.zip/node_modules/prompts-ncu/",\
"packageDependencies": [\
["prompts-ncu", "npm:2.5.0"],\
["kleur", "npm:4.1.5"],\
["sisteransi", "npm:1.0.5"]\
],\
"linkType": "HARD"\
}]\
]],\
["proto-list", [\
["npm:1.2.4", {\
"packageLocation": "./.yarn/cache/proto-list-npm-1.2.4-a96a43df28-4d4826e171.zip/node_modules/proto-list/",\
@@ -10848,6 +11077,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["rc-config-loader", [\
["npm:4.1.0", {\
"packageLocation": "./.yarn/cache/rc-config-loader-npm-4.1.0-207fabc6dd-1d07aaf611.zip/node_modules/rc-config-loader/",\
"packageDependencies": [\
["rc-config-loader", "npm:4.1.0"],\
["debug", "virtual:b86a9fb34323a98c6519528ed55faa0d9b44ca8879307c0b29aa384bde47ff59a7d0c9051b31246f14521dfb71ba3c5d6d0b35c29fffc17bf875aa6ad977d9e8#npm:4.3.4"],\
["js-yaml", "npm:4.1.0"],\
["json5", "npm:2.2.1"],\
["require-from-string", "npm:2.0.2"]\
],\
"linkType": "HARD"\
}]\
]],\
["react-is", [\
["npm:18.2.0", {\
"packageLocation": "./.yarn/cache/react-is-npm-18.2.0-0cc5edb910-e72d0ba81b.zip/node_modules/react-is/",\
@@ -11038,6 +11280,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["remote-git-tags", [\
["npm:3.0.0", {\
"packageLocation": "./.yarn/cache/remote-git-tags-npm-3.0.0-d27b051c92-04d87e4c98.zip/node_modules/remote-git-tags/",\
"packageDependencies": [\
["remote-git-tags", "npm:3.0.0"]\
],\
"linkType": "HARD"\
}]\
]],\
["require-directory", [\
["npm:2.1.1", {\
"packageLocation": "./.yarn/cache/require-directory-npm-2.1.1-8608aee50b-fb47e70bf0.zip/node_modules/require-directory/",\
@@ -11047,6 +11298,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["require-from-string", [\
["npm:2.0.2", {\
"packageLocation": "./.yarn/cache/require-from-string-npm-2.0.2-8557e0db12-a03ef68954.zip/node_modules/require-from-string/",\
"packageDependencies": [\
["require-from-string", "npm:2.0.2"]\
],\
"linkType": "HARD"\
}]\
]],\
["resolve", [\
["patch:resolve@npm%3A1.22.1#~builtin<compat/resolve>::version=1.22.1&hash=07638b", {\
"packageLocation": "./.yarn/cache/resolve-patch-46f9469d0d-5656f4d0be.zip/node_modules/resolve/",\
@@ -11266,6 +11526,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["semver-utils", [\
["npm:1.1.4", {\
"packageLocation": "./.yarn/cache/semver-utils-npm-1.1.4-61f884e528-93fd955a30.zip/node_modules/semver-utils/",\
"packageDependencies": [\
["semver-utils", "npm:1.1.4"]\
],\
"linkType": "HARD"\
}]\
]],\
["send", [\
["npm:0.17.1", {\
"packageLocation": "./.yarn/cache/send-npm-0.17.1-aad5512679-d214c2fa42.zip/node_modules/send/",\
@@ -11533,6 +11802,24 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["source-map", "npm:0.6.1"]\
],\
"linkType": "HARD"\
}],\
["npm:0.5.21", {\
"packageLocation": "./.yarn/cache/source-map-support-npm-0.5.21-09ca99e250-43e98d700d.zip/node_modules/source-map-support/",\
"packageDependencies": [\
["source-map-support", "npm:0.5.21"],\
["buffer-from", "npm:1.1.2"],\
["source-map", "npm:0.6.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["spawn-please", [\
["npm:1.0.0", {\
"packageLocation": "./.yarn/cache/spawn-please-npm-1.0.0-5731ea7630-b8e1e1dc14.zip/node_modules/spawn-please/",\
"packageDependencies": [\
["spawn-please", "npm:1.0.0"]\
],\
"linkType": "HARD"\
}]\
]],\
["spdx-correct", [\
@@ -13165,6 +13452,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["yaml", "npm:1.10.2"]\
],\
"linkType": "HARD"\
}],\
["npm:2.1.1", {\
"packageLocation": "./.yarn/cache/yaml-npm-2.1.1-e717f9b915-f48bb20991.zip/node_modules/yaml/",\
"packageDependencies": [\
["yaml", "npm:2.1.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["yargs", [\

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.

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.

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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -39,7 +39,8 @@
"start:files-worker": "yarn workspace @standardnotes/files-server worker",
"start:api-gateway": "yarn workspace @standardnotes/api-gateway start",
"release:prod": "lerna version --conventional-graduate --conventional-commits --yes -m \"chore(release): publish new version\"",
"postversion": "./scripts/push-tags-one-by-one.sh"
"postversion": "./scripts/push-tags-one-by-one.sh",
"upgrade:snjs": "yarn workspaces foreach --verbose run upgrade:snjs"
},
"devDependencies": {
"@commitlint/cli": "^17.0.2",
@@ -53,12 +54,15 @@
"@typescript-eslint/parser": "^5.29.0",
"eslint": "^8.17.0",
"eslint-config-prettier": "^8.5.0",
"ini": "^3.0.0",
"npm-check-updates": "^14.1.1",
"prettier": "^2.7.1",
"ts-node": "^10.8.1",
"typescript": "^4.7.4"
},
"packageManager": "yarn@3.2.1",
"dependencies": {
"@sentry/node": "^7.3.0",
"newrelic": "^8.14.1"
}
}

View File

@@ -3,6 +3,32 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.2.2](https://github.com/standardnotes/api-gateway/compare/@standardnotes/api-gateway@1.2.1...@standardnotes/api-gateway@1.2.2) (2022-06-27)
**Note:** Version bump only for package @standardnotes/api-gateway
## [1.2.1](https://github.com/standardnotes/api-gateway/compare/@standardnotes/api-gateway@1.2.0...@standardnotes/api-gateway@1.2.1) (2022-06-27)
### Bug Fixes
* issue with NaN error code responses ([2cb470b](https://github.com/standardnotes/api-gateway/commit/2cb470b99edc2fac8d5c38e4eb16201e55fe8753))
# [1.2.0](https://github.com/standardnotes/api-gateway/compare/@standardnotes/api-gateway@1.1.6...@standardnotes/api-gateway@1.2.0) (2022-06-27)
### Features
* add endpoint to mute marketing emails ([fa2a8da](https://github.com/standardnotes/api-gateway/commit/fa2a8da17bc6588021172adbbc4ecae5bd35f33a))
## [1.1.6](https://github.com/standardnotes/api-gateway/compare/@standardnotes/api-gateway@1.1.5...@standardnotes/api-gateway@1.1.6) (2022-06-27)
**Note:** Version bump only for package @standardnotes/api-gateway
## [1.1.5](https://github.com/standardnotes/api-gateway/compare/@standardnotes/api-gateway@1.1.4...@standardnotes/api-gateway@1.1.5) (2022-06-27)
### Bug Fixes
* upgrade sentry node sdk ([b6db194](https://github.com/standardnotes/api-gateway/commit/b6db194a22ff1d0afe96c291d545b408c0a5c373))
## [1.1.4](https://github.com/standardnotes/api-gateway/compare/@standardnotes/api-gateway@1.1.3...@standardnotes/api-gateway@1.1.4) (2022-06-24)
### Bug Fixes

View File

@@ -1,6 +1,6 @@
{
"name": "@standardnotes/api-gateway",
"version": "1.1.4",
"version": "1.2.2",
"engines": {
"node": ">=16.0.0 <17.0.0"
},
@@ -17,11 +17,12 @@
"lint": "eslint . --ext .ts",
"setup:env": "cp .env.sample .env",
"start": "yarn node dist/bin/server.js",
"report": "yarn node dist/bin/report.js"
"report": "yarn node dist/bin/report.js",
"upgrade:snjs": "yarn ncu -u '@standardnotes/*'"
},
"dependencies": {
"@newrelic/winston-enricher": "^2.1.0",
"@sentry/node": "^6.16.1",
"@sentry/node": "^7.3.0",
"@standardnotes/analytics": "^1.4.0",
"@standardnotes/auth": "3.19.2",
"@standardnotes/domain-events": "2.29.0",
@@ -55,6 +56,7 @@
"eslint-plugin-prettier": "^4.0.0",
"jest": "^28.1.1",
"nodemon": "^2.0.16",
"npm-check-updates": "^14.1.1",
"ts-jest": "^28.0.1"
}
}

View File

@@ -99,7 +99,10 @@ export class AuthMiddleware extends BaseMiddleware {
response.setHeader('content-type', (error as AxiosError).response?.headers['content-type'] as string)
}
const errorCode = (error as AxiosError).isAxiosError ? +((error as AxiosError).code as string) : 500
const errorCode =
(error as AxiosError).isAxiosError && !isNaN(+((error as AxiosError).code as string))
? +((error as AxiosError).code as string)
: 500
response.status(errorCode).send(errorMessage)

View File

@@ -88,7 +88,10 @@ export class SubscriptionTokenAuthMiddleware extends BaseMiddleware {
response.setHeader('content-type', (error as AxiosError).response?.headers['content-type'] as string)
}
const errorCode = (error as AxiosError).isAxiosError ? +((error as AxiosError).code as string) : 500
const errorCode =
(error as AxiosError).isAxiosError && !isNaN(+((error as AxiosError).code as string))
? +((error as AxiosError).code as string)
: 500
response.status(errorCode).send(errorMessage)

View File

@@ -49,4 +49,14 @@ export class ActionsController extends BaseHttpController {
request.body,
)
}
@httpGet('/marketing-emails/mute/:settingUuid')
async muteMarketingEmails(request: Request, response: Response): Promise<void> {
await this.httpService.callAuthServer(
request,
response,
`internal/settings/marketing-emails/${request.params.settingUuid}/mute`,
request.body,
)
}
}

View File

@@ -133,7 +133,10 @@ export class HttpService implements HttpServiceInterface {
response.setHeader('content-type', (error as AxiosError).response?.headers['content-type'] as string)
}
const errorCode = (error as AxiosError).isAxiosError ? +((error as AxiosError).code as string) : 500
const errorCode =
(error as AxiosError).isAxiosError && !isNaN(+((error as AxiosError).code as string))
? +((error as AxiosError).code as string)
: 500
response.status(errorCode).send(errorMessage)
}

View File

@@ -3,6 +3,44 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.3.1](https://github.com/standardnotes/auth/compare/@standardnotes/auth-server@1.3.0...@standardnotes/auth-server@1.3.1) (2022-06-27)
**Note:** Version bump only for package @standardnotes/auth-server
# [1.3.0](https://github.com/standardnotes/auth/compare/@standardnotes/auth-server@1.2.1...@standardnotes/auth-server@1.3.0) (2022-06-27)
### Features
* add endpoint for muting marketing emails ([6d7de4a](https://github.com/standardnotes/auth/commit/6d7de4a8daaf7569b8f2e031854e8baaff64a469))
## [1.2.1](https://github.com/standardnotes/auth/compare/@standardnotes/auth-server@1.2.0...@standardnotes/auth-server@1.2.1) (2022-06-27)
### Bug Fixes
* add setting uuid to email requests ([214684e](https://github.com/standardnotes/auth/commit/214684eae733675b7cefa522202e53d9556e5279))
# [1.2.0](https://github.com/standardnotes/auth/compare/@standardnotes/auth-server@1.1.7...@standardnotes/auth-server@1.2.0) (2022-06-27)
### Features
* add docker commands to start sending emails ([210a314](https://github.com/standardnotes/auth/commit/210a314c8199e47e5b6a113bd60401c16bb95291))
## [1.1.7](https://github.com/standardnotes/auth/compare/@standardnotes/auth-server@1.1.6...@standardnotes/auth-server@1.1.7) (2022-06-27)
### Bug Fixes
* add sending out email campaigns ([bf14ec0](https://github.com/standardnotes/auth/commit/bf14ec05f92d893e7c74a4f29ef7e426bee9d768))
## [1.1.6](https://github.com/standardnotes/auth/compare/@standardnotes/auth-server@1.1.5...@standardnotes/auth-server@1.1.6) (2022-06-27)
**Note:** Version bump only for package @standardnotes/auth-server
## [1.1.5](https://github.com/standardnotes/auth/compare/@standardnotes/auth-server@1.1.4...@standardnotes/auth-server@1.1.5) (2022-06-27)
### Bug Fixes
* upgrade sentry node sdk ([b6db194](https://github.com/standardnotes/auth/commit/b6db194a22ff1d0afe96c291d545b408c0a5c373))
## [1.1.4](https://github.com/standardnotes/auth/compare/@standardnotes/auth-server@1.1.3...@standardnotes/auth-server@1.1.4) (2022-06-24)
### Bug Fixes

147
packages/auth/bin/email.ts Normal file
View File

@@ -0,0 +1,147 @@
import 'reflect-metadata'
import 'newrelic'
import { Stream } from 'stream'
import { Logger } from 'winston'
import * as dayjs from 'dayjs'
import * as utc from 'dayjs/plugin/utc'
import { UserRepositoryInterface } from '../src/Domain/User/UserRepositoryInterface'
import { ContainerConfigLoader } from '../src/Bootstrap/Container'
import TYPES from '../src/Bootstrap/Types'
import { Env } from '../src/Bootstrap/Env'
import { SettingServiceInterface } from '../src/Domain/Setting/SettingServiceInterface'
import { DomainEventFactoryInterface } from '../src/Domain/Event/DomainEventFactoryInterface'
import { UserSubscriptionRepositoryInterface } from '../src/Domain/Subscription/UserSubscriptionRepositoryInterface'
import { DomainEventPublisherInterface } from '@standardnotes/domain-events'
import { MuteMarketingEmailsOption, SettingName } from '@standardnotes/settings'
import { EmailMessageIdentifier } from '@standardnotes/common'
import { User } from '../src/Domain/User/User'
import { EncryptionVersion } from '../src/Domain/Encryption/EncryptionVersion'
import { TimerInterface } from '@standardnotes/time'
const inputArgs = process.argv.slice(2)
const emailMessageIdentifier = inputArgs[0]
const sendEmailCampaign = async (
userRepository: UserRepositoryInterface,
settingService: SettingServiceInterface,
userSubscriptionRepository: UserSubscriptionRepositoryInterface,
timer: TimerInterface,
domainEventFactory: DomainEventFactoryInterface,
domainEventPublisher: DomainEventPublisherInterface,
): Promise<void> => {
const stream = await userRepository.streamAll()
return new Promise((resolve, reject) => {
stream
.pipe(
new Stream.Transform({
objectMode: true,
transform: async (rawUserData, _encoding, callback) => {
let emailsMutedSetting = await settingService.findSettingWithDecryptedValue({
userUuid: rawUserData.user_uuid,
settingName: SettingName.MuteMarketingEmails,
})
if (emailsMutedSetting === null) {
const user = (await userRepository.findOneByUuid(rawUserData.user_uuid)) as User
const { setting } = await settingService.createOrReplace({
user,
props: {
name: SettingName.MuteMarketingEmails,
unencryptedValue: MuteMarketingEmailsOption.NotMuted,
serverEncryptionVersion: EncryptionVersion.Default,
sensitive: false,
},
})
emailsMutedSetting = setting
}
if (emailsMutedSetting.value === MuteMarketingEmailsOption.Muted) {
callback()
return
}
let activeSubscription = false
let subscriptionPlanName = null
const userSubscription = await userSubscriptionRepository.findOneByUserUuid(rawUserData.user_uuid)
if (userSubscription !== null) {
activeSubscription =
!userSubscription.cancelled && userSubscription.endsAt > timer.getTimestampInMicroseconds()
subscriptionPlanName = userSubscription.planName
}
await domainEventPublisher.publish(
domainEventFactory.createEmailMessageRequestedEvent({
userEmail: rawUserData.user_email,
messageIdentifier: emailMessageIdentifier as EmailMessageIdentifier,
context: {
activeSubscription,
subscriptionPlanName,
muteEmailsSettingUuid: emailsMutedSetting.uuid,
},
}),
)
callback()
},
}),
)
.on('finish', resolve)
.on('error', reject)
})
}
const container = new ContainerConfigLoader()
void container.load().then((container) => {
dayjs.extend(utc)
const env: Env = new Env()
env.load()
const logger: Logger = container.get(TYPES.Logger)
logger.info(`Starting email campaign for email ${emailMessageIdentifier} ...`)
if (!emailMessageIdentifier) {
logger.error('No email message identifier passed as argument. Skipped sending.')
process.exit(1)
}
const userRepository: UserRepositoryInterface = container.get(TYPES.UserRepository)
const settingService: SettingServiceInterface = container.get(TYPES.SettingService)
const userSubscriptionRepository: UserSubscriptionRepositoryInterface = container.get(
TYPES.UserSubscriptionRepository,
)
const timer: TimerInterface = container.get(TYPES.Timer)
const domainEventFactory: DomainEventFactoryInterface = container.get(TYPES.DomainEventFactory)
const domainEventPublisher: DomainEventPublisherInterface = container.get(TYPES.DomainEventPublisher)
Promise.resolve(
sendEmailCampaign(
userRepository,
settingService,
userSubscriptionRepository,
timer,
domainEventFactory,
domainEventPublisher,
),
)
.then(() => {
logger.info(`${emailMessageIdentifier} email campaign complete.`)
process.exit(0)
})
.catch((error) => {
logger.error(`Could not finish ${emailMessageIdentifier} email campaign: ${error.message}`)
process.exit(1)
})
})

View File

@@ -44,6 +44,12 @@ case "$COMMAND" in
yarn workspace @standardnotes/auth-server daily-backup:one_drive
;;
'email-campaign' )
echo "Starting Email Campaign Sending..."
MESSAGE_IDENTIFIER=$1 && shift 1
yarn workspace @standardnotes/auth-server email-campaign $MESSAGE_IDENTIFIER
;;
* )
echo "Unknown command"
;;

View File

@@ -1,6 +1,6 @@
{
"name": "@standardnotes/auth-server",
"version": "1.1.4",
"version": "1.3.1",
"engines": {
"node": ">=16.0.0 <17.0.0"
},
@@ -25,21 +25,23 @@
"daily-backup:google_drive": "yarn node dist/bin/backup.js google_drive daily",
"daily-backup:one_drive": "yarn node dist/bin/backup.js one_drive daily",
"weekly-backup:email": "yarn node dist/bin/backup.js email weekly",
"typeorm": "typeorm-ts-node-commonjs"
"email-campaign": "yarn node dist/bin/email.js",
"typeorm": "typeorm-ts-node-commonjs",
"upgrade:snjs": "yarn ncu -u '@standardnotes/*'"
},
"dependencies": {
"@newrelic/winston-enricher": "^2.1.0",
"@sentry/node": "^6.16.1",
"@sentry/node": "^7.3.0",
"@standardnotes/analytics": "^1.6.0",
"@standardnotes/api": "^1.1.13",
"@standardnotes/auth": "^3.19.2",
"@standardnotes/common": "^1.23.0",
"@standardnotes/domain-events": "^2.31.1",
"@standardnotes/common": "^1.23.1",
"@standardnotes/domain-events": "^2.32.4",
"@standardnotes/domain-events-infra": "^1.4.135",
"@standardnotes/features": "^1.45.2",
"@standardnotes/responses": "^1.6.15",
"@standardnotes/scheduler": "^1.1.1",
"@standardnotes/settings": "^1.14.2",
"@standardnotes/settings": "^1.15.0",
"@standardnotes/sncrypto-common": "^1.8.1",
"@standardnotes/sncrypto-node": "^1.8.1",
"@standardnotes/time": "^1.6.8",
@@ -80,6 +82,7 @@
"eslint-plugin-prettier": "^4.0.0",
"jest": "^28.1.1",
"nodemon": "^2.0.16",
"npm-check-updates": "^14.1.1",
"ts-jest": "^28.0.1"
}
}

View File

@@ -190,6 +190,7 @@ import { GetUserAnalyticsId } from '../Domain/UseCase/GetUserAnalyticsId/GetUser
import { AuthController } from '../Controller/AuthController'
import { VerifyPredicate } from '../Domain/UseCase/VerifyPredicate/VerifyPredicate'
import { PredicateVerificationRequestedEventHandler } from '../Domain/Handler/PredicateVerificationRequestedEventHandler'
import { MuteMarketingEmails } from '../Domain/UseCase/MuteMarketingEmails/MuteMarketingEmails'
// eslint-disable-next-line @typescript-eslint/no-var-requires
const newrelicWinstonEnricher = require('@newrelic/winston-enricher')
@@ -409,6 +410,7 @@ export class ContainerConfigLoader {
.to(CreateOfflineSubscriptionToken)
container.bind<MuteFailedBackupsEmails>(TYPES.MuteFailedBackupsEmails).to(MuteFailedBackupsEmails)
container.bind<MuteSignInEmails>(TYPES.MuteSignInEmails).to(MuteSignInEmails)
container.bind<MuteMarketingEmails>(TYPES.MuteMarketingEmails).to(MuteMarketingEmails)
container.bind<CreateValetToken>(TYPES.CreateValetToken).to(CreateValetToken)
container.bind<CreateListedAccount>(TYPES.CreateListedAccount).to(CreateListedAccount)
container.bind<InviteToSharedSubscription>(TYPES.InviteToSharedSubscription).to(InviteToSharedSubscription)

View File

@@ -113,6 +113,7 @@ const TYPES = {
AuthenticateOfflineSubscriptionToken: Symbol.for('AuthenticateOfflineSubscriptionToken'),
MuteFailedBackupsEmails: Symbol.for('MuteFailedBackupsEmails'),
MuteSignInEmails: Symbol.for('MuteSignInEmails'),
MuteMarketingEmails: Symbol.for('MuteMarketingEmails'),
CreateValetToken: Symbol.for('CreateValetToken'),
CreateListedAccount: Symbol.for('CreateListedAccount'),
InviteToSharedSubscription: Symbol.for('InviteToSharedSubscription'),

View File

@@ -9,18 +9,20 @@ import { GetUserFeatures } from '../Domain/UseCase/GetUserFeatures/GetUserFeatur
import { GetSetting } from '../Domain/UseCase/GetSetting/GetSetting'
import { MuteFailedBackupsEmails } from '../Domain/UseCase/MuteFailedBackupsEmails/MuteFailedBackupsEmails'
import { MuteSignInEmails } from '../Domain/UseCase/MuteSignInEmails/MuteSignInEmails'
import { MuteMarketingEmails } from '../Domain/UseCase/MuteMarketingEmails/MuteMarketingEmails'
describe('InternalController', () => {
let getUserFeatures: GetUserFeatures
let getSetting: GetSetting
let muteFailedBackupsEmails: MuteFailedBackupsEmails
let muteSignInEmails: MuteSignInEmails
let muteMarketingEmails: MuteMarketingEmails
let request: express.Request
let user: User
const createController = () =>
new InternalController(getUserFeatures, getSetting, muteFailedBackupsEmails, muteSignInEmails)
new InternalController(getUserFeatures, getSetting, muteFailedBackupsEmails, muteSignInEmails, muteMarketingEmails)
beforeEach(() => {
user = {} as jest.Mocked<User>
@@ -38,6 +40,9 @@ describe('InternalController', () => {
muteSignInEmails = {} as jest.Mocked<MuteSignInEmails>
muteSignInEmails.execute = jest.fn()
muteMarketingEmails = {} as jest.Mocked<MuteMarketingEmails>
muteMarketingEmails.execute = jest.fn()
request = {
headers: {},
body: {},
@@ -161,4 +166,30 @@ describe('InternalController', () => {
expect(result.statusCode).toEqual(404)
})
it('should mute marketing emails user setting', async () => {
request.params.settingUuid = '1-2-3'
muteMarketingEmails.execute = jest.fn().mockReturnValue({ success: true })
const httpResponse = <results.JsonResult>await createController().muteMarketingEmails(request)
const result = await httpResponse.executeAsync()
expect(muteMarketingEmails.execute).toHaveBeenCalledWith({ settingUuid: '1-2-3' })
expect(result.statusCode).toEqual(200)
})
it('should not mute marketing emails user setting if it does not exist', async () => {
request.params.settingUuid = '1-2-3'
muteMarketingEmails.execute = jest.fn().mockReturnValue({ success: false })
const httpResponse = <results.JsonResult>await createController().muteMarketingEmails(request)
const result = await httpResponse.executeAsync()
expect(muteMarketingEmails.execute).toHaveBeenCalledWith({ settingUuid: '1-2-3' })
expect(result.statusCode).toEqual(404)
})
})

View File

@@ -11,6 +11,7 @@ import TYPES from '../Bootstrap/Types'
import { GetSetting } from '../Domain/UseCase/GetSetting/GetSetting'
import { GetUserFeatures } from '../Domain/UseCase/GetUserFeatures/GetUserFeatures'
import { MuteFailedBackupsEmails } from '../Domain/UseCase/MuteFailedBackupsEmails/MuteFailedBackupsEmails'
import { MuteMarketingEmails } from '../Domain/UseCase/MuteMarketingEmails/MuteMarketingEmails'
import { MuteSignInEmails } from '../Domain/UseCase/MuteSignInEmails/MuteSignInEmails'
@controller('/internal')
@@ -20,6 +21,7 @@ export class InternalController extends BaseHttpController {
@inject(TYPES.GetSetting) private doGetSetting: GetSetting,
@inject(TYPES.MuteFailedBackupsEmails) private doMuteFailedBackupsEmails: MuteFailedBackupsEmails,
@inject(TYPES.MuteSignInEmails) private doMuteSignInEmails: MuteSignInEmails,
@inject(TYPES.MuteMarketingEmails) private doMuteMarketingEmails: MuteMarketingEmails,
) {
super()
}
@@ -80,4 +82,18 @@ export class InternalController extends BaseHttpController {
return this.json({ message: result.message }, 404)
}
@httpGet('/settings/marketing-emails/:settingUuid/mute')
async muteMarketingEmails(request: Request): Promise<results.JsonResult> {
const { settingUuid } = request.params
const result = await this.doMuteMarketingEmails.execute({
settingUuid,
})
if (result.success) {
return this.json({ message: result.message })
}
return this.json({ message: result.message }, 404)
}
}

View File

@@ -1,6 +1,6 @@
import 'reflect-metadata'
import { RoleName } from '@standardnotes/common'
import { EmailMessageIdentifier, RoleName } from '@standardnotes/common'
import { PredicateName, PredicateAuthority, PredicateVerificationResult } from '@standardnotes/scheduler'
import { TimerInterface } from '@standardnotes/time'
@@ -18,6 +18,35 @@ describe('DomainEventFactory', () => {
timer.getUTCDate = jest.fn().mockReturnValue(new Date(1))
})
it('should create a EMAIL_MESSAGE_REQUESTED event', () => {
expect(
createFactory().createEmailMessageRequestedEvent({
userEmail: 'test@test.te',
messageIdentifier: EmailMessageIdentifier.ENCOURAGE_EMAIL_BACKUPS,
context: {
foo: 'bar',
},
}),
).toEqual({
createdAt: expect.any(Date),
meta: {
correlation: {
userIdentifier: 'test@test.te',
userIdentifierType: 'email',
},
origin: 'auth',
},
payload: {
messageIdentifier: 'ENCOURAGE_EMAIL_BACKUPS',
userEmail: 'test@test.te',
context: {
foo: 'bar',
},
},
type: 'EMAIL_MESSAGE_REQUESTED',
})
})
it('should create a PREDICATE_VERIFIED event', () => {
expect(
createFactory().createPredicateVerifiedEvent({

View File

@@ -1,4 +1,4 @@
import { RoleName, Uuid } from '@standardnotes/common'
import { EmailMessageIdentifier, RoleName, Uuid } from '@standardnotes/common'
import {
AccountDeletionRequestedEvent,
UserEmailChangedEvent,
@@ -14,6 +14,7 @@ import {
SharedSubscriptionInvitationCanceledEvent,
PredicateVerifiedEvent,
DomainEventService,
EmailMessageRequestedEvent,
} from '@standardnotes/domain-events'
import { Predicate, PredicateVerificationResult } from '@standardnotes/scheduler'
import { TimerInterface } from '@standardnotes/time'
@@ -26,6 +27,25 @@ import { DomainEventFactoryInterface } from './DomainEventFactoryInterface'
export class DomainEventFactory implements DomainEventFactoryInterface {
constructor(@inject(TYPES.Timer) private timer: TimerInterface) {}
createEmailMessageRequestedEvent(dto: {
userEmail: string
messageIdentifier: EmailMessageIdentifier
context: Record<string, unknown>
}): EmailMessageRequestedEvent {
return {
type: 'EMAIL_MESSAGE_REQUESTED',
createdAt: this.timer.getUTCDate(),
meta: {
correlation: {
userIdentifier: dto.userEmail,
userIdentifierType: 'email',
},
origin: DomainEventService.Auth,
},
payload: dto,
}
}
createPredicateVerifiedEvent(dto: {
userUuid: Uuid
predicate: Predicate

View File

@@ -1,4 +1,4 @@
import { Uuid, RoleName } from '@standardnotes/common'
import { Uuid, RoleName, EmailMessageIdentifier } from '@standardnotes/common'
import { Predicate, PredicateVerificationResult } from '@standardnotes/scheduler'
import {
AccountDeletionRequestedEvent,
@@ -14,10 +14,16 @@ import {
SharedSubscriptionInvitationCreatedEvent,
SharedSubscriptionInvitationCanceledEvent,
PredicateVerifiedEvent,
EmailMessageRequestedEvent,
} from '@standardnotes/domain-events'
import { InviteeIdentifierType } from '../SharedSubscription/InviteeIdentifierType'
export interface DomainEventFactoryInterface {
createEmailMessageRequestedEvent(dto: {
userEmail: string
messageIdentifier: EmailMessageIdentifier
context: Record<string, unknown>
}): EmailMessageRequestedEvent
createUserSignedInEvent(dto: {
userUuid: string
userEmail: string

View File

@@ -39,13 +39,13 @@ describe('SettingsAssociationService', () => {
it('should return the default set of settings for a newly registered user', () => {
const settings = createService().getDefaultSettingsAndValuesForNewUser()
const flatSettings = [...(settings as Map<SettingName, SettingDescription>).keys()]
expect(flatSettings).toEqual(['MUTE_SIGN_IN_EMAILS', 'LOG_SESSION_USER_AGENT'])
expect(flatSettings).toEqual(['MUTE_SIGN_IN_EMAILS', 'MUTE_MARKETING_EMAILS', 'LOG_SESSION_USER_AGENT'])
})
it('should return the default set of settings for a newly registered vault account', () => {
const settings = createService().getDefaultSettingsAndValuesForNewVaultAccount()
const flatSettings = [...(settings as Map<SettingName, SettingDescription>).keys()]
expect(flatSettings).toEqual(['MUTE_SIGN_IN_EMAILS', 'LOG_SESSION_USER_AGENT'])
expect(flatSettings).toEqual(['MUTE_SIGN_IN_EMAILS', 'MUTE_MARKETING_EMAILS', 'LOG_SESSION_USER_AGENT'])
expect(settings.get(SettingName.LogSessionUserAgent)?.value).toEqual('disabled')
})

View File

@@ -1,5 +1,10 @@
import { PermissionName } from '@standardnotes/features'
import { LogSessionUserAgentOption, MuteSignInEmailsOption, SettingName } from '@standardnotes/settings'
import {
LogSessionUserAgentOption,
MuteMarketingEmailsOption,
MuteSignInEmailsOption,
SettingName,
} from '@standardnotes/settings'
import { injectable } from 'inversify'
import { EncryptionVersion } from '../Encryption/EncryptionVersion'
@@ -14,6 +19,7 @@ export class SettingsAssociationService implements SettingsAssociationServiceInt
SettingName.MuteFailedBackupsEmails,
SettingName.MuteFailedCloudBackupsEmails,
SettingName.MuteSignInEmails,
SettingName.MuteMarketingEmails,
SettingName.DropboxBackupFrequency,
SettingName.GoogleDriveBackupFrequency,
SettingName.OneDriveBackupFrequency,
@@ -28,6 +34,7 @@ export class SettingsAssociationService implements SettingsAssociationServiceInt
SettingName.MuteFailedBackupsEmails,
SettingName.MuteFailedCloudBackupsEmails,
SettingName.MuteSignInEmails,
SettingName.MuteMarketingEmails,
SettingName.ListedAuthorSecrets,
SettingName.LogSessionUserAgent,
]
@@ -47,6 +54,14 @@ export class SettingsAssociationService implements SettingsAssociationServiceInt
value: MuteSignInEmailsOption.NotMuted,
},
],
[
SettingName.MuteMarketingEmails,
{
sensitive: false,
serverEncryptionVersion: EncryptionVersion.Unencrypted,
value: MuteMarketingEmailsOption.NotMuted,
},
],
[
SettingName.LogSessionUserAgent,
{

View File

@@ -0,0 +1,39 @@
import 'reflect-metadata'
import { Setting } from '../../Setting/Setting'
import { SettingRepositoryInterface } from '../../Setting/SettingRepositoryInterface'
import { MuteMarketingEmails } from './MuteMarketingEmails'
describe('MuteMarketingEmails', () => {
let settingRepository: SettingRepositoryInterface
const createUseCase = () => new MuteMarketingEmails(settingRepository)
beforeEach(() => {
const setting = {} as jest.Mocked<Setting>
settingRepository = {} as jest.Mocked<SettingRepositoryInterface>
settingRepository.findOneByUuidAndNames = jest.fn().mockReturnValue(setting)
settingRepository.save = jest.fn()
})
it('should not succeed if extension setting is not found', async () => {
settingRepository.findOneByUuidAndNames = jest.fn().mockReturnValue(null)
expect(await createUseCase().execute({ settingUuid: '1-2-3' })).toEqual({
success: false,
message: 'Could not find setting setting.',
})
})
it('should update mute email setting on extension setting', async () => {
expect(await createUseCase().execute({ settingUuid: '1-2-3' })).toEqual({
success: true,
message: 'These emails have been muted.',
})
expect(settingRepository.save).toHaveBeenCalledWith({
value: 'muted',
})
})
})

View File

@@ -0,0 +1,34 @@
import { MuteMarketingEmailsOption, SettingName } from '@standardnotes/settings'
import { inject, injectable } from 'inversify'
import TYPES from '../../../Bootstrap/Types'
import { SettingRepositoryInterface } from '../../Setting/SettingRepositoryInterface'
import { UseCaseInterface } from '../UseCaseInterface'
import { MuteMarketingEmailsDTO } from './MuteMarketingEmailsDTO'
import { MuteMarketingEmailsResponse } from './MuteMarketingEmailsResponse'
@injectable()
export class MuteMarketingEmails implements UseCaseInterface {
constructor(@inject(TYPES.SettingRepository) private settingRepository: SettingRepositoryInterface) {}
async execute(dto: MuteMarketingEmailsDTO): Promise<MuteMarketingEmailsResponse> {
const setting = await this.settingRepository.findOneByUuidAndNames(dto.settingUuid, [
SettingName.MuteMarketingEmails,
])
if (setting === null) {
return {
success: false,
message: 'Could not find setting setting.',
}
}
setting.value = MuteMarketingEmailsOption.Muted
await this.settingRepository.save(setting)
return {
success: true,
message: 'These emails have been muted.',
}
}
}

View File

@@ -0,0 +1,3 @@
export type MuteMarketingEmailsDTO = {
settingUuid: string
}

View File

@@ -0,0 +1,4 @@
export type MuteMarketingEmailsResponse = {
success: boolean
message: string
}

View File

@@ -3,6 +3,20 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.1.7](https://github.com/standardnotes/files/compare/@standardnotes/files-server@1.1.6...@standardnotes/files-server@1.1.7) (2022-06-27)
**Note:** Version bump only for package @standardnotes/files-server
## [1.1.6](https://github.com/standardnotes/files/compare/@standardnotes/files-server@1.1.5...@standardnotes/files-server@1.1.6) (2022-06-27)
**Note:** Version bump only for package @standardnotes/files-server
## [1.1.5](https://github.com/standardnotes/files/compare/@standardnotes/files-server@1.1.4...@standardnotes/files-server@1.1.5) (2022-06-27)
### Bug Fixes
* upgrade sentry node sdk ([b6db194](https://github.com/standardnotes/files/commit/b6db194a22ff1d0afe96c291d545b408c0a5c373))
## [1.1.4](https://github.com/standardnotes/files/compare/@standardnotes/files-server@1.1.3...@standardnotes/files-server@1.1.4) (2022-06-24)
### Bug Fixes

View File

@@ -1,6 +1,6 @@
{
"name": "@standardnotes/files-server",
"version": "1.1.4",
"version": "1.1.7",
"engines": {
"node": ">=16.0.0 <17.0.0"
},
@@ -21,10 +21,11 @@
"pretest": "yarn lint && yarn build",
"test": "jest --coverage --config=./jest.config.js --maxWorkers=50%",
"start": "yarn node dist/bin/server.js",
"worker": "yarn node dist/bin/worker.js"
"worker": "yarn node dist/bin/worker.js",
"upgrade:snjs": "yarn ncu -u '@standardnotes/*'"
},
"dependencies": {
"@sentry/node": "^6.16.1",
"@sentry/node": "^7.3.0",
"@standardnotes/auth": "^3.18.9",
"@standardnotes/common": "^1.19.4",
"@standardnotes/domain-events": "^2.27.6",
@@ -67,6 +68,7 @@
"eslint-plugin-prettier": "^4.0.0",
"jest": "^28.1.1",
"nodemon": "^2.0.16",
"npm-check-updates": "^14.1.1",
"ts-jest": "^28.0.1",
"uuid": "^8.3.2"
}

View File

@@ -3,6 +3,28 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.2.2](https://github.com/standardnotes/server/compare/@standardnotes/scheduler-server@1.2.1...@standardnotes/scheduler-server@1.2.2) (2022-06-27)
**Note:** Version bump only for package @standardnotes/scheduler-server
## [1.2.1](https://github.com/standardnotes/server/compare/@standardnotes/scheduler-server@1.2.0...@standardnotes/scheduler-server@1.2.1) (2022-06-27)
### Bug Fixes
* change subscription encouragement scheduled from 14 to 30 days ([e12c9c4](https://github.com/standardnotes/server/commit/e12c9c47a73efa5e5af15144e653195455f90591))
# [1.2.0](https://github.com/standardnotes/server/compare/@standardnotes/scheduler-server@1.1.5...@standardnotes/scheduler-server@1.2.0) (2022-06-27)
### Features
* add context for requesting email message ([8d4280f](https://github.com/standardnotes/server/commit/8d4280f4ca57151198880620cc9504aba720f2f3))
## [1.1.5](https://github.com/standardnotes/server/compare/@standardnotes/scheduler-server@1.1.4...@standardnotes/scheduler-server@1.1.5) (2022-06-27)
### Bug Fixes
* upgrade sentry node sdk ([b6db194](https://github.com/standardnotes/server/commit/b6db194a22ff1d0afe96c291d545b408c0a5c373))
## [1.1.4](https://github.com/standardnotes/server/compare/@standardnotes/scheduler-server@1.1.3...@standardnotes/scheduler-server@1.1.4) (2022-06-24)
### Bug Fixes

View File

@@ -1,6 +1,6 @@
{
"name": "@standardnotes/scheduler-server",
"version": "1.1.4",
"version": "1.2.2",
"engines": {
"node": ">=16.0.0 <17.0.0"
},
@@ -19,12 +19,14 @@
"worker": "yarn node dist/bin/worker.js",
"verify:jobs": "yarn node dist/bin/verify.js",
"setup:env": "cp .env.sample .env",
"typeorm": "typeorm-ts-node-commonjs"
"typeorm": "typeorm-ts-node-commonjs",
"upgrade:snjs": "yarn ncu -u '@standardnotes/*'"
},
"dependencies": {
"@newrelic/winston-enricher": "^2.1.0",
"@sentry/node": "^7.3.0",
"@standardnotes/common": "^1.23.0",
"@standardnotes/domain-events": "^2.32.0",
"@standardnotes/domain-events": "^2.32.3",
"@standardnotes/domain-events-infra": "^1.5.0",
"@standardnotes/scheduler": "^1.1.0",
"@standardnotes/time": "^1.7.0",
@@ -47,6 +49,7 @@
"@typescript-eslint/eslint-plugin": "^5.29.0",
"eslint-plugin-prettier": "^4.0.0",
"jest": "^28.1.1",
"npm-check-updates": "^14.1.1",
"ts-jest": "^28.0.5"
}
}

View File

@@ -21,7 +21,13 @@ describe('DomainEventFactory', () => {
it('should create a EMAIL_MESSAGE_REQUESTED event', () => {
expect(
createFactory().createEmailMessageRequestedEvent('test@test.te', EmailMessageIdentifier.ENCOURAGE_EMAIL_BACKUPS),
createFactory().createEmailMessageRequestedEvent({
userEmail: 'test@test.te',
messageIdentifier: EmailMessageIdentifier.ENCOURAGE_EMAIL_BACKUPS,
context: {
foo: 'bar',
},
}),
).toEqual({
createdAt: expect.any(Date),
meta: {
@@ -34,6 +40,9 @@ describe('DomainEventFactory', () => {
payload: {
messageIdentifier: 'ENCOURAGE_EMAIL_BACKUPS',
userEmail: 'test@test.te',
context: {
foo: 'bar',
},
},
type: 'EMAIL_MESSAGE_REQUESTED',
})

View File

@@ -16,24 +16,22 @@ import { DomainEventFactoryInterface } from './DomainEventFactoryInterface'
export class DomainEventFactory implements DomainEventFactoryInterface {
constructor(@inject(TYPES.Timer) private timer: TimerInterface) {}
createEmailMessageRequestedEvent(
userEmail: string,
messageIdentifier: EmailMessageIdentifier,
): EmailMessageRequestedEvent {
createEmailMessageRequestedEvent(dto: {
userEmail: string
messageIdentifier: EmailMessageIdentifier
context: Record<string, unknown>
}): EmailMessageRequestedEvent {
return {
type: 'EMAIL_MESSAGE_REQUESTED',
createdAt: this.timer.getUTCDate(),
meta: {
correlation: {
userIdentifier: userEmail,
userIdentifier: dto.userEmail,
userIdentifierType: 'email',
},
origin: DomainEventService.Scheduler,
},
payload: {
messageIdentifier,
userEmail,
},
payload: dto,
}
}

View File

@@ -6,8 +6,9 @@ import { Predicate } from '../Predicate/Predicate'
export interface DomainEventFactoryInterface {
createPredicateVerificationRequestedEvent(job: Job, predicate: Predicate): PredicateVerificationRequestedEvent
createEmailMessageRequestedEvent(
userEmail: string,
messageIdentifier: EmailMessageIdentifier,
): EmailMessageRequestedEvent
createEmailMessageRequestedEvent(dto: {
userEmail: string
messageIdentifier: EmailMessageIdentifier
context: Record<string, unknown>
}): EmailMessageRequestedEvent
}

View File

@@ -49,7 +49,7 @@ export class UserRegisteredEventHandler implements DomainEventHandlerInterface {
private async scheduleEncourageSubscriptionPurchasing(event: UserRegisteredEvent): Promise<void> {
const job = new Job()
job.name = JobName.ENCOURAGE_SUBSCRIPTION_PURCHASING
job.scheduledAt = this.timer.convertDateToMicroseconds(this.timer.getUTCDateNDaysAhead(14))
job.scheduledAt = this.timer.convertDateToMicroseconds(this.timer.getUTCDateNDaysAhead(30))
job.createdAt = this.timer.getTimestampInMicroseconds()
job.status = JobStatus.Pending
job.userIdentifier = event.payload.email

View File

@@ -67,10 +67,11 @@ describe('JobDoneInterpreter', () => {
await createInterpreter().interpret('1-2-3')
expect(domainEventFactory.createEmailMessageRequestedEvent).toHaveBeenCalledWith(
'test@test.te',
'ENCOURAGE_EMAIL_BACKUPS',
)
expect(domainEventFactory.createEmailMessageRequestedEvent).toHaveBeenCalledWith({
context: {},
messageIdentifier: 'ENCOURAGE_EMAIL_BACKUPS',
userEmail: 'test@test.te',
})
expect(domainEventPublisher.publish).toHaveBeenCalled()
})
@@ -110,6 +111,7 @@ describe('JobDoneInterpreter', () => {
name: JobName.ENCOURAGE_SUBSCRIPTION_PURCHASING,
userIdentifier: 'test@test.te',
userIdentifierType: 'email',
createdAt: 123,
} as jest.Mocked<Job>)
predicateRepository.findByJobUuid = jest
.fn()
@@ -119,10 +121,11 @@ describe('JobDoneInterpreter', () => {
await createInterpreter().interpret('1-2-3')
expect(domainEventFactory.createEmailMessageRequestedEvent).toHaveBeenCalledWith(
'test@test.te',
'ENCOURAGE_SUBSCRIPTION_PURCHASING',
)
expect(domainEventFactory.createEmailMessageRequestedEvent).toHaveBeenCalledWith({
context: { userRegisteredAt: 123 },
messageIdentifier: 'ENCOURAGE_SUBSCRIPTION_PURCHASING',
userEmail: 'test@test.te',
})
expect(domainEventPublisher.publish).toHaveBeenCalled()
})
@@ -148,7 +151,11 @@ describe('JobDoneInterpreter', () => {
await createInterpreter().interpret('1-2-3')
expect(domainEventFactory.createEmailMessageRequestedEvent).toHaveBeenCalledWith('test@test.te', 'EXIT_INTERVIEW')
expect(domainEventFactory.createEmailMessageRequestedEvent).toHaveBeenCalledWith({
context: {},
messageIdentifier: 'EXIT_INTERVIEW',
userEmail: 'test@test.te',
})
expect(domainEventPublisher.publish).toHaveBeenCalled()
})

View File

@@ -41,7 +41,7 @@ export class JobDoneInterpreter implements JobDoneInterpreterInterface {
return
case JobName.ENCOURAGE_SUBSCRIPTION_PURCHASING:
if (job.userIdentifierType === 'email') {
await this.requestSubscriptionPurchaseEncouragementEmail(job.userIdentifier)
await this.requestSubscriptionPurchaseEncouragementEmail(job)
}
return
case JobName.EXIT_INTERVIEW:
@@ -56,25 +56,33 @@ export class JobDoneInterpreter implements JobDoneInterpreterInterface {
private async requestEmailBackupEncouragementEmail(userEmail: string): Promise<void> {
await this.domainEventPublisher.publish(
this.domainEventFactory.createEmailMessageRequestedEvent(
this.domainEventFactory.createEmailMessageRequestedEvent({
userEmail,
EmailMessageIdentifier.ENCOURAGE_EMAIL_BACKUPS,
),
messageIdentifier: EmailMessageIdentifier.ENCOURAGE_EMAIL_BACKUPS,
context: {},
}),
)
}
private async requestSubscriptionPurchaseEncouragementEmail(userEmail: string): Promise<void> {
private async requestSubscriptionPurchaseEncouragementEmail(job: Job): Promise<void> {
await this.domainEventPublisher.publish(
this.domainEventFactory.createEmailMessageRequestedEvent(
userEmail,
EmailMessageIdentifier.ENCOURAGE_SUBSCRIPTION_PURCHASING,
),
this.domainEventFactory.createEmailMessageRequestedEvent({
userEmail: job.userIdentifier,
messageIdentifier: EmailMessageIdentifier.ENCOURAGE_SUBSCRIPTION_PURCHASING,
context: {
userRegisteredAt: job.createdAt,
},
}),
)
}
private async requestExitInterviewEmail(userEmail: string): Promise<void> {
await this.domainEventPublisher.publish(
this.domainEventFactory.createEmailMessageRequestedEvent(userEmail, EmailMessageIdentifier.EXIT_INTERVIEW),
this.domainEventFactory.createEmailMessageRequestedEvent({
userEmail,
messageIdentifier: EmailMessageIdentifier.EXIT_INTERVIEW,
context: {},
}),
)
}

View File

@@ -3,6 +3,20 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.1.7](https://github.com/standardnotes/syncing-server-js/compare/@standardnotes/syncing-server@1.1.6...@standardnotes/syncing-server@1.1.7) (2022-06-27)
**Note:** Version bump only for package @standardnotes/syncing-server
## [1.1.6](https://github.com/standardnotes/syncing-server-js/compare/@standardnotes/syncing-server@1.1.5...@standardnotes/syncing-server@1.1.6) (2022-06-27)
**Note:** Version bump only for package @standardnotes/syncing-server
## [1.1.5](https://github.com/standardnotes/syncing-server-js/compare/@standardnotes/syncing-server@1.1.4...@standardnotes/syncing-server@1.1.5) (2022-06-27)
### Bug Fixes
* upgrade sentry node sdk ([b6db194](https://github.com/standardnotes/syncing-server-js/commit/b6db194a22ff1d0afe96c291d545b408c0a5c373))
## [1.1.4](https://github.com/standardnotes/syncing-server-js/compare/@standardnotes/syncing-server@1.1.3...@standardnotes/syncing-server@1.1.4) (2022-06-24)
### Bug Fixes

View File

@@ -1,6 +1,6 @@
{
"name": "@standardnotes/syncing-server",
"version": "1.1.4",
"version": "1.1.7",
"engines": {
"node": ">=16.0.0 <17.0.0"
},
@@ -19,11 +19,12 @@
"pretest": "yarn lint && yarn build",
"test": "jest --coverage --config=./jest.config.js --maxWorkers=50%",
"start": "yarn node dist/bin/server.js",
"worker": "yarn node dist/bin/worker.js"
"worker": "yarn node dist/bin/worker.js",
"upgrade:snjs": "yarn ncu -u '@standardnotes/*'"
},
"dependencies": {
"@newrelic/winston-enricher": "^2.1.0",
"@sentry/node": "^6.16.1",
"@sentry/node": "^7.3.0",
"@standardnotes/analytics": "^1.6.0",
"@standardnotes/auth": "^3.19.2",
"@standardnotes/common": "^1.22.0",
@@ -69,6 +70,7 @@
"eslint": "^8.14.0",
"eslint-plugin-prettier": "^4.0.0",
"jest": "^28.1.1",
"npm-check-updates": "^14.1.1",
"ts-jest": "^28.0.1"
}
}

402
yarn.lock
View File

@@ -1654,71 +1654,59 @@ __metadata:
languageName: node
linkType: hard
"@sentry/core@npm:6.19.7":
version: 6.19.7
resolution: "@sentry/core@npm:6.19.7"
"@sentry/core@npm:7.3.0":
version: 7.3.0
resolution: "@sentry/core@npm:7.3.0"
dependencies:
"@sentry/hub": 6.19.7
"@sentry/minimal": 6.19.7
"@sentry/types": 6.19.7
"@sentry/utils": 6.19.7
"@sentry/hub": 7.3.0
"@sentry/types": 7.3.0
"@sentry/utils": 7.3.0
tslib: ^1.9.3
checksum: d212e8ef07114549de4a93b81f8bfa217ca1550ca7a5eeaa611e5629faef78ff72663ce561ffa2cff48f3dc556745ef65177044f9965cdd3cbccf617cf3bf675
checksum: 176856840462c881c9a2ea30c5af209b64516201e5d7978e3960473fead6fc10547c556185e3636a2eade6856b293d190212825f9e8ff6fe4331fcdb0f6c213a
languageName: node
linkType: hard
"@sentry/hub@npm:6.19.7":
version: 6.19.7
resolution: "@sentry/hub@npm:6.19.7"
"@sentry/hub@npm:7.3.0":
version: 7.3.0
resolution: "@sentry/hub@npm:7.3.0"
dependencies:
"@sentry/types": 6.19.7
"@sentry/utils": 6.19.7
"@sentry/types": 7.3.0
"@sentry/utils": 7.3.0
tslib: ^1.9.3
checksum: 10bb1c5cba1b0f1e27a3dd0a186c22f94aeaf11c4662890ab07b2774f46f46af78d61e3ba71d76edc750a7b45af86edd032f35efecdb4efa2eaf551080ccdcb1
checksum: a052a7c940e1f6af16ca2c61f1e184eaf0d7874598ec4eae3a28c8b5ea6a19cf3b89106768aaeea19deb9816bdd316ec0218764c2e66cc92a87e2e404d6e0dd6
languageName: node
linkType: hard
"@sentry/minimal@npm:6.19.7":
version: 6.19.7
resolution: "@sentry/minimal@npm:6.19.7"
"@sentry/node@npm:^7.3.0":
version: 7.3.0
resolution: "@sentry/node@npm:7.3.0"
dependencies:
"@sentry/hub": 6.19.7
"@sentry/types": 6.19.7
tslib: ^1.9.3
checksum: 9153ac426ee056fc34c5be898f83d74ec08f559d69f544c5944ec05e584b62ed356b92d1a9b08993a7022ad42b5661c3d72881221adc19bee5fc1af3ad3864a8
languageName: node
linkType: hard
"@sentry/node@npm:^6.16.1":
version: 6.19.7
resolution: "@sentry/node@npm:6.19.7"
dependencies:
"@sentry/core": 6.19.7
"@sentry/hub": 6.19.7
"@sentry/types": 6.19.7
"@sentry/utils": 6.19.7
"@sentry/core": 7.3.0
"@sentry/hub": 7.3.0
"@sentry/types": 7.3.0
"@sentry/utils": 7.3.0
cookie: ^0.4.1
https-proxy-agent: ^5.0.0
lru_map: ^0.3.3
tslib: ^1.9.3
checksum: 2293b0d1d1f9fac3a451eb94f820bc27721c8edddd1f373064666ddd6272f0a4c70dbe58c6c4b3d3ccaf4578aab8f466d71ee69f6f6ff93521bbb02dfe829ce5
checksum: a92c2d2d1b05136b3c04f39cb87bf459519619c7e4f548f4e2a34145e868edd1ccdd505bcf5d3ff56872ea994530c263deb7ce4c498e9f4e39111c5fcacd342f
languageName: node
linkType: hard
"@sentry/types@npm:6.19.7":
version: 6.19.7
resolution: "@sentry/types@npm:6.19.7"
checksum: f46ef74a33376ad6ea9b128115515c58eb9369d89293c60aa67abca26b5d5d519aa4d0a736db56ae0d75ffd816643d62187018298523cbc2e6c2fb3a6b2a9035
"@sentry/types@npm:7.3.0":
version: 7.3.0
resolution: "@sentry/types@npm:7.3.0"
checksum: 3ddbc3c7ebf2caad2d97a4c7a25f14791f642f7baadfa3c02857e433c0377ca7e6df4d3fc7e197717f2d6f8fca876178d01c827b5c1b42adba92115c62e18daf
languageName: node
linkType: hard
"@sentry/utils@npm:6.19.7":
version: 6.19.7
resolution: "@sentry/utils@npm:6.19.7"
"@sentry/utils@npm:7.3.0":
version: 7.3.0
resolution: "@sentry/utils@npm:7.3.0"
dependencies:
"@sentry/types": 6.19.7
"@sentry/types": 7.3.0
tslib: ^1.9.3
checksum: a000223b9c646c64e3565e79cace1eeb75114342b768367c4dddd646476c215eb1bddfb70c63f05e2352d3bce2d7d415344e4757a001605d0e01ac74da5dd306
checksum: 2696b1bfad1ad2e8e2aa7dd822fb0546d680b06aa302c3a8e8c8da0577fb9938da094f3eda589b2a1c216e1c84a81a5119b30136fd013de9c3a4513aece55d05
languageName: node
linkType: hard
@@ -1773,7 +1761,7 @@ __metadata:
resolution: "@standardnotes/api-gateway@workspace:packages/api-gateway"
dependencies:
"@newrelic/winston-enricher": ^2.1.0
"@sentry/node": ^6.16.1
"@sentry/node": ^7.3.0
"@standardnotes/analytics": ^1.4.0
"@standardnotes/auth": 3.19.2
"@standardnotes/domain-events": 2.29.0
@@ -1802,6 +1790,7 @@ __metadata:
jsonwebtoken: 8.5.1
newrelic: ^8.14.1
nodemon: ^2.0.16
npm-check-updates: ^14.1.1
prettyjson: 1.2.1
reflect-metadata: 0.1.13
ts-jest: ^28.0.1
@@ -1828,17 +1817,17 @@ __metadata:
resolution: "@standardnotes/auth-server@workspace:packages/auth"
dependencies:
"@newrelic/winston-enricher": ^2.1.0
"@sentry/node": ^6.16.1
"@sentry/node": ^7.3.0
"@standardnotes/analytics": ^1.6.0
"@standardnotes/api": ^1.1.13
"@standardnotes/auth": ^3.19.2
"@standardnotes/common": ^1.23.0
"@standardnotes/domain-events": ^2.31.1
"@standardnotes/common": ^1.23.1
"@standardnotes/domain-events": ^2.32.4
"@standardnotes/domain-events-infra": ^1.4.135
"@standardnotes/features": ^1.45.2
"@standardnotes/responses": ^1.6.15
"@standardnotes/scheduler": ^1.1.1
"@standardnotes/settings": ^1.14.2
"@standardnotes/settings": ^1.15.0
"@standardnotes/sncrypto-common": ^1.8.1
"@standardnotes/sncrypto-node": ^1.8.1
"@standardnotes/time": ^1.6.8
@@ -1870,6 +1859,7 @@ __metadata:
mysql2: ^2.3.3
newrelic: ^8.14.1
nodemon: ^2.0.16
npm-check-updates: ^14.1.1
otplib: 12.0.1
prettyjson: 1.2.1
reflect-metadata: 0.1.13
@@ -1901,6 +1891,16 @@ __metadata:
languageName: node
linkType: hard
"@standardnotes/auth@npm:^3.19.4":
version: 3.19.4
resolution: "@standardnotes/auth@npm:3.19.4"
dependencies:
"@standardnotes/common": ^1.23.1
jsonwebtoken: ^8.5.1
checksum: 84ac9e669ee393a8ac04c49729cd732280ab7ad9c6ad780e1f8cc7e02bdd1d15b8446d84134e775d805e6fa04e9500d9e62d7f857e6b1f5bb36f10a0c31640ff
languageName: node
linkType: hard
"@standardnotes/common@npm:^1.19.1, @standardnotes/common@npm:^1.19.4, @standardnotes/common@npm:^1.22.0, @standardnotes/common@npm:^1.23.0":
version: 1.23.0
resolution: "@standardnotes/common@npm:1.23.0"
@@ -1908,6 +1908,13 @@ __metadata:
languageName: node
linkType: hard
"@standardnotes/common@npm:^1.23.1":
version: 1.23.1
resolution: "@standardnotes/common@npm:1.23.1"
checksum: f498f4c469f7b9cdfc08b7648077832a2a214d844f012d02d73c2c418fab221af3302570cc6b1957b5ed481b55237f95bc24fc5c231162bfcdf8730333d38405
languageName: node
linkType: hard
"@standardnotes/config@npm:2.0.1":
version: 2.0.1
resolution: "@standardnotes/config@npm:2.0.1"
@@ -1958,7 +1965,7 @@ __metadata:
languageName: node
linkType: hard
"@standardnotes/domain-events@npm:^2.27.6, @standardnotes/domain-events@npm:^2.29.0, @standardnotes/domain-events@npm:^2.31.1, @standardnotes/domain-events@npm:^2.32.0, @standardnotes/domain-events@npm:^2.32.2":
"@standardnotes/domain-events@npm:^2.27.6, @standardnotes/domain-events@npm:^2.29.0, @standardnotes/domain-events@npm:^2.32.2":
version: 2.32.2
resolution: "@standardnotes/domain-events@npm:2.32.2"
dependencies:
@@ -1969,6 +1976,28 @@ __metadata:
languageName: node
linkType: hard
"@standardnotes/domain-events@npm:^2.32.3":
version: 2.32.3
resolution: "@standardnotes/domain-events@npm:2.32.3"
dependencies:
"@standardnotes/auth": ^3.19.3
"@standardnotes/features": ^1.45.5
"@standardnotes/scheduler": ^1.1.1
checksum: ea6151d1376cbb99ffb9ff7bcc70c6e7e426c00176283ea29e8befc7719c0d67ca26f262239c8ac06147fc5d4546110cb7ee0995fd78c6ac353e6f43791554ac
languageName: node
linkType: hard
"@standardnotes/domain-events@npm:^2.32.4":
version: 2.32.4
resolution: "@standardnotes/domain-events@npm:2.32.4"
dependencies:
"@standardnotes/auth": ^3.19.4
"@standardnotes/features": ^1.45.6
"@standardnotes/scheduler": ^1.1.2
checksum: 9f8a1637aa63d04f2c60e1a4c75e5fc5f4013f4a5e39b9cd55d56a894220cee47390e8b37422b4c128db05d231ab371e8a1caa4e1af3395bf04319697dae7303
languageName: node
linkType: hard
"@standardnotes/encryption@npm:^1.8.19":
version: 1.8.19
resolution: "@standardnotes/encryption@npm:1.8.19"
@@ -1990,11 +2019,21 @@ __metadata:
languageName: node
linkType: hard
"@standardnotes/features@npm:^1.45.6":
version: 1.45.6
resolution: "@standardnotes/features@npm:1.45.6"
dependencies:
"@standardnotes/auth": ^3.19.4
"@standardnotes/common": ^1.23.1
checksum: 572780d6e24efa664f316f6cf56c01907e00263db6204fee17f7ce9e43fa376411f373863dda59f8fb039250a224b7f8637fbd0bcbd7241112e061accbc05360
languageName: node
linkType: hard
"@standardnotes/files-server@workspace:packages/files":
version: 0.0.0-use.local
resolution: "@standardnotes/files-server@workspace:packages/files"
dependencies:
"@sentry/node": ^6.16.1
"@sentry/node": ^7.3.0
"@standardnotes/auth": ^3.18.9
"@standardnotes/common": ^1.19.4
"@standardnotes/config": 2.0.1
@@ -2030,6 +2069,7 @@ __metadata:
jsonwebtoken: ^8.5.1
newrelic: ^8.14.1
nodemon: ^2.0.16
npm-check-updates: ^14.1.1
prettyjson: ^1.2.1
reflect-metadata: ^0.1.13
ts-jest: ^28.0.1
@@ -2077,8 +2117,9 @@ __metadata:
resolution: "@standardnotes/scheduler-server@workspace:packages/scheduler"
dependencies:
"@newrelic/winston-enricher": ^2.1.0
"@sentry/node": ^7.3.0
"@standardnotes/common": ^1.23.0
"@standardnotes/domain-events": ^2.32.0
"@standardnotes/domain-events": ^2.32.3
"@standardnotes/domain-events-infra": ^1.5.0
"@standardnotes/scheduler": ^1.1.0
"@standardnotes/time": ^1.7.0
@@ -2096,6 +2137,7 @@ __metadata:
jest: ^28.1.1
mysql2: ^2.3.3
newrelic: ^8.14.1
npm-check-updates: ^14.1.1
reflect-metadata: ^0.1.13
ts-jest: ^28.0.5
typeorm: ^0.3.6
@@ -2112,6 +2154,15 @@ __metadata:
languageName: node
linkType: hard
"@standardnotes/scheduler@npm:^1.1.2":
version: 1.1.2
resolution: "@standardnotes/scheduler@npm:1.1.2"
dependencies:
"@standardnotes/common": ^1.23.1
checksum: 68642a08741aeb4936e4a69e43e2b85e5cbfa3ce60006d292cee517d33093edaf35a6a7af61343d85ab3474d6e980a073a2779f6e0b1f11805ab06a407b15ce7
languageName: node
linkType: hard
"@standardnotes/server-monorepo@workspace:.":
version: 0.0.0-use.local
resolution: "@standardnotes/server-monorepo@workspace:."
@@ -2121,13 +2172,16 @@ __metadata:
"@lerna-lite/cli": ^1.5.1
"@lerna-lite/list": ^1.5.1
"@lerna-lite/run": ^1.5.1
"@sentry/node": ^7.3.0
"@types/jest": ^28.1.3
"@types/newrelic": ^7.0.3
"@types/node": ^18.0.0
"@typescript-eslint/parser": ^5.29.0
eslint: ^8.17.0
eslint-config-prettier: ^8.5.0
ini: ^3.0.0
newrelic: ^8.14.1
npm-check-updates: ^14.1.1
prettier: ^2.7.1
ts-node: ^10.8.1
typescript: ^4.7.4
@@ -2147,13 +2201,20 @@ __metadata:
languageName: node
linkType: hard
"@standardnotes/settings@npm:1.14.3, @standardnotes/settings@npm:^1.14.2":
"@standardnotes/settings@npm:1.14.3":
version: 1.14.3
resolution: "@standardnotes/settings@npm:1.14.3"
checksum: 60fbb2ca856083b1afdf3a93cfb2729151c8a4a34f02564a8a814a7caad9982285303ad79ffb1da7643046061a6efe39410e57e8e4703a8963be8dc0ffabeaa6
languageName: node
linkType: hard
"@standardnotes/settings@npm:^1.15.0":
version: 1.15.0
resolution: "@standardnotes/settings@npm:1.15.0"
checksum: 4397d453a1a0cd5554012a5bf5ee2025c102ffc6d742841eecd2ab9cd46b0fbfe78da61b401451646274887d92801cafcef4c283bbfc6074b4d152103e15f861
languageName: node
linkType: hard
"@standardnotes/sncrypto-common@npm:^1.3.0, @standardnotes/sncrypto-common@npm:^1.8.1, @standardnotes/sncrypto-common@npm:^1.9.0":
version: 1.9.0
resolution: "@standardnotes/sncrypto-common@npm:1.9.0"
@@ -2175,7 +2236,7 @@ __metadata:
resolution: "@standardnotes/syncing-server@workspace:packages/syncing-server"
dependencies:
"@newrelic/winston-enricher": ^2.1.0
"@sentry/node": ^6.16.1
"@sentry/node": ^7.3.0
"@standardnotes/analytics": ^1.6.0
"@standardnotes/auth": ^3.19.2
"@standardnotes/common": ^1.22.0
@@ -2213,6 +2274,7 @@ __metadata:
mysql2: ^2.3.3
newrelic: ^8.14.1
nodemon: 2.0.7
npm-check-updates: ^14.1.1
prettyjson: 1.2.1
reflect-metadata: 0.1.13
ts-jest: ^28.0.1
@@ -3784,6 +3846,13 @@ __metadata:
languageName: node
linkType: hard
"cint@npm:^8.2.1":
version: 8.2.1
resolution: "cint@npm:8.2.1"
checksum: 5f32feed160b63f5f7622095a0e330e0679b47ea4d7cd6a4eaf8045e1298092710f5cfdd005717954966edf9e3722df860cbff4632917c1a9ad3d43450bcddca
languageName: node
linkType: hard
"cjs-module-lexer@npm:^1.0.0":
version: 1.2.2
resolution: "cjs-module-lexer@npm:1.2.2"
@@ -3837,6 +3906,15 @@ __metadata:
languageName: node
linkType: hard
"cli-table@npm:^0.3.11":
version: 0.3.11
resolution: "cli-table@npm:0.3.11"
dependencies:
colors: 1.0.3
checksum: 59fb61f992ac9bc8610ed98c72bf7f5d396c5afb42926b6747b46b0f8bb98a0dfa097998e77542ac334c1eb7c18dbf4f104d5783493273c5ec4c34084aa7c663
languageName: node
linkType: hard
"cli-width@npm:^3.0.0":
version: 3.0.0
resolution: "cli-width@npm:3.0.0"
@@ -3964,6 +4042,13 @@ __metadata:
languageName: node
linkType: hard
"colors@npm:1.0.3":
version: 1.0.3
resolution: "colors@npm:1.0.3"
checksum: 234e8d3ab7e4003851cdd6a1f02eaa16dabc502ee5f4dc576ad7959c64b7477b15bd21177bab4055a4c0a66aa3d919753958030445f87c39a253d73b7a3637f5
languageName: node
linkType: hard
"colors@npm:1.4.0, colors@npm:^1.1.2":
version: 1.4.0
resolution: "colors@npm:1.4.0"
@@ -3991,6 +4076,13 @@ __metadata:
languageName: node
linkType: hard
"commander@npm:^9.3.0":
version: 9.3.0
resolution: "commander@npm:9.3.0"
checksum: d421ce66fee25792a1470c69aa8d1b86434bf873a96483aa92c8267f81a6f20c6f7c426f5e82f88ac50a8ec4855d3f2787aebcdef8aa559e1080a2337a95a217
languageName: node
linkType: hard
"compare-func@npm:^2.0.0":
version: 2.0.0
resolution: "compare-func@npm:2.0.0"
@@ -5126,6 +5218,13 @@ __metadata:
languageName: node
linkType: hard
"fast-memoize@npm:^2.5.2":
version: 2.5.2
resolution: "fast-memoize@npm:2.5.2"
checksum: 79fa759719ba4eac7e8c22fb3b0eb3f18f4a31e218c00b1eb4a5b53c5781921133a6b84472d59ec5a6ea8f26ad57b43cd99a350c0547ccce51489bc9a5f0b28d
languageName: node
linkType: hard
"fastq@npm:^1.6.0":
version: 1.13.0
resolution: "fastq@npm:1.13.0"
@@ -5215,6 +5314,16 @@ __metadata:
languageName: node
linkType: hard
"find-up@npm:5.0.0, find-up@npm:^5.0.0":
version: 5.0.0
resolution: "find-up@npm:5.0.0"
dependencies:
locate-path: ^6.0.0
path-exists: ^4.0.0
checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095
languageName: node
linkType: hard
"find-up@npm:^2.0.0":
version: 2.1.0
resolution: "find-up@npm:2.1.0"
@@ -5234,16 +5343,6 @@ __metadata:
languageName: node
linkType: hard
"find-up@npm:^5.0.0":
version: 5.0.0
resolution: "find-up@npm:5.0.0"
dependencies:
locate-path: ^6.0.0
path-exists: ^4.0.0
checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095
languageName: node
linkType: hard
"flat-cache@npm:^3.0.4":
version: 3.0.4
resolution: "flat-cache@npm:3.0.4"
@@ -5285,6 +5384,13 @@ __metadata:
languageName: node
linkType: hard
"fp-and-or@npm:^0.1.3":
version: 0.1.3
resolution: "fp-and-or@npm:0.1.3"
checksum: d556ad1fb0abd0115a5815b0f8c78439a690dbe317d5b37e8ad897784254d606d4fecd31e91e81790e713407bdccb675676f48bfa4ff1f278fbae7a9370c21b1
languageName: node
linkType: hard
"fresh@npm:0.5.2":
version: 0.5.2
resolution: "fresh@npm:0.5.2"
@@ -5423,6 +5529,13 @@ __metadata:
languageName: node
linkType: hard
"get-stdin@npm:^8.0.0":
version: 8.0.0
resolution: "get-stdin@npm:8.0.0"
checksum: 40128b6cd25781ddbd233344f1a1e4006d4284906191ed0a7d55ec2c1a3e44d650f280b2c9eeab79c03ac3037da80257476c0e4e5af38ddfb902d6ff06282d77
languageName: node
linkType: hard
"get-stream@npm:^4.1.0":
version: 4.1.0
resolution: "get-stream@npm:4.1.0"
@@ -5601,7 +5714,7 @@ __metadata:
languageName: node
linkType: hard
"globby@npm:^11.0.3, globby@npm:^11.1.0":
"globby@npm:^11.0.3, globby@npm:^11.0.4, globby@npm:^11.1.0":
version: 11.1.0
resolution: "globby@npm:11.1.0"
dependencies:
@@ -6021,6 +6134,13 @@ __metadata:
languageName: node
linkType: hard
"ini@npm:^3.0.0":
version: 3.0.0
resolution: "ini@npm:3.0.0"
checksum: e92b6b0835ac369e58c677e7faa8db6019ac667d7404887978fb86b181d658e50f1742ecbba7d81eb5ff917b3ae4d63a48e1ef3a9f8a0527bd7605fe1a9995d4
languageName: node
linkType: hard
"inquirer@npm:^8.2.4":
version: 8.2.4
resolution: "inquirer@npm:8.2.4"
@@ -6867,6 +6987,13 @@ __metadata:
languageName: node
linkType: hard
"jju@npm:^1.1.0":
version: 1.4.0
resolution: "jju@npm:1.4.0"
checksum: 3790481bd2b7827dd6336e6e3dc2dcc6d425679ba7ebde7b679f61dceb4457ea0cda330972494de608571f4973c6dfb5f70fab6f3c5037dbab19ac449a60424f
languageName: node
linkType: hard
"jmespath@npm:0.16.0":
version: 0.16.0
resolution: "jmespath@npm:0.16.0"
@@ -6893,7 +7020,7 @@ __metadata:
languageName: node
linkType: hard
"js-yaml@npm:^4.1.0":
"js-yaml@npm:^4.0.0, js-yaml@npm:^4.1.0":
version: 4.1.0
resolution: "js-yaml@npm:4.1.0"
dependencies:
@@ -6934,6 +7061,15 @@ __metadata:
languageName: node
linkType: hard
"json-parse-helpfulerror@npm:^1.0.3":
version: 1.0.3
resolution: "json-parse-helpfulerror@npm:1.0.3"
dependencies:
jju: ^1.1.0
checksum: 376d85c3728ab4446e30fa943ad2cf5fe63d8a780be16bade9f846f2e4c1431ef61ae01746011d815fb3627abb3d21b0cc74fe9ed6cc74b93819e720afb05cae
languageName: node
linkType: hard
"json-schema-traverse@npm:^0.4.1":
version: 0.4.1
resolution: "json-schema-traverse@npm:0.4.1"
@@ -6955,7 +7091,7 @@ __metadata:
languageName: node
linkType: hard
"json5@npm:^2.2.1":
"json5@npm:^2.1.2, json5@npm:^2.2.1":
version: 2.2.1
resolution: "json5@npm:2.2.1"
bin:
@@ -6977,6 +7113,13 @@ __metadata:
languageName: node
linkType: hard
"jsonlines@npm:^0.1.1":
version: 0.1.1
resolution: "jsonlines@npm:0.1.1"
checksum: 5408cbdbd396f1c418bc95023a8b3303ad0fac98e73cad9bacf0a73b52739dbaee962c095475618da2c236eeb2532130fd49b3b5fe6320a69d954144062cedbf
languageName: node
linkType: hard
"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1":
version: 1.3.1
resolution: "jsonparse@npm:1.3.1"
@@ -7046,6 +7189,13 @@ __metadata:
languageName: node
linkType: hard
"kleur@npm:^4.0.1":
version: 4.1.5
resolution: "kleur@npm:4.1.5"
checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12
languageName: node
linkType: hard
"kuler@npm:^2.0.0":
version: 2.0.0
resolution: "kuler@npm:2.0.0"
@@ -8067,6 +8217,45 @@ __metadata:
languageName: node
linkType: hard
"npm-check-updates@npm:^14.1.1":
version: 14.1.1
resolution: "npm-check-updates@npm:14.1.1"
dependencies:
chalk: ^4.1.2
cint: ^8.2.1
cli-table: ^0.3.11
commander: ^9.3.0
fast-memoize: ^2.5.2
find-up: 5.0.0
fp-and-or: ^0.1.3
get-stdin: ^8.0.0
globby: ^11.0.4
hosted-git-info: ^5.0.0
json-parse-helpfulerror: ^1.0.3
jsonlines: ^0.1.1
lodash: ^4.17.21
minimatch: ^5.1.0
p-map: ^4.0.0
pacote: ^13.6.0
parse-github-url: ^1.0.2
progress: ^2.0.3
prompts-ncu: ^2.5.0
rc-config-loader: ^4.1.0
remote-git-tags: ^3.0.0
rimraf: ^3.0.2
semver: ^7.3.7
semver-utils: ^1.1.4
source-map-support: ^0.5.21
spawn-please: ^1.0.0
update-notifier: ^5.1.0
yaml: ^2.1.1
bin:
ncu: build/src/bin/cli.js
npm-check-updates: build/src/bin/cli.js
checksum: a3ec52312c937c6f3da70ed29beccd87be861eb50f300b2b0d3e8f3502f26e03f2e23ea4a55ad1bb38c5441ab8738225c349089b233da569739acc1ee15e3989
languageName: node
linkType: hard
"npm-install-checks@npm:^5.0.0":
version: 5.0.0
resolution: "npm-install-checks@npm:5.0.0"
@@ -8454,6 +8643,15 @@ __metadata:
languageName: node
linkType: hard
"parse-github-url@npm:^1.0.2":
version: 1.0.2
resolution: "parse-github-url@npm:1.0.2"
bin:
parse-github-url: ./cli.js
checksum: a19b8bc6f8908a24cb63a10ff90cd39cec0745615a272ec686803684653be34eb3e638e31a66c8ee3a9568082ff686eaf010181688000a6274c86a23e9220f2f
languageName: node
linkType: hard
"parse-json@npm:^4.0.0":
version: 4.0.0
resolution: "parse-json@npm:4.0.0"
@@ -8745,6 +8943,13 @@ __metadata:
languageName: node
linkType: hard
"progress@npm:^2.0.3":
version: 2.0.3
resolution: "progress@npm:2.0.3"
checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7
languageName: node
linkType: hard
"promise-inflight@npm:^1.0.1":
version: 1.0.1
resolution: "promise-inflight@npm:1.0.1"
@@ -8762,6 +8967,16 @@ __metadata:
languageName: node
linkType: hard
"prompts-ncu@npm:^2.5.0":
version: 2.5.0
resolution: "prompts-ncu@npm:2.5.0"
dependencies:
kleur: ^4.0.1
sisteransi: ^1.0.5
checksum: e050961c300b897f166b9abdde02a3087222a12b50598015072fd31fd401def4cf665ec2ada80710d84bb8611092cd57b39e820ff509af740f9f531987bfc9a6
languageName: node
linkType: hard
"prompts@npm:^2.0.1":
version: 2.4.2
resolution: "prompts@npm:2.4.2"
@@ -8963,6 +9178,18 @@ __metadata:
languageName: node
linkType: hard
"rc-config-loader@npm:^4.1.0":
version: 4.1.0
resolution: "rc-config-loader@npm:4.1.0"
dependencies:
debug: ^4.1.1
js-yaml: ^4.0.0
json5: ^2.1.2
require-from-string: ^2.0.2
checksum: 1d07aaf6116026f47b1c183d64999e9449168e3c2fd8caacfeb6328d16800011d060258ca03c914559fb287a49584910c6410e24cef7bbac4817c2bf547069ad
languageName: node
linkType: hard
"rc@npm:1.2.8, rc@npm:^1.2.8":
version: 1.2.8
resolution: "rc@npm:1.2.8"
@@ -9150,6 +9377,13 @@ __metadata:
languageName: node
linkType: hard
"remote-git-tags@npm:^3.0.0":
version: 3.0.0
resolution: "remote-git-tags@npm:3.0.0"
checksum: 04d87e4c98ac414afe03417d3f585c4b782c03fec74561b1fba0bdc5d3a0459f2cfcc14af36fbc153bf601e566d86e9ff6989e289ff57a86f9cfdac6b4f622f2
languageName: node
linkType: hard
"require-directory@npm:^2.1.1":
version: 2.1.1
resolution: "require-directory@npm:2.1.1"
@@ -9157,6 +9391,13 @@ __metadata:
languageName: node
linkType: hard
"require-from-string@npm:^2.0.2":
version: 2.0.2
resolution: "require-from-string@npm:2.0.2"
checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b
languageName: node
linkType: hard
"resolve-cwd@npm:^3.0.0":
version: 3.0.0
resolution: "resolve-cwd@npm:3.0.0"
@@ -9342,6 +9583,13 @@ __metadata:
languageName: node
linkType: hard
"semver-utils@npm:^1.1.4":
version: 1.1.4
resolution: "semver-utils@npm:1.1.4"
checksum: 93fd955a30f5bdf532163d94981aa03dfbaddf29dad6388415b264c95d7046a6b47d947c6e3e37c0d7867ed3f024aa6e50fc308c9487378354e9d300c9dd68b6
languageName: node
linkType: hard
"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.3.0, semver@npm:^5.5.1, semver@npm:^5.6.0, semver@npm:^5.7.1":
version: 5.7.1
resolution: "semver@npm:5.7.1"
@@ -9610,6 +9858,16 @@ __metadata:
languageName: node
linkType: hard
"source-map-support@npm:^0.5.21":
version: 0.5.21
resolution: "source-map-support@npm:0.5.21"
dependencies:
buffer-from: ^1.0.0
source-map: ^0.6.0
checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137
languageName: node
linkType: hard
"source-map@npm:^0.6.0, source-map@npm:^0.6.1":
version: 0.6.1
resolution: "source-map@npm:0.6.1"
@@ -9617,6 +9875,13 @@ __metadata:
languageName: node
linkType: hard
"spawn-please@npm:^1.0.0":
version: 1.0.0
resolution: "spawn-please@npm:1.0.0"
checksum: b8e1e1dc14e0b72bd7cf57b8516572680e0453d4fd52b0b82760dcc6257d30c6aa6a51fff864de4d9d53932d4078ef0b11f405354b28b314e54c14b18ebdef3b
languageName: node
linkType: hard
"spdx-correct@npm:^3.0.0":
version: 3.1.1
resolution: "spdx-correct@npm:3.1.1"
@@ -10968,6 +11233,13 @@ __metadata:
languageName: node
linkType: hard
"yaml@npm:^2.1.1":
version: 2.1.1
resolution: "yaml@npm:2.1.1"
checksum: f48bb209918aa57cfaf78ef6448d1a1f8187f45c746f933268b7023dc59e5456004611879126c9bb5ea55b0a2b1c2b392dfde436931ece0c703a3d754562bb96
languageName: node
linkType: hard
"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3":
version: 20.2.9
resolution: "yargs-parser@npm:20.2.9"