diff --git a/packages/api/package.json b/packages/api/package.json index 497dafad5..2133a2dd7 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -56,7 +56,7 @@ "dotenv": "^8.2.0", "elastic-ts": "^0.9.0", "express": "^4.17.1", - "express-http-context": "^1.2.4", + "express-http-context2": "^1.0.0", "express-rate-limit": "^6.3.0", "firebase-admin": "^11.5.0", "googleapis": "^105.0.0", diff --git a/packages/api/src/server.ts b/packages/api/src/server.ts index deccfade0..58044982a 100755 --- a/packages/api/src/server.ts +++ b/packages/api/src/server.ts @@ -2,54 +2,54 @@ /* eslint-disable @typescript-eslint/restrict-template-expressions */ /* eslint-disable @typescript-eslint/require-await */ /* eslint-disable @typescript-eslint/no-misused-promises */ -import { buildLogger, buildLoggerTransport } from './utils/logger' +import * as lw from '@google-cloud/logging-winston' +import * as Sentry from '@sentry/node' +import { ApolloServer } from 'apollo-server-express' import { json, urlencoded } from 'body-parser' import cookieParser from 'cookie-parser' import express, { Express } from 'express' +import * as httpContext from 'express-http-context2' +import rateLimit from 'express-rate-limit' import { createServer, Server } from 'http' import { Knex } from 'knex' -import { env } from './env' -import * as Sentry from '@sentry/node' -import * as lw from '@google-cloud/logging-winston' -import { config, loggers } from 'winston' -import { sentryConfig } from './sentry' -import { makeApolloServer } from './apollo' -import { authRouter } from './routers/auth/auth_router' -import { pageRouter } from './routers/page_router' -import { articleRouter } from './routers/article_router' -import { mobileAuthRouter } from './routers/auth/mobile/mobile_auth_router' -import { contentServiceRouter } from './routers/svc/content' -import { localDebugRouter } from './routers/local_debug_router' import { DataSource } from 'typeorm' import { SnakeNamingStrategy } from 'typeorm-naming-strategies' -import { linkServiceRouter } from './routers/svc/links' -import UserModel from './datalayer/user' +import { config, loggers } from 'winston' +import { makeApolloServer } from './apollo' import ArticleModel from './datalayer/article' +import ArticleSavingRequestModel from './datalayer/article_saving_request' +import HighlightModel from './datalayer/highlight' import UserArticleModel from './datalayer/links' +import ReactionModel from './datalayer/reaction' +import ReminderModel from './datalayer/reminders' +import UploadFileDataModel from './datalayer/upload_files' +import UserModel from './datalayer/user' import UserFriendModel from './datalayer/user_friends' import UserPersonalizationModel from './datalayer/user_personalization' -import ArticleSavingRequestModel from './datalayer/article_saving_request' -import UploadFileDataModel from './datalayer/upload_files' -import HighlightModel from './datalayer/highlight' -import ReactionModel from './datalayer/reaction' -import { DataModels } from './resolvers/types' -import { newsletterServiceRouter } from './routers/svc/newsletters' -import { emailsServiceRouter } from './routers/svc/emails' -import ReminderModel from './datalayer/reminders' -import { remindersServiceRouter } from './routers/svc/reminders' -import { ApolloServer } from 'apollo-server-express' -import { pdfAttachmentsRouter } from './routers/svc/pdf_attachments' -import { corsConfig } from './utils/corsConfig' import { initElasticsearch } from './elastic' -import { uploadServiceRouter } from './routers/svc/upload' -import rateLimit from 'express-rate-limit' -import { webhooksServiceRouter } from './routers/svc/webhooks' -import { integrationsServiceRouter } from './routers/svc/integrations' -import { textToSpeechRouter } from './routers/text_to_speech' -import * as httpContext from 'express-http-context' -import { notificationRouter } from './routers/notification_router' -import { userRouter } from './routers/user_router' +import { env } from './env' +import { DataModels } from './resolvers/types' +import { articleRouter } from './routers/article_router' +import { authRouter } from './routers/auth/auth_router' +import { mobileAuthRouter } from './routers/auth/mobile/mobile_auth_router' import { integrationRouter } from './routers/integration_router' +import { localDebugRouter } from './routers/local_debug_router' +import { notificationRouter } from './routers/notification_router' +import { pageRouter } from './routers/page_router' +import { contentServiceRouter } from './routers/svc/content' +import { emailsServiceRouter } from './routers/svc/emails' +import { integrationsServiceRouter } from './routers/svc/integrations' +import { linkServiceRouter } from './routers/svc/links' +import { newsletterServiceRouter } from './routers/svc/newsletters' +import { pdfAttachmentsRouter } from './routers/svc/pdf_attachments' +import { remindersServiceRouter } from './routers/svc/reminders' +import { uploadServiceRouter } from './routers/svc/upload' +import { webhooksServiceRouter } from './routers/svc/webhooks' +import { textToSpeechRouter } from './routers/text_to_speech' +import { userRouter } from './routers/user_router' +import { sentryConfig } from './sentry' +import { corsConfig } from './utils/corsConfig' +import { buildLogger, buildLoggerTransport } from './utils/logger' const PORT = process.env.PORT || 4000 diff --git a/packages/api/src/services/popular_reads.ts b/packages/api/src/services/popular_reads.ts index 499dd019f..e5086d120 100644 --- a/packages/api/src/services/popular_reads.ts +++ b/packages/api/src/services/popular_reads.ts @@ -1,11 +1,11 @@ -import { createPage } from '../elastic/pages' +import * as httpContext from 'express-http-context2' +import { readFileSync } from 'fs' +import path from 'path' import { createPubSubClient } from '../datalayer/pubsub' +import { createPage } from '../elastic/pages' import { ArticleSavingRequestStatus, Page, PageContext } from '../elastic/types' import { PageType } from '../generated/graphql' import { generateSlug, stringToHash } from '../utils/helpers' -import { readFileSync } from 'fs' -import path from 'path' -import * as httpContext from 'express-http-context' type PopularRead = { url: string @@ -124,7 +124,7 @@ export const addPopularReadsForNewUser = async ( const defaultReads = ['omnivore_organize', 'power_read_it_later'] // get client from request context - const client = httpContext.get('client') as string | undefined + const client = httpContext.get('client') switch (client) { case 'web': diff --git a/yarn.lock b/yarn.lock index 7b799df7c..072f908ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8085,13 +8085,6 @@ "@types/filesystem" "*" "@types/har-format" "*" -"@types/cls-hooked@^4.2.1": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@types/cls-hooked/-/cls-hooked-4.3.3.tgz#c09e2f8dc62198522eaa18a5b6b873053154bd00" - integrity sha512-gNstDTb/ty5h6gJd6YpSPgsLX9LmRpaKJqGFp7MRlYxhwp4vXXKlJ9+bt1TZ9KbVNXE+Mbxy2AYXcpY21DDtJw== - dependencies: - "@types/node" "*" - "@types/color-convert@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/color-convert/-/color-convert-2.0.0.tgz#8f5ee6b9e863dcbee5703f5a517ffb13d3ea4e22" @@ -8233,7 +8226,7 @@ dependencies: "@types/express" "*" -"@types/express@*", "@types/express@^4.16.0", "@types/express@^4.17.13", "@types/express@^4.17.14", "@types/express@^4.17.2", "@types/express@^4.17.7": +"@types/express@*", "@types/express@^4.17.13", "@types/express@^4.17.14", "@types/express@^4.17.2", "@types/express@^4.17.7": version "4.17.17" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== @@ -10314,13 +10307,6 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -async-hook-jl@^1.7.6: - version "1.7.6" - resolved "https://registry.yarnpkg.com/async-hook-jl/-/async-hook-jl-1.7.6.tgz#4fd25c2f864dbaf279c610d73bf97b1b28595e68" - integrity sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg== - dependencies: - stack-chain "^1.3.7" - async-retry@^1.2.1, async-retry@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" @@ -11838,15 +11824,6 @@ cloudevents@^6.0.0: util "^0.12.4" uuid "^8.3.2" -cls-hooked@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/cls-hooked/-/cls-hooked-4.2.2.tgz#ad2e9a4092680cdaffeb2d3551da0e225eae1908" - integrity sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw== - dependencies: - async-hook-jl "^1.7.6" - emitter-listener "^1.0.1" - semver "^5.4.1" - clsx@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" @@ -13628,13 +13605,6 @@ elliptic@^6.5.3: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emitter-listener@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8" - integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ== - dependencies: - shimmer "^1.2.0" - emittery@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" @@ -14422,14 +14392,10 @@ expect@^27.5.1: jest-matcher-utils "^27.5.1" jest-message-util "^27.5.1" -express-http-context@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/express-http-context/-/express-http-context-1.2.4.tgz#49769d0e260836278996e728d9a3e7f3735f0531" - integrity sha512-jPpBbF1MWWdRcUU1rxsX0CPnA8ueEj8xgWvpRGHoXWGI4l5KqhPY4Bq+Gt6s2IhqHQQ0g0wIvJ3jFfbUuJJycQ== - dependencies: - "@types/cls-hooked" "^4.2.1" - "@types/express" "^4.16.0" - cls-hooked "^4.2.2" +express-http-context2@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/express-http-context2/-/express-http-context2-1.0.0.tgz#58cd9fb0d233739e0dcd7aabb766d1dc74522d77" + integrity sha512-xdukoNNpWcuMn5ZJcjDe/tA+2A96rQ1MyAB/oWUU7qP15Tkz3txQyFsw/QG8YgRzTJ1sNAA8Bdq0o5b/1Y4zLA== express-rate-limit@^6.3.0: version "6.3.0" @@ -25106,7 +25072,7 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shimmer@^1.2.0, shimmer@^1.2.1: +shimmer@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== @@ -25558,11 +25524,6 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== -stack-chain@^1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-1.3.7.tgz#d192c9ff4ea6a22c94c4dd459171e3f00cea1285" - integrity sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug== - stack-trace@0.0.x: version "0.0.10" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"