diff --git a/package.json b/package.json index aeb14dc71..fba934940 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "@sentry/node": "^6.3.1", "@sentry/react": "^6.3.1", "@sentry/tracing": "^6.3.1", + "@theo.gravity/datadog-apm": "2.1.0", "@tippy.js/react": "^2.2.2", "@tommoor/remove-markdown": "^0.3.2", "autotrack": "^2.4.1", @@ -76,7 +77,6 @@ "crypto-js": "^4.1.1", "datadog-metrics": "^0.9.3", "date-fns": "^2.25.0", - "dd-trace": "^0.32.2", "dotenv": "^4.0.0", "emoji-regex": "^10.0.0", "es6-error": "^4.1.1", diff --git a/server/commands/accountProvisioner.ts b/server/commands/accountProvisioner.ts index 6b94a1e6c..dcb8b607f 100644 --- a/server/commands/accountProvisioner.ts +++ b/server/commands/accountProvisioner.ts @@ -5,6 +5,7 @@ import { EmailAuthenticationRequiredError, AuthenticationProviderDisabledError, } from "@server/errors"; +import { APM } from "@server/logging/tracing"; import mailer from "@server/mailer"; import { Collection, Team, User } from "@server/models"; import teamCreator from "./teamCreator"; @@ -43,7 +44,7 @@ export type AccountProvisionerResult = { isNewUser: boolean; }; -export default async function accountProvisioner({ +async function accountProvisioner({ ip, user: userParams, team: teamParams, @@ -142,3 +143,5 @@ export default async function accountProvisioner({ throw err; } } + +export default APM.traceFunction({})(accountProvisioner); diff --git a/server/commands/collectionExporter.ts b/server/commands/collectionExporter.ts index f474ea12c..9b49448b2 100644 --- a/server/commands/collectionExporter.ts +++ b/server/commands/collectionExporter.ts @@ -1,7 +1,8 @@ +import { APM } from "@server/logging/tracing"; import { Collection, Event, Team, User, FileOperation } from "@server/models"; import { getAWSKeyForFileOp } from "@server/utils/s3"; -export default async function collectionExporter({ +async function collectionExporter({ collection, team, user, @@ -43,3 +44,5 @@ export default async function collectionExporter({ return fileOperation; } + +export default APM.traceFunction({})(collectionExporter); diff --git a/server/commands/collectionImporter.ts b/server/commands/collectionImporter.ts index 887b2ef28..897d16371 100644 --- a/server/commands/collectionImporter.ts +++ b/server/commands/collectionImporter.ts @@ -6,6 +6,7 @@ import invariant from "invariant"; import { values, keys } from "lodash"; import { v4 as uuidv4 } from "uuid"; import Logger from "@server/logging/logger"; +import { APM } from "@server/logging/tracing"; import { Attachment, Event, Document, Collection, User } from "@server/models"; import { parseOutlineExport, Item } from "@server/utils/zip"; import { FileImportError } from "../errors"; @@ -17,7 +18,7 @@ type FileWithPath = File & { path: string; }; -export default async function collectionImporter({ +async function collectionImporter({ file, type, user, @@ -198,3 +199,5 @@ export default async function collectionImporter({ attachments: values(attachments), }; } + +export default APM.traceFunction({})(collectionImporter); diff --git a/server/commands/documentImporter.ts b/server/commands/documentImporter.ts index 95e547213..d1fae3309 100644 --- a/server/commands/documentImporter.ts +++ b/server/commands/documentImporter.ts @@ -8,6 +8,7 @@ import TurndownService from "turndown"; import utf8 from "utf8"; import { MAX_TITLE_LENGTH } from "@shared/constants"; import parseTitle from "@shared/utils/parseTitle"; +import { APM } from "@server/logging/tracing"; import { User } from "@server/models"; import dataURItoBuffer from "@server/utils/dataURItoBuffer"; import { deserializeFilename } from "@server/utils/fs"; @@ -141,7 +142,7 @@ async function confluenceToMarkdown(file): Promise { return html.replace(/
/g, " \\n "); } -export default async function documentImporter({ +async function documentImporter({ file, user, ip, @@ -212,3 +213,5 @@ export default async function documentImporter({ title, }; } + +export default APM.traceFunction({})(documentImporter); diff --git a/server/commands/documentMover.ts b/server/commands/documentMover.ts index bad89d59d..1c4ba0f9a 100644 --- a/server/commands/documentMover.ts +++ b/server/commands/documentMover.ts @@ -1,6 +1,7 @@ import invariant from "invariant"; import { Transaction } from "sequelize"; import { sequelize } from "@server/database/sequelize"; +import { APM } from "@server/logging/tracing"; import { User, Document, @@ -62,7 +63,7 @@ type Result = { collectionChanged: boolean; }; -export default async function documentMover({ +async function documentMover({ user, document, collectionId, @@ -238,3 +239,5 @@ export default async function documentMover({ // we need to send all updated models back to the client return result; } + +export default APM.traceFunction({})(documentMover); diff --git a/server/commands/teamCreator.ts b/server/commands/teamCreator.ts index 87fbf449c..766ed5620 100644 --- a/server/commands/teamCreator.ts +++ b/server/commands/teamCreator.ts @@ -1,5 +1,6 @@ import invariant from "invariant"; import Logger from "@server/logging/logger"; +import { APM } from "@server/logging/tracing"; import { Team, AuthenticationProvider } from "@server/models"; import { isDomainAllowed } from "@server/utils/authentication"; import { generateAvatarUrl } from "@server/utils/avatars"; @@ -22,7 +23,7 @@ type Props = { }; }; -export default async function teamCreator({ +async function teamCreator({ name, domain, subdomain, @@ -125,3 +126,5 @@ export default async function teamCreator({ isNewTeam: true, }; } + +export default APM.traceFunction({})(teamCreator); diff --git a/server/commands/teamPermanentDeleter.ts b/server/commands/teamPermanentDeleter.ts index d67f2ba3e..87c0c1e6a 100644 --- a/server/commands/teamPermanentDeleter.ts +++ b/server/commands/teamPermanentDeleter.ts @@ -1,6 +1,7 @@ import { Transaction } from "sequelize"; import { sequelize } from "@server/database/sequelize"; import Logger from "@server/logging/logger"; +import { APM } from "@server/logging/tracing"; import { ApiKey, Attachment, @@ -20,7 +21,7 @@ import { Share, } from "@server/models"; -export default async function teamPermanentDeleter(team: Team) { +async function teamPermanentDeleter(team: Team) { if (!team.deletedAt) { throw new Error( `Cannot permanently delete ${team.id} team. Please delete it and try again.` @@ -203,3 +204,5 @@ export default async function teamPermanentDeleter(team: Team) { throw err; } } + +export default APM.traceFunction({})(teamPermanentDeleter); diff --git a/server/index.ts b/server/index.ts index 4e679b365..0cea30bf2 100644 --- a/server/index.ts +++ b/server/index.ts @@ -1,7 +1,7 @@ /* eslint-disable import/order */ import env from "./env"; -import "./tracing"; // must come before importing any instrumented module +import "./logging/tracing"; // must come before importing any instrumented module import http from "http"; import https from "https"; diff --git a/server/logging/tracing.ts b/server/logging/tracing.ts new file mode 100644 index 000000000..43273c3fb --- /dev/null +++ b/server/logging/tracing.ts @@ -0,0 +1,20 @@ +import { init, tracer } from "@theo.gravity/datadog-apm"; + +export * as APM from "@theo.gravity/datadog-apm"; + +// If the DataDog agent is installed and the DD_API_KEY environment variable is +// in the environment then we can safely attempt to start the DD tracer +if (process.env.DD_API_KEY) { + init( + { + // SOURCE_COMMIT is used by Docker Hub + // SOURCE_VERSION is used by Heroku + version: process.env.SOURCE_COMMIT || process.env.SOURCE_VERSION, + }, + { + useMock: process.env.NODE_ENV === "test", + } + ); +} + +export default tracer; diff --git a/server/middlewares/authentication.ts b/server/middlewares/authentication.ts index c9c02270c..c998d5395 100644 --- a/server/middlewares/authentication.ts +++ b/server/middlewares/authentication.ts @@ -1,6 +1,6 @@ import { Next } from "koa"; +import tracer, { APM } from "@server/logging/tracing"; import { User, Team, ApiKey } from "@server/models"; -import tracer from "@server/tracing"; import { getUserForJWT } from "@server/utils/jwt"; import { AuthenticationError, UserSuspendedError } from "../errors"; import { ContextWithState } from "../types"; @@ -100,12 +100,14 @@ export default function auth( ctx.state.user = user; if (tracer) { - const span = tracer.scope().active(); - if (span !== null) { - span.setTag("request.userId", user.id); - span.setTag("request.teamId", user.teamId); - span.setTag("request.authType", ctx.state.authType); - } + APM.addTags( + { + "request.userId": user.id, + "request.teamId": user.teamId, + "request.authType": ctx.state.authType, + }, + APM.getRootSpanFromRequestContext(ctx) + ); } } diff --git a/server/tracing.ts b/server/tracing.ts deleted file mode 100644 index 74c4f8dc7..000000000 --- a/server/tracing.ts +++ /dev/null @@ -1,13 +0,0 @@ -import tracer from "dd-trace"; - -// If the DataDog agent is installed and the DD_API_KEY environment variable is -// in the environment then we can safely attempt to start the DD tracer -if (process.env.DD_API_KEY) { - tracer.init({ - // SOURCE_COMMIT is used by Docker Hub - // SOURCE_VERSION is used by Heroku - version: process.env.SOURCE_COMMIT || process.env.SOURCE_VERSION, - }); -} - -export default tracer; diff --git a/yarn.lock b/yarn.lock index 7bb7b8c28..e46f9a6fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11,11 +11,6 @@ jsonpointer "^4.1.0" leven "^3.1.0" -"@assemblyscript/loader@^0.10.1": - version "0.10.1" - resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.10.1.tgz#70e45678f06c72fa2e350e8553ec4a4d72b92e06" - integrity sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg== - "@babel/cli@^7.10.5": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.12.1.tgz#e08a0b1cb6fcd4b9eb6a606ba5602c5c0fe24a0c" @@ -1133,6 +1128,38 @@ enabled "2.0.x" kuler "^2.0.0" +"@datadog/native-metrics@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@datadog/native-metrics/-/native-metrics-1.1.0.tgz#ef860a4cbea81b6e1559b280f5f1f3cd2cc22585" + integrity sha512-OSrhoo8U/JB/FltvAp54cgMHCBWEriF/D/ZboBH4Pn7UY/Zu8dkzB6eAWQFJIxQlHjYrAEuNgZPBkaHhS3e0KQ== + dependencies: + nan "^2.14.2" + node-gyp-build "^3.9.0" + +"@datadog/pprof@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@datadog/pprof/-/pprof-0.3.0.tgz#aa6f4611844e2521633f34b1649778ceec0493bb" + integrity sha512-RskYpLD2mWdvUk2OU9p3gynx8QxHtfPdRPWs3vqlM+PMf+wstibcYMW7auNY4s3gVA1mT7HiBjW7j0m37rOHOQ== + dependencies: + delay "^5.0.0" + findit2 "^2.2.3" + nan "^2.14.0" + node-gyp-build "^3.9.0" + p-limit "^3.0.0" + pify "^5.0.0" + protobufjs "~6.11.0" + rimraf "^3.0.2" + semver "^7.3.5" + source-map "^0.7.3" + split "^1.0.1" + +"@datadog/sketches-js@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@datadog/sketches-js/-/sketches-js-1.0.4.tgz#6213c26e3459fed80b075d80ffff551979fb0e6a" + integrity sha512-9S5fdz448dLfGw4jSH1A4GZpkLWBufdsJu4PeevEjDvkauEmE175xBiBLfYHQEdKe7lEVNB4IRtUZqY16QRVUw== + dependencies: + protobufjs "^6.10.2" + "@dnd-kit/accessibility@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@dnd-kit/accessibility/-/accessibility-3.0.0.tgz#b56e3750414fd907b7d6972b3116aa8f96d07fde" @@ -2523,6 +2550,13 @@ dependencies: defer-to-connect "^1.0.1" +"@theo.gravity/datadog-apm@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@theo.gravity/datadog-apm/-/datadog-apm-2.1.0.tgz#40e94c5d90657d3c73a189b3b0b896a75c8a87b7" + integrity sha512-LiDN4f4kvPtrDK553zGexN5UlQ99d7rKv1yTM1/FcFA0fOoD+QqgVmTF/6Qffb3mamQc3jdkW9FX+v4LZKan8A== + dependencies: + dd-trace "^1.6.0" + "@tippy.js/react@^2.2.2": version "2.2.3" resolved "https://registry.yarnpkg.com/@tippy.js/react/-/react-2.2.3.tgz#2ffb0af6693055be7db4b329b2d3cc7f2356f68e" @@ -2989,26 +3023,16 @@ resolved "https://registry.yarnpkg.com/@types/natural-sort/-/natural-sort-0.0.21.tgz#5583cfcd250f72e45af8611ef515d4e881f49556" integrity sha512-WYMWhAQLuBym+6qQ2Ojptm6qIACnkkYYs08sj+PVgRCrB6b7k1QpTRk0yMmxhlpPn5MbXcSfd6sHOYlzaokU3w== -"@types/node@*": - version "17.0.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.5.tgz#57ca67ec4e57ad9e4ef5a6bab48a15387a1c83e0" - integrity sha512-w3mrvNXLeDYV1GKTZorGJQivK6XLCoGwpnyJFbJVK/aTBQUxOCaa/GlFAAN3OTDFcb7h5tiFG+YXCO2By+riZw== +"@types/node@*", "@types/node@>=12", "@types/node@>=13.7.0": + version "17.0.21" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644" + integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== "@types/node@15.12.2": version "15.12.2" resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d" integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww== -"@types/node@^10.12.18": - version "10.17.51" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.51.tgz#639538575befbcf3d3861f95c41de8e47124d674" - integrity sha512-KANw+MkL626tq90l++hGelbl67irOJzGhUJk6a1Bt8QHOeh9tztJx+L0AqttraWKinmZn7Qi5lJZJzx45Gq0dg== - -"@types/node@^13.7.0": - version "13.13.41" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.41.tgz#045a4981318d31a581650ce70f340a32c3461198" - integrity sha512-qLT9IvHiXJfdrje9VmsLzun7cQ65obsBTmtU3EOnCSLFOoSHx1hpiRHoBnpdbyFqnzqdUUIv81JcEJQCB8un9g== - "@types/nodemailer@^6.4.4": version "6.4.4" resolved "https://registry.yarnpkg.com/@types/nodemailer/-/nodemailer-6.4.4.tgz#c265f7e7a51df587597b3a49a023acaf0c741f4b" @@ -4481,7 +4505,7 @@ base64-arraybuffer@0.1.4: resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= -base64-js@^1.0.2, base64-js@^1.2.0, base64-js@^1.3.1: +base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -5705,16 +5729,16 @@ crypto-js@^4.1.1: resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== +crypto-randomuuid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-randomuuid/-/crypto-randomuuid-1.0.0.tgz#acf583e5e085e867ae23e107ff70279024f9e9e7" + integrity sha512-/RC5F4l1SCqD/jazwUF6+t34Cd8zTSAGZ7rvvZu1whZUhD2a5MOGKjSGowoGcpj/cbVZk1ZODIooJEQQq3nNAA== + css-box-model@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" @@ -5839,14 +5863,18 @@ date-fns@^2.16.1, date-fns@^2.23.0, date-fns@^2.25.0: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.25.0.tgz#8c5c8f1d958be3809a9a03f4b742eba894fc5680" integrity sha512-ovYRFnTrbGPD4nqaEqescPEv1mNwvt+UTqI3Ay9SzNtey9NZnYu6E2qCcBBgJ6/2VF1zGGygpyTDITqpQQ5e+w== -dd-trace@^0.32.2: - version "0.32.2" - resolved "https://registry.yarnpkg.com/dd-trace/-/dd-trace-0.32.2.tgz#c5844f75f3c15bf88f4992b266def062a254102a" - integrity sha512-BvbCDOvrgn9qcYl+asl+RJL0vI5Gssf8TSwbmjKK4zWP/aQwjZeFd/AMfWfnAjaETnPbN2bYIOT+yjGxlX029g== +dd-trace@^1.6.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/dd-trace/-/dd-trace-1.7.1.tgz#fb3276df4fa29f5b157fa72fa94c8ea156e83aac" + integrity sha512-hRrgJgjP3xF/s4EKxSGzOG+ARkWyRz33dwIwi1gJych7zSE7qnt5VL6LcK1Jou4mfyn+kHUbbb0d7t19YpmZsg== dependencies: - "@types/node" "^10.12.18" + "@datadog/native-metrics" "^1.1.0" + "@datadog/pprof" "^0.3.0" + "@datadog/sketches-js" "^1.0.4" + "@types/node" ">=12" + crypto-randomuuid "^1.0.0" form-data "^3.0.0" - hdr-histogram-js "^2.0.1" + import-in-the-middle "^1.1.2" koalas "^1.0.2" limiter "^1.1.4" lodash.kebabcase "^4.1.1" @@ -5856,18 +5884,13 @@ dd-trace@^0.32.2: methods "^1.1.2" module-details-from-path "^1.0.3" multer "^1.4.2" - nan "^2.12.1" - node-gyp-build "^3.8.0" opentracing ">=0.12.1" path-to-regexp "^0.1.2" performance-now "^2.1.0" - protobufjs "^6.9.0" - require-in-the-middle "^2.2.2" + retry "^0.10.1" semver "^5.5.0" - shimmer "1.2.1" source-map "^0.7.3" source-map-resolve "^0.6.0" - url-parse "^1.4.3" de-indent@^1.0.2: version "1.0.2" @@ -5995,6 +6018,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -7281,6 +7309,11 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +findit2@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/findit2/-/findit2-2.2.3.tgz#58a466697df8a6205cdfdbf395536b8bd777a5f6" + integrity sha1-WKRmaX34piBc39vzlVNri9d3pfY= + findup-sync@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" @@ -7924,15 +7957,6 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" -hdr-histogram-js@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz#ecb1ff2bcb6181c3e93ff4af9472c28c7e97284e" - integrity sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q== - dependencies: - "@assemblyscript/loader" "^0.10.1" - base64-js "^1.2.0" - pako "^1.0.3" - he@^1.1.0, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -8320,6 +8344,13 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-in-the-middle@^1.1.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.2.1.tgz#30d4e98be7329eee0d284943dd0df092cc422b3c" + integrity sha512-KdYqCJbJWBOU9740nr9lrmCDhW7htxY1dHmbP4iUEeCaxupj2fKFhyHixsly2WmxMbRIsxzSWSJMfGNEU7el+w== + dependencies: + module-details-from-path "^1.0.3" + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -10677,7 +10708,7 @@ mz@^2.4.0, mz@^2.6.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.12.1: +nan@^2.12.1, nan@^2.14.0, nan@^2.14.2: version "2.15.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== @@ -10769,7 +10800,7 @@ node-fetch@2.6.7, node-fetch@^2.1.2, node-fetch@^2.6.1, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" -node-gyp-build@^3.8.0: +node-gyp-build@^3.9.0: version "3.9.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-3.9.0.tgz#53a350187dd4d5276750da21605d1cb681d09e25" integrity sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A== @@ -11149,12 +11180,12 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" - integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== +p-limit@^3.0.0, p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - p-try "^2.0.0" + yocto-queue "^0.1.0" p-locate@^2.0.0: version "2.0.0" @@ -11235,7 +11266,7 @@ packet-reader@1.0.0: resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== -pako@^1.0.3, pako@^1.0.5, pako@~1.0.2, pako@~1.0.5: +pako@^1.0.5, pako@~1.0.2, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== @@ -11592,6 +11623,11 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + pirates@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" @@ -11955,10 +11991,10 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= -protobufjs@^6.9.0: - version "6.10.2" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.10.2.tgz#b9cb6bd8ec8f87514592ba3fdfd28e93f33a469b" - integrity sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ== +protobufjs@^6.10.2, protobufjs@~6.11.0: + version "6.11.2" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.2.tgz#de39fabd4ed32beaa08e9bb1e30d08544c1edf8b" + integrity sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -11971,7 +12007,7 @@ protobufjs@^6.9.0: "@protobufjs/pool" "^1.1.0" "@protobufjs/utf8" "^1.1.0" "@types/long" "^4.0.1" - "@types/node" "^13.7.0" + "@types/node" ">=13.7.0" long "^4.0.0" proxy-from-env@^1.1.0: @@ -12083,11 +12119,6 @@ querystring@0.2.0, querystring@^0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -12721,14 +12752,6 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-in-the-middle@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-2.2.2.tgz#1d3124709cf43bf2c1f225082e6d8394e2f9d4f4" - integrity sha512-XxtlrdTCRsr+/8WnWfqz2pFZ0SoUnrOJCFc4gJbUViZ2/3P0+zwWNi4+cV4bPfEJZVAAcxel3j/oCmwnjPvnfA== - dependencies: - module-details-from-path "^1.0.3" - resolve "^1.5.0" - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -12739,11 +12762,6 @@ require-package-name@^2.0.1: resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" integrity sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk= -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - reselect@^4.0.0: version "4.1.4" resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.4.tgz#66df0aff41b6ee0f51e2cc17cfaf2c1995916f32" @@ -12843,6 +12861,11 @@ retry-as-promised@^3.2.0: dependencies: any-promise "^1.3.0" +retry@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -13242,11 +13265,6 @@ 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.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" - integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== - side-channel@^1.0.2, side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -13565,6 +13583,13 @@ split2@^3.1.1: dependencies: readable-stream "^3.0.0" +split@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + sprintf-js@^1.0.3: version "1.1.2" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" @@ -14096,6 +14121,11 @@ through2@~4.0.2: dependencies: readable-stream "3" +through@2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + time-stamp@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.2.0.tgz#917e0a66905688790ec7bbbde04046259af83f57" @@ -14620,14 +14650,6 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" -url-parse@^1.4.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - url@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" @@ -15613,3 +15635,8 @@ ylru@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" integrity sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==