From f356ebd7817df8afe5128429622e6ebc661d68f2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Mar 2022 21:27:06 +0000 Subject: [PATCH 01/89] Bump chrome-aws-lambda from 7.0.0 to 10.1.0 Bumps [chrome-aws-lambda](https://github.com/alixaxel/chrome-aws-lambda) from 7.0.0 to 10.1.0. - [Release notes](https://github.com/alixaxel/chrome-aws-lambda/releases) - [Commits](https://github.com/alixaxel/chrome-aws-lambda/compare/v7.0.0...v10.1.0) --- updated-dependencies: - dependency-name: chrome-aws-lambda dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- packages/puppeteer-parse/package.json | 2 +- yarn.lock | 40 +++++++++++++-------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/puppeteer-parse/package.json b/packages/puppeteer-parse/package.json index 83f3e09e0..43619f24e 100644 --- a/packages/puppeteer-parse/package.json +++ b/packages/puppeteer-parse/package.json @@ -8,7 +8,7 @@ "@google-cloud/storage": "^5.18.1", "@sentry/serverless": "^6.13.3", "axios": "^0.26.0", - "chrome-aws-lambda": "^7.0.0", + "chrome-aws-lambda": "^10.1.0", "dotenv": "^8.2.0", "jsdom": "^19.0.0", "jsonwebtoken": "^8.5.1", diff --git a/yarn.lock b/yarn.lock index 463c49eea..9d41aa15d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8468,12 +8468,12 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -chrome-aws-lambda@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/chrome-aws-lambda/-/chrome-aws-lambda-7.0.0.tgz#efb73c8d254d433413cf6866c5eadc752d64b417" - integrity sha512-GbYXRPYtaA0DLfmxQpuZw1SKTP7rOA4UXiATwiFRJ4Ea6PBYSzqK0YjS7B2WimUBe//ybPfNpPIs8A3WpF0xvA== +chrome-aws-lambda@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/chrome-aws-lambda/-/chrome-aws-lambda-10.1.0.tgz#ac43b4cdfc1fbb2275c62effada560858099501e" + integrity sha512-NZQVf+J4kqG4sVhRm3WNmOfzY0OtTSm+S8rg77pwePa9RCYHzhnzRs8YvNI6L9tALIW6RpmefWiPURt3vURXcw== dependencies: - lambdafs "^2.0.2" + lambdafs "^2.0.3" chrome-trace-event@^1.0.2: version "1.0.3" @@ -13619,12 +13619,12 @@ kuler@^2.0.0: resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== -lambdafs@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/lambdafs/-/lambdafs-2.0.3.tgz#f2acc53cf4862d29f1df654c327864b4faeb1d4a" - integrity sha512-5YWwZA/QKk09GdfcJ/ABVO+bpFoGlnTBa5jmyM8Kt9yIzl2lDDVBPLK+Aenq2UEcuDpqxXIYI5zLB7VZNepTrg== +lambdafs@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/lambdafs/-/lambdafs-2.1.1.tgz#4bf8d3037b6c61bbb4a22ab05c73ee47964c25ed" + integrity sha512-x5k8JcoJWkWLvCVBzrl4pzvkEHSgSBqFjg3Dpsc4AcTMq7oUMym4cL/gRTZ6VM4mUMY+M0dIbQ+V1c1tsqqanQ== dependencies: - tar-fs "^2.1.1" + tar-fs "*" language-subtag-registry@~0.3.2: version "0.3.21" @@ -18269,6 +18269,16 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar-fs@*, tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + tar-fs@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad" @@ -18279,16 +18289,6 @@ tar-fs@2.0.0: pump "^3.0.0" tar-stream "^2.0.0" -tar-fs@^2.0.0, tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - tar-stream@^2.0.0, tar-stream@^2.1.4: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" From d0af8b21866c10bf488d62107d930a11bd1ac50d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Mar 2022 21:28:57 +0000 Subject: [PATCH 02/89] Bump @opentelemetry/semantic-conventions from 0.24.0 to 1.0.1 Bumps [@opentelemetry/semantic-conventions](https://github.com/open-telemetry/opentelemetry-js) from 0.24.0 to 1.0.1. - [Release notes](https://github.com/open-telemetry/opentelemetry-js/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-js/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-js/compare/v0.24.0...stable/v1.0.1) --- updated-dependencies: - dependency-name: "@opentelemetry/semantic-conventions" dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- packages/api/package.json | 2 +- yarn.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/api/package.json b/packages/api/package.json index 3fdc6ded2..101dbafb6 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -30,7 +30,7 @@ "@opentelemetry/instrumentation-pg": "^0.24.0", "@opentelemetry/node": "^0.24.0", "@opentelemetry/resources": "^0.24.0", - "@opentelemetry/semantic-conventions": "^0.24.0", + "@opentelemetry/semantic-conventions": "^1.0.1", "@opentelemetry/tracing": "^0.24.0", "@sendgrid/mail": "^7.6.0", "@sentry/integrations": "^6.19.1", diff --git a/yarn.lock b/yarn.lock index 463c49eea..1da893fc6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4021,7 +4021,7 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-0.24.0.tgz#1028ef0e0923b24916158d80d2ddfd67ea8b6740" integrity sha512-a/szuMQV0Quy0/M7kKdglcbRSoorleyyOwbTNNJ32O+RBN766wbQlMTvdimImTmwYWGr+NJOni1EcC242WlRcA== -"@opentelemetry/semantic-conventions@1.0.1", "@opentelemetry/semantic-conventions@^1.0.0": +"@opentelemetry/semantic-conventions@1.0.1", "@opentelemetry/semantic-conventions@^1.0.0", "@opentelemetry/semantic-conventions@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.0.1.tgz#9349c3860a53468fa2108b5df09aa843f22dbf94" integrity sha512-7XU1sfQ8uCVcXLxtAHA8r3qaLJ2oq7sKtEwzZhzuEXqYmjW+n+J4yM3kNo0HQo3Xp1eUe47UM6Wy6yuAvIyllg== From a1feffaf036944ba1021340f1293861e3a4c612c Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 30 Mar 2022 16:39:51 -0700 Subject: [PATCH 03/89] Prefetch page content on iOS --- .../App/Views/Home/HomeFeedViewModel.swift | 3 ++ .../Views/WebReader/WebReaderViewModel.swift | 10 ++++++ .../Sources/Models/ArticleContent.swift | 8 +++++ .../Services/DataService/DataService.swift | 32 +++++++++++++++++++ 4 files changed, 53 insertions(+) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index e0ebabb8d..6a917f435 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -76,6 +76,9 @@ final class HomeFeedViewModel: ObservableObject { if thisSearchIdx > 0, thisSearchIdx <= self?.receivedIdx ?? 0 { return } + + dataService.prefetchPages(items: result.items) + self?.items = isRefresh ? result.items : (self?.items ?? []) + result.items self?.isLoading = false self?.receivedIdx = thisSearchIdx diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderViewModel.swift index 1dd5aa8dd..f111608c9 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderViewModel.swift @@ -28,6 +28,15 @@ final class WebReaderViewModel: ObservableObject { guard let viewer = dataService.currentViewer else { return } + if let content = dataService.pageCache.object(forKey: NSString(string: slug)) { + print("RETRIEVED FORM CACHE", slug) + isLoading = false + articleContent = content.value + return + } else { + print("MISSED CACHE", slug) + } + dataService.articleContentPublisher(username: viewer.username, slug: slug).sink( receiveCompletion: { [weak self] completion in guard case .failure = completion else { return } @@ -35,6 +44,7 @@ final class WebReaderViewModel: ObservableObject { }, receiveValue: { [weak self] articleContent in self?.articleContent = articleContent + dataService.pageCache.setObject(CachedPageContent(articleContent), forKey: NSString(string: slug)) } ) .store(in: &subscriptions) diff --git a/apple/OmnivoreKit/Sources/Models/ArticleContent.swift b/apple/OmnivoreKit/Sources/Models/ArticleContent.swift index bc55cf570..7a3d5b0e7 100644 --- a/apple/OmnivoreKit/Sources/Models/ArticleContent.swift +++ b/apple/OmnivoreKit/Sources/Models/ArticleContent.swift @@ -1,5 +1,13 @@ import Foundation +public class CachedPageContent: NSObject { + public let value: ArticleContent + + public init(_ content: ArticleContent) { + self.value = content + } +} + public struct ArticleContent { public let htmlContent: String public let highlights: [Highlight] diff --git a/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift b/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift index 12deb1da3..aca49bdfa 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift @@ -1,6 +1,13 @@ +import Combine import Foundation import Models +public class CacheManager: NSObject, NSCacheDelegate { + public func cache(_: NSCache, willEvictObject obj: Any) { + print("evicting object", obj) + } +} + public final class DataService: ObservableObject { public static var registerIntercomUser: ((String) -> Void)? public static var showIntercomMessenger: (() -> Void)? @@ -9,12 +16,37 @@ public final class DataService: ObservableObject { public internal(set) var currentViewer: Viewer? let networker: Networker + public let pageCache = NSCache() + let pageCacheQueue = DispatchQueue.global(qos: .background) + let highlightsCache = NSCache() let highlightsCacheQueue = DispatchQueue(label: "app.omnivore.highlights.cache.queue", attributes: .concurrent) + let cacheManager: CacheManager + var subscriptions = Set() + public init(appEnvironment: AppEnvironment, networker: Networker) { self.appEnvironment = appEnvironment self.networker = networker + self.cacheManager = CacheManager() + pageCache.delegate = cacheManager + } + + public func prefetchPages(items: [FeedItem]) { + print("prefetching items", items, "cost limit", pageCache.countLimit) + + guard let viewer = currentViewer else { return } + + for item in items { + let slug = item.slug + articleContentPublisher(username: viewer.username, slug: slug).sink( + receiveCompletion: { _ in }, + receiveValue: { [weak self] articleContent in + self?.pageCache.setObject(CachedPageContent(articleContent), forKey: NSString(string: slug)) + } + ) + .store(in: &subscriptions) + } } public func clearHighlights() { From 183776c7912963bae72d5f8276498c65c05c06f6 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 30 Mar 2022 17:09:37 -0700 Subject: [PATCH 04/89] Reduce the reader overly length now that items are precached --- .../Sources/App/Views/WebReader/WebReaderContainer.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift index 503f67417..7cc5bf938 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift @@ -204,7 +204,7 @@ struct WebReaderContainerView: View { Color.systemBackground .transition(.opacity) .onAppear { - DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(250)) { + DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) { withAnimation(.linear(duration: 0.2)) { showOverlay = false } From 5ee137d00736d406ebd5b6eb41e65ed03582f518 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 31 Mar 2022 02:48:02 +0000 Subject: [PATCH 05/89] Bump @sentry/serverless from 6.16.1 to 6.19.3 Bumps [@sentry/serverless](https://github.com/getsentry/sentry-javascript) from 6.16.1 to 6.19.3. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/6.16.1...6.19.3) --- updated-dependencies: - dependency-name: "@sentry/serverless" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 245 ++++++++++++++++++------------------------------------ 1 file changed, 81 insertions(+), 164 deletions(-) diff --git a/yarn.lock b/yarn.lock index 463c49eea..3708b72c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4564,9 +4564,9 @@ any-observable "^0.3.0" "@segment/analytics-next@^1.33.5": - version "1.33.5" - resolved "https://registry.yarnpkg.com/@segment/analytics-next/-/analytics-next-1.33.5.tgz#798e20229ec524deeb4f6311c008543c0fa3c175" - integrity sha512-HgyBB0vqWnVCrZ3gJY3tPq11J8RWR2Vs3OuRFg5Exf1+oVtjcQwcR09okKursx0UsvVXYG7mHKQM9yiRVYxqJA== + version "1.34.0" + resolved "https://registry.yarnpkg.com/@segment/analytics-next/-/analytics-next-1.34.0.tgz#dfc0ec53a39f3131adf7181d6f6cc74a84f7e8c5" + integrity sha512-3hbpLhMqgBrdv8WWB+qZY34F0SE4qx+zbx28D5YHpI5U1u0dEd34IjNSoBigkEHVNOV2Z1Rkyr1UBbQtZVb6Xw== dependencies: "@lukeed/uuid" "^2.0.0" "@segment/analytics.js-video-plugins" "^0.2.1" @@ -4682,28 +4682,6 @@ "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/core@6.13.3": - version "6.13.3" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.13.3.tgz#5cbbb995128e793ebebcbf1d3b7514e0e5e8b221" - integrity sha512-obm3SjgCk8A7nB37b2AU1eq1q7gMoJRrGMv9VRIyfcG0Wlz/5lJ9O3ohUk+YZaaVfZMxXn6hFtsBiOWmlv7IIA== - dependencies: - "@sentry/hub" "6.13.3" - "@sentry/minimal" "6.13.3" - "@sentry/types" "6.13.3" - "@sentry/utils" "6.13.3" - tslib "^1.9.3" - -"@sentry/core@6.16.1": - version "6.16.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.16.1.tgz#d9f7a75f641acaddf21b6aafa7a32e142f68f17c" - integrity sha512-UFI0264CPUc5cR1zJH+S2UPOANpm6dLJOnsvnIGTjsrwzR0h8Hdl6rC2R/GPq+WNbnipo9hkiIwDlqbqvIU5vw== - dependencies: - "@sentry/hub" "6.16.1" - "@sentry/minimal" "6.16.1" - "@sentry/types" "6.16.1" - "@sentry/utils" "6.16.1" - tslib "^1.9.3" - "@sentry/core@6.17.7": version "6.17.7" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.7.tgz#f591235c06b1a4e75d748b15c539e071bd3f5cf5" @@ -4715,6 +4693,17 @@ "@sentry/utils" "6.17.7" tslib "^1.9.3" +"@sentry/core@6.19.3": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.3.tgz#88268afc8c42716c455ad77bb4bed2bbf96abd83" + integrity sha512-RcGmYdkrE3VYBMl9Hgv4GKsC8FEVUdWYsfGIcT/btwP2YpBeUaTZl+1vV9r3Ncdl125LqzP5CKSj5otVxiEg6g== + dependencies: + "@sentry/hub" "6.19.3" + "@sentry/minimal" "6.19.3" + "@sentry/types" "6.19.3" + "@sentry/utils" "6.19.3" + tslib "^1.9.3" + "@sentry/hub@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" @@ -4724,24 +4713,6 @@ "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/hub@6.13.3": - version "6.13.3" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.13.3.tgz#cc09623a69b5343315fdb61c7fdd0be74b72299f" - integrity sha512-eYppBVqvhs5cvm33snW2sxfcw6G20/74RbBn+E4WDo15hozis89kU7ZCJDOPkXuag3v1h9igns/kM6PNBb41dw== - dependencies: - "@sentry/types" "6.13.3" - "@sentry/utils" "6.13.3" - tslib "^1.9.3" - -"@sentry/hub@6.16.1": - version "6.16.1" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.16.1.tgz#526e19db51f4412da8634734044c605b936a7b80" - integrity sha512-4PGtg6AfpqMkreTpL7ymDeQ/U1uXv03bKUuFdtsSTn/FRf9TLS4JB0KuTZCxfp1IRgAA+iFg6B784dDkT8R9eg== - dependencies: - "@sentry/types" "6.16.1" - "@sentry/utils" "6.16.1" - tslib "^1.9.3" - "@sentry/hub@6.17.7": version "6.17.7" resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.7.tgz#5c90d661e263dad7da0e0106f1cb90cf797d93a7" @@ -4751,6 +4722,15 @@ "@sentry/utils" "6.17.7" tslib "^1.9.3" +"@sentry/hub@6.19.3": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.3.tgz#d555c83404f19ac9b68f336b051b8e7a9d75feb0" + integrity sha512-iYbkrxEZt6CrHP3U3r54MARVZSs3YHjAMUMOTlC16s/Amz1McwV95XtI3NJaqMhwzl7R5vbGrs3xOtLg1V1Uyw== + dependencies: + "@sentry/types" "6.19.3" + "@sentry/utils" "6.19.3" + tslib "^1.9.3" + "@sentry/integrations@6.17.7": version "6.17.7" resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-6.17.7.tgz#c14f409fec91743db4a21232413de235946cb6d3" @@ -4780,24 +4760,6 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@sentry/minimal@6.13.3": - version "6.13.3" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.13.3.tgz#a675a79bcc830142e4f95e6198a2efde2cd3901e" - integrity sha512-63MlYYRni3fs5Bh8XBAfVZ+ctDdWg0fapSTP1ydIC37fKvbE+5zhyUqwrEKBIiclEApg1VKX7bkKxVdu/vsFdw== - dependencies: - "@sentry/hub" "6.13.3" - "@sentry/types" "6.13.3" - tslib "^1.9.3" - -"@sentry/minimal@6.16.1": - version "6.16.1" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.16.1.tgz#6a9506a92623d2ff1fc17d60989688323326772e" - integrity sha512-dq+mI1EQIvUM+zJtGCVgH3/B3Sbx4hKlGf2Usovm9KoqWYA+QpfVBholYDe/H2RXgO7LFEefDLvOdHDkqeJoyA== - dependencies: - "@sentry/hub" "6.16.1" - "@sentry/types" "6.16.1" - tslib "^1.9.3" - "@sentry/minimal@6.17.7": version "6.17.7" resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.7.tgz#f19182047f19b563f40a30d45d2ce9ad7df1ec4e" @@ -4807,6 +4769,15 @@ "@sentry/types" "6.17.7" tslib "^1.9.3" +"@sentry/minimal@6.19.3": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.3.tgz#b9b7f0d7f0cd2341b243318668ac01458f9d7889" + integrity sha512-xy/6ThHK8B2NJT98nWrx6V9eVgUbzq2N/8lv5/QqrKsICjxx22TRC8Q6zPg/o7BYcrY5vpugSEbIeErTnyxHDA== + dependencies: + "@sentry/hub" "6.19.3" + "@sentry/types" "6.19.3" + tslib "^1.9.3" + "@sentry/nextjs@^6.16.1": version "6.17.7" resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-6.17.7.tgz#00e0380ba2b709674e495b3c00b24ee82405575d" @@ -4822,36 +4793,6 @@ "@sentry/webpack-plugin" "1.18.5" tslib "^1.9.3" -"@sentry/node@6.13.3": - version "6.13.3" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.13.3.tgz#94c646c31fd240ab68ee8b85aa663e65eb499d06" - integrity sha512-ZeZSw+TcPcf4e0j7iEqNMtoVmz+WFW/TEoGokXIwysZqSgchKdAXDHqn+CqUqFan7d76JcJmzztAUK2JruQ2Kg== - dependencies: - "@sentry/core" "6.13.3" - "@sentry/hub" "6.13.3" - "@sentry/tracing" "6.13.3" - "@sentry/types" "6.13.3" - "@sentry/utils" "6.13.3" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/node@6.16.1": - version "6.16.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.16.1.tgz#d92916da3e95d23e1ada274e97d6bf369e74ac51" - integrity sha512-SeDDoug2kUxeF1D7JGPa3h5EXxKtmA01mITBPYx5xbJ0sMksnv5I5bC1SJ8arRRzq6+W1C4IEeDBQtrVCk6ixA== - dependencies: - "@sentry/core" "6.16.1" - "@sentry/hub" "6.16.1" - "@sentry/tracing" "6.16.1" - "@sentry/types" "6.16.1" - "@sentry/utils" "6.16.1" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - "@sentry/node@6.17.7": version "6.17.7" resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.7.tgz#c142d93328b29312098276e0cb66ec3b9e805a93" @@ -4867,6 +4808,20 @@ lru_map "^0.3.3" tslib "^1.9.3" +"@sentry/node@6.19.3": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.19.3.tgz#afcf106bf72acc0e4bbacbc54744de8a938cbd1c" + integrity sha512-eHreMMbaK4mMAQ45Ki2xJ6in02l66hL6xhltppy/h4m297JIvjaQAFpbQf5XLtO7W4KjdbSV5qnB45D1aOAzFA== + dependencies: + "@sentry/core" "6.19.3" + "@sentry/hub" "6.19.3" + "@sentry/types" "6.19.3" + "@sentry/utils" "6.19.3" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + "@sentry/node@^5.26.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" @@ -4894,30 +4849,16 @@ hoist-non-react-statics "^3.3.2" tslib "^1.9.3" -"@sentry/serverless@^6.13.3": - version "6.13.3" - resolved "https://registry.yarnpkg.com/@sentry/serverless/-/serverless-6.13.3.tgz#3fd3c7b196918c9be949b8187dc62d88e1205ef6" - integrity sha512-4isAEvofOFqbA4CE4Ls1W/95KmKzYv95aDsoAhBxHl8KgYjRPcOVsaNsssi8HZyLiw3euTiE/C0jX4I7Zl7uRw== +"@sentry/serverless@^6.13.3", "@sentry/serverless@^6.16.1": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/serverless/-/serverless-6.19.3.tgz#b61474d0612a9885d6426b92f8ded90a0ef44887" + integrity sha512-HhD0RjgaaNfUQwhvg2e7STzshhbRXs2r4AI4AJ9jHDhQBLrG2/PKDJgul3KbMbfsc5791oqIWoT4MSz3iuwbJw== dependencies: - "@sentry/minimal" "6.13.3" - "@sentry/node" "6.13.3" - "@sentry/tracing" "6.13.3" - "@sentry/types" "6.13.3" - "@sentry/utils" "6.13.3" - "@types/aws-lambda" "^8.10.62" - "@types/express" "^4.17.2" - tslib "^1.9.3" - -"@sentry/serverless@^6.16.1": - version "6.16.1" - resolved "https://registry.yarnpkg.com/@sentry/serverless/-/serverless-6.16.1.tgz#21bab60569ab89d739de9fb49bf958e2fee4bb97" - integrity sha512-WLBF9QclIoYRsqRbYo/AjElPN7e7J9Xz7LLQ3fsB35Hsr5YjcDj2rw7Q2pDKnCkRIZpj6N+TvAeOHaVv3Z0Qmg== - dependencies: - "@sentry/minimal" "6.16.1" - "@sentry/node" "6.16.1" - "@sentry/tracing" "6.16.1" - "@sentry/types" "6.16.1" - "@sentry/utils" "6.16.1" + "@sentry/minimal" "6.19.3" + "@sentry/node" "6.19.3" + "@sentry/tracing" "6.19.3" + "@sentry/types" "6.19.3" + "@sentry/utils" "6.19.3" "@types/aws-lambda" "^8.10.62" "@types/express" "^4.17.2" tslib "^1.9.3" @@ -4933,28 +4874,6 @@ "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/tracing@6.13.3": - version "6.13.3" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.13.3.tgz#ca657d4afa99c50f15e638fe38405bac33e780ee" - integrity sha512-yyOFIhqlprPM0g4f35Icear3eZk2mwyYcGEzljJfY2iU6pJwj1lzia5PfSwiCW7jFGMmlBJNhOAIpfhlliZi8Q== - dependencies: - "@sentry/hub" "6.13.3" - "@sentry/minimal" "6.13.3" - "@sentry/types" "6.13.3" - "@sentry/utils" "6.13.3" - tslib "^1.9.3" - -"@sentry/tracing@6.16.1": - version "6.16.1" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.16.1.tgz#32fba3e07748e9a955055afd559a65996acb7d71" - integrity sha512-MPSbqXX59P+OEeST+U2V/8Hu/8QjpTUxTNeNyTHWIbbchdcMMjDbXTS3etCgajZR6Ro+DHElOz5cdSxH6IBGlA== - dependencies: - "@sentry/hub" "6.16.1" - "@sentry/minimal" "6.16.1" - "@sentry/types" "6.16.1" - "@sentry/utils" "6.16.1" - tslib "^1.9.3" - "@sentry/tracing@6.17.7": version "6.17.7" resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.7.tgz#f4536683b29bb3ac7ddda5ca49494731cec6b619" @@ -4966,21 +4885,22 @@ "@sentry/utils" "6.17.7" tslib "^1.9.3" +"@sentry/tracing@6.19.3": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.19.3.tgz#dfdbd5019486c899bdf352b1152d5d253544ef70" + integrity sha512-3lyb4yCFH/ltEQSyKM96g2c74vvKIwByx8fLDS4FHYQQDXY+xPcs+zyK8L1Fs5PRFAUciEOK5TS9qwELom5K4w== + dependencies: + "@sentry/hub" "6.19.3" + "@sentry/minimal" "6.19.3" + "@sentry/types" "6.19.3" + "@sentry/utils" "6.19.3" + tslib "^1.9.3" + "@sentry/types@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== -"@sentry/types@6.13.3": - version "6.13.3" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.13.3.tgz#63ad5b6735b0dfd90b3a256a9f8e77b93f0f66b2" - integrity sha512-Vrz5CdhaTRSvCQjSyIFIaV9PodjAVFkzJkTRxyY7P77RcegMsRSsG1yzlvCtA99zG9+e6MfoJOgbOCwuZids5A== - -"@sentry/types@6.16.1": - version "6.16.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.16.1.tgz#4917607115b30315757c2cf84f80bac5100b8ac0" - integrity sha512-Wh354g30UsJ5kYJbercektGX4ZMc9MHU++1NjeN2bTMnbofEcpUDWIiKeulZEY65IC1iU+1zRQQgtYO+/hgCUQ== - "@sentry/types@6.17.7": version "6.17.7" resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.7.tgz#61946a3f6532b8f21251b264f173b02f9ea2458e" @@ -4991,6 +4911,11 @@ resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.1.tgz#684a231f8fe10c9cf14f9552f5da0a4492e6fdbc" integrity sha512-ovmNYdqD2MKLmru4calxetX1xjJdYim+HEI/GzwvVUYshsaXRq4EiQ17h3DAy90MV7JH279PmMoPGDTOpufq+Q== +"@sentry/types@6.19.3": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.3.tgz#94b19da68d4d23561efb1014f72968bcea85cd0c" + integrity sha512-jHhqxp8MIWSfOc3krorirTGKTEaSFO6XrAvi+2AZhr6gvOChwOgzgrN2ZqesJcZmgCsqWV21u3usSwYeRrjOJA== + "@sentry/utils@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" @@ -4999,22 +4924,6 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@sentry/utils@6.13.3": - version "6.13.3" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.13.3.tgz#188754d40afe693c3fcae410f9322531588a9926" - integrity sha512-zYFuFH3MaYtBZTeJ4Yajg7pDf0pM3MWs3+9k5my9Fd+eqNcl7dYQYJbT9gyC0HXK1QI4CAMNNlHNl4YXhF91ag== - dependencies: - "@sentry/types" "6.13.3" - tslib "^1.9.3" - -"@sentry/utils@6.16.1": - version "6.16.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.16.1.tgz#1b9e14c2831b6e8b816f7021b9876133bf2be008" - integrity sha512-7ngq/i4R8JZitJo9Sl8PDnjSbDehOxgr1vsoMmerIsyRZ651C/8B+jVkMhaAPgSdyJ0AlE3O7DKKTP1FXFw9qw== - dependencies: - "@sentry/types" "6.16.1" - tslib "^1.9.3" - "@sentry/utils@6.17.7": version "6.17.7" resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.7.tgz#0574bf914cc129b5e47041b75bb34dfbe0decbba" @@ -5031,6 +4940,14 @@ "@sentry/types" "6.19.1" tslib "^1.9.3" +"@sentry/utils@6.19.3": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.3.tgz#0c3a3f0b86c12e3b079e56e37a44e62a1226043d" + integrity sha512-GdC9B/FK7qd0zItY43135bYbhuVSawE18bIrQDNuno8gTpDJ5OgShpTN9zR53AmMh16/lwKNnV3ZZjlpKcxuNw== + dependencies: + "@sentry/types" "6.19.3" + tslib "^1.9.3" + "@sentry/webpack-plugin@1.18.5": version "1.18.5" resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-1.18.5.tgz#aaff79d8e05b8d803654490324252406c976b1cd" @@ -14914,12 +14831,12 @@ node-domexception@1.0.0: resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== -node-fetch@2.6.1, node-fetch@^2.3.0, node-fetch@^2.6.1: +node-fetch@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -node-fetch@2.6.7, node-fetch@^2.6.7: +node-fetch@2.6.7, node-fetch@^2.3.0, node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== From b467b6ea63b7d3a7709dbfd7577670df6cad6f63 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 30 Mar 2022 20:04:16 -0700 Subject: [PATCH 06/89] Show error toast when email is not created --- packages/web/pages/settings/emails.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/web/pages/settings/emails.tsx b/packages/web/pages/settings/emails.tsx index 7b26da7b7..1695f6670 100644 --- a/packages/web/pages/settings/emails.tsx +++ b/packages/web/pages/settings/emails.tsx @@ -22,7 +22,7 @@ import { toast, Toaster } from 'react-hot-toast' import { useCallback } from 'react' import { StyledText } from '../../components/elements/StyledText' import { applyStoredTheme } from '../../lib/themeUpdater' -import { showSuccessToast } from '../../lib/toastHelpers' +import { showErrorToast, showSuccessToast } from '../../lib/toastHelpers' import Link from 'next/link' enum TextType { @@ -185,9 +185,15 @@ export default function EmailsPage(): JSX.Element { applyStoredTheme(false) async function createEmail(): Promise { - showSuccessToast('Email Created') - await createNewsletterEmailMutation() - revalidate() + try { + const email = await createNewsletterEmailMutation() + if (email) { + showSuccessToast('Email Created') + revalidate() + return + } + } catch { } + showErrorToast('Error Creating Email') } async function deleteEmail(id: string): Promise { await deleteNewsletterEmailMutation(id) From 604194299a98b4d68fb3ead025ee8db261373cea Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 30 Mar 2022 20:13:06 -0700 Subject: [PATCH 07/89] Parse response type for newsletter creation --- .../mutations/createNewsletterEmailMutation.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/web/lib/networking/mutations/createNewsletterEmailMutation.ts b/packages/web/lib/networking/mutations/createNewsletterEmailMutation.ts index b11cd708c..e56d58427 100644 --- a/packages/web/lib/networking/mutations/createNewsletterEmailMutation.ts +++ b/packages/web/lib/networking/mutations/createNewsletterEmailMutation.ts @@ -1,5 +1,15 @@ import { gql } from 'graphql-request' import { gqlFetcher } from '../networkHelpers' +import { NewsletterEmail } from '../queries/useGetNewsletterEmailsQuery' + +type CreateNewsletterEmailResult = { + createNewsletterEmail: CreateNewsletterEmail + errorCodes?: unknown[] +} + +type CreateNewsletterEmail = { + newsletterEmail: NewsletterEmail +} export async function createNewsletterEmailMutation(): Promise { const mutation = gql` @@ -19,9 +29,9 @@ export async function createNewsletterEmailMutation(): Promise Date: Wed, 30 Mar 2022 20:16:29 -0700 Subject: [PATCH 08/89] Error responses when deleting emails --- .../deleteNewsletterEmailMutation.ts | 15 +++++++++--- packages/web/pages/settings/emails.tsx | 23 +++++++++++-------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/packages/web/lib/networking/mutations/deleteNewsletterEmailMutation.ts b/packages/web/lib/networking/mutations/deleteNewsletterEmailMutation.ts index 3a4e51e1a..e54afdd65 100644 --- a/packages/web/lib/networking/mutations/deleteNewsletterEmailMutation.ts +++ b/packages/web/lib/networking/mutations/deleteNewsletterEmailMutation.ts @@ -1,5 +1,15 @@ import { gql } from 'graphql-request' import { gqlFetcher } from '../networkHelpers' +import { NewsletterEmail } from '../queries/useGetNewsletterEmailsQuery' + +type DeleteNewsletterEmailResult = { + deleteNewsletterEmail: CreateNewsletterEmail + errorCodes?: unknown[] +} + +type CreateNewsletterEmail = { + newsletterEmail: NewsletterEmail +} export async function deleteNewsletterEmailMutation( newsletterEmailId: string @@ -21,9 +31,8 @@ export async function deleteNewsletterEmailMutation( ` try { - const data = await gqlFetcher(mutation, { newsletterEmailId }) - console.log('delete email', data) - return 'data' + const data = await gqlFetcher(mutation, { newsletterEmailId }) as DeleteNewsletterEmailResult + return data.errorCodes ? undefined : data.deleteNewsletterEmail.newsletterEmail.id } catch (error) { console.log('deleteNewsletterEmailMutation error', error) return undefined diff --git a/packages/web/pages/settings/emails.tsx b/packages/web/pages/settings/emails.tsx index 1695f6670..f3901e4c2 100644 --- a/packages/web/pages/settings/emails.tsx +++ b/packages/web/pages/settings/emails.tsx @@ -185,18 +185,21 @@ export default function EmailsPage(): JSX.Element { applyStoredTheme(false) async function createEmail(): Promise { - try { - const email = await createNewsletterEmailMutation() - if (email) { - showSuccessToast('Email Created') - revalidate() - return - } - } catch { } - showErrorToast('Error Creating Email') + const email = await createNewsletterEmailMutation() + if (!email) { + showErrorToast('Error Creating Email') + return + } + showSuccessToast('Email Created') + revalidate() } + async function deleteEmail(id: string): Promise { - await deleteNewsletterEmailMutation(id) + const result = await deleteNewsletterEmailMutation(id) + if (!result) { + showErrorToast('Error Deleting Email') + return + } revalidate() showSuccessToast('Email Deleted') } From b86dbed90ce246e34dffdf3fc1bdf5c5e04a5f1b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 31 Mar 2022 06:46:41 +0000 Subject: [PATCH 09/89] Bump @google-cloud/logging-winston from 4.1.2 to 4.2.2 Bumps [@google-cloud/logging-winston](https://github.com/googleapis/nodejs-logging-winston) from 4.1.2 to 4.2.2. - [Release notes](https://github.com/googleapis/nodejs-logging-winston/releases) - [Changelog](https://github.com/googleapis/nodejs-logging-winston/blob/main/CHANGELOG.md) - [Commits](https://github.com/googleapis/nodejs-logging-winston/compare/v4.1.2...v4.2.2) --- updated-dependencies: - dependency-name: "@google-cloud/logging-winston" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index f53b5f2ca..c5614ca6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2085,9 +2085,9 @@ semver "^7.3.5" "@google-cloud/logging-winston@^4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@google-cloud/logging-winston/-/logging-winston-4.1.2.tgz#e49c7119629fb0c73c7b14b079acdc95ac2dbbb6" - integrity sha512-jyKkbNbRyxUXWnyygfP9o9IiWERrw4bxOCWhTU+Js0ZpCXiCOCUvVV2zry/THJEi+Gg+I6tmQlz7YIcI2UsK1A== + version "4.2.2" + resolved "https://registry.yarnpkg.com/@google-cloud/logging-winston/-/logging-winston-4.2.2.tgz#372b5c17a3ab00a9628c5ae4924f564829c0b3bb" + integrity sha512-KUg1VIrUjPyK1+mWNrKjcjCBoMONZSK0qYbGb41WYnhPAECKvjeWDXumO/Zwr66qa7ktvQDnFKRk7ASVmUPWrg== dependencies: "@google-cloud/logging" "^9.6.9" google-auth-library "^7.0.0" From 0eab87b001cb6c8916401f0c2b12c5b2fa7aa840 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 31 Mar 2022 11:21:41 -0700 Subject: [PATCH 10/89] Pull ul list out of newsletter blurb next/react doesnt want child elements of the paragraphs --- packages/web/pages/help/newsletters.tsx | 35 +++++++++++-------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/packages/web/pages/help/newsletters.tsx b/packages/web/pages/help/newsletters.tsx index d41b395e3..337fd7d5e 100644 --- a/packages/web/pages/help/newsletters.tsx +++ b/packages/web/pages/help/newsletters.tsx @@ -37,16 +37,14 @@ export default function Newsletters(): JSX.Element { >

Read Newsletters in Omnivore


-

- Currently Omnivore supports newsletters from the following providers. -

- If there is a newsletter you would like to read in Omnivore, please let us know. -

- +

Currently Omnivore supports newsletters from the following providers.

+ +

If there is a newsletter you would like to read in Omnivore, please let us know.

+

Omnivore Email Addresses

Omnivore allows you to create unique email addresses for subscribing to newsletters. @@ -60,12 +58,16 @@ export default function Newsletters(): JSX.Element {

There are multiple ways to have newsletters added directly to your Omnivore library:

- {/*

Notifications

-

If you are a registered iOS user and have granted push notification permission to Omnivore, you will be sent a notification when a newsletter is added to your library. Otherwise, you will be notified via your registered email address.

*/} +

Updating your account email

+

+ If you want all your substack newsletters sent to Omnivore, you can login and change the + address on your account page in Substack. +

Subscribing Directly

Create your first email address by clicking the Create New Email button on @@ -80,11 +82,6 @@ export default function Newsletters(): JSX.Element { /> -

- If you want all your substack newsletters sent to Omnivore, you can login and change the - address on your account page in Substack. -

-

Create a Forwarding Rule

If you are a Gmail user you can create a forwarding rule to send email from your regular account to your Omnivore email address. This is useful if you have an existing paid newsletter subscription. For free newsletters we recommend subscribing directly to the newsletter with your Omnivore email address.

From e3c0c6e11af680e47b3220379b90f9eeab77f11d Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 31 Mar 2022 11:32:09 -0700 Subject: [PATCH 11/89] Improve formatting --- packages/web/pages/help/newsletters.tsx | 31 ++++++++++++++----------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/packages/web/pages/help/newsletters.tsx b/packages/web/pages/help/newsletters.tsx index 337fd7d5e..d1abf4954 100644 --- a/packages/web/pages/help/newsletters.tsx +++ b/packages/web/pages/help/newsletters.tsx @@ -37,24 +37,27 @@ export default function Newsletters(): JSX.Element { >

Read Newsletters in Omnivore


-

Currently Omnivore supports newsletters from the following providers.

+

Omnivore supports newsletters from the following providers:

If there is a newsletter you would like to read in Omnivore, please let us know.

Omnivore Email Addresses

- Omnivore allows you to create unique email addresses for subscribing to newsletters. - You can reuse one address for all your newsletters, or you can create a unique address - for each. + Omnivore allows you to create unique email addresses for subscribing to newsletters. + You can reuse one address for all your newsletters, or you can create a unique address + for each.

- An Omnivore email address will receive email, detect whether the email is a newsletter, - and add the newsletter content to your library. If the email does not appear to be a newsletter, - it will be forwarded to the email address you used when you registered for Omnivore.

+ An Omnivore email address will receive email, detect whether the email is a newsletter, + and add the newsletter content to your library. If the email does not appear to be a newsletter, + it will be forwarded to the email address you used when you registered for Omnivore. +

There are multiple ways to have newsletters added directly to your Omnivore library: