diff --git a/deploy/app/webhooked/base/configmap.yaml b/deploy/app/webhooked/base/configmap.yaml index 07a8b68f..45788497 100644 --- a/deploy/app/webhooked/base/configmap.yaml +++ b/deploy/app/webhooked/base/configmap.yaml @@ -178,5 +178,4 @@ data: envRef: RABBITMQ_DATABASE_URL queueName: webhooks-deliveries contentType: application/json - durable: true - exchange: delayed \ No newline at end of file + durable: true \ No newline at end of file diff --git a/internal/webhooks/serve.go b/internal/webhooks/serve.go index 79ca2db7..5030bf3a 100644 --- a/internal/webhooks/serve.go +++ b/internal/webhooks/serve.go @@ -108,18 +108,33 @@ func (p *processor) Serve(amqpUrl, channel string) error { return nil } +// metadataWebhooked is the structure of the webhook metadata sent by the +// webhooked project formatted following this schema: +type metadataWebhooked struct { + Metadata struct { + // For duoapi webhooks the strcut is the type of the object with additionnal + // fields + duoapi.WebhookMetadata + // SpecName represents the spec name on wehooked configuration. + // Internally usage only. + SpecName string `json:"specName"` + } `json:"metadata"` + //Payload + Payload map[string]interface{} `json:"payload"` +} + // handler is the main function that processes the webhooks. It parses the // webhook metadata and calls the appropriate processor function. // This function is called by the Serve function on each incoming message. func (p *processor) handler(data []byte) error { - md := &duoapi.Webhook{} + md := &metadataWebhooked{} if err := json.Unmarshal(data, &md); err != nil { log.Error().Err(err).Msg("Failed to unmarshal webhook metadata") } - if md == nil || md.Metadata == nil { - log.Error().Str("payload", string(data)).Msg("Webhook metadata is nil") + if md == nil || md.Metadata.SpecName == "" { + log.Error().Str("payload", string(data)).Msg("Webhook metadata is invalid") return ErrInvalidWebhook } log.Debug().Msgf("Received a message(%s.%s): %+v", md.Metadata.Model, md.Metadata.Event, md.Payload) @@ -130,21 +145,10 @@ func (p *processor) handler(data []byte) error { return p.githubHandler(data) } - var err error - switch md.Metadata.Model { - case "location": - err = md.Payload.ProcessWebhook(p.ctx, md.Metadata, &locationProcessor{processor: p}) - case "user": - err = md.Payload.ProcessWebhook(p.ctx, md.Metadata, &userProcessor{processor: p}) - } - if err != nil { - log.Error().Err(err).Str("model", md.Metadata.Model).Str("event", md.Metadata.Event).Msg("Failed to process webhook") - return err - } - - return nil + return p.duoHandler(data) } +// githubHandler is the processor for the github webhooks. func (p *processor) githubHandler(data []byte) error { webhookPayload := &GithubSponsorshipWebhook{} if err := json.Unmarshal(data, &webhookPayload); err != nil { @@ -177,8 +181,7 @@ func (p *processor) githubHandler(data []byte) error { var flagsList = user.FlagsList switch webhookPayload.Action { - case "created": - case "edited": + case "created", "edited": if webhookPayload.Sponsorship.Tier.MonthlyPriceInDollars >= 5 { flagsList = append(flagsList, typesgen.FlagBeta.String(), typesgen.FlagDiscord.String()) } @@ -191,6 +194,28 @@ func (p *processor) githubHandler(data []byte) error { ) } - _, err = p.db.User.UpdateOne(user).SetFlagsList(flagsList).Save(p.ctx) + _, err = p.db.User.UpdateOne(user).SetFlagsList(utils.Uniq(flagsList)).Save(p.ctx) return err } + +// duoHandler is the processor for the duo webhooks. +func (p *processor) duoHandler(data []byte) error { + mdDuo := &duoapi.Webhook{} + if err := json.Unmarshal(data, &mdDuo); err != nil { + log.Error().Err(err).Msg("Failed to unmarshal webhook metadata") + } + + var err error + switch mdDuo.Metadata.Model { + case "location": + err = mdDuo.Payload.ProcessWebhook(p.ctx, mdDuo.Metadata, &locationProcessor{processor: p}) + case "user": + err = mdDuo.Payload.ProcessWebhook(p.ctx, mdDuo.Metadata, &userProcessor{processor: p}) + } + if err != nil { + log.Error().Err(err).Str("model", mdDuo.Metadata.Model).Str("event", mdDuo.Metadata.Event).Msg("Failed to process webhook") + return err + } + + return nil +} diff --git a/pkg/duoapi/webhooks.go b/pkg/duoapi/webhooks.go index 5f7c047b..f085cfcc 100644 --- a/pkg/duoapi/webhooks.go +++ b/pkg/duoapi/webhooks.go @@ -42,9 +42,6 @@ type IWebhookPayload interface { // This informations is sended originally by the 42 API on the Header of the // webhook. type WebhookMetadata struct { - // SpecName represents the spec name on wehooked configuration. - // Internally usage only. - SpecName string `json:"specName"` // Event is the event that triggered the webhook. (Header: X-Event) // Possible values are listed on the interface {Model}WebhookProcessor. Event string `json:"event"` diff --git a/pkg/utils/slice.go b/pkg/utils/slice.go index 6049b026..ecd55737 100644 --- a/pkg/utils/slice.go +++ b/pkg/utils/slice.go @@ -19,3 +19,16 @@ func Contains[T comparable](slice []T, item T) bool { } return false } + +// Uniq returns a new slice with unique items from the given slice +func Uniq[T comparable](slice []T) []T { + var unique []T + for _, element := range slice { + if Contains(unique, element) { + continue + } + + unique = append(unique, element) + } + return unique +} diff --git a/web/ui/package.json b/web/ui/package.json index 38a66087..7401733a 100644 --- a/web/ui/package.json +++ b/web/ui/package.json @@ -30,8 +30,8 @@ "@apollo/react-hooks": "^4.0.0", "@grpc/grpc-js": "^1.6.7", "@headlessui/react": "^1.6.4", - "@sentry/nextjs": "^7.4.1", - "@sentry/tracing": "^7.4.1", + "@sentry/nextjs": "^7.7.0", + "@sentry/tracing": "^7.7.0", "axios": "^0.26.1", "classnames": "^2.3.1", "google-protobuf": "^3.20.1-rc.1", @@ -70,8 +70,8 @@ "@types/google-protobuf": "^3.15.6", "@types/node": "17.0.33", "@types/react": "^18.0.5", - "@typescript-eslint/eslint-plugin": "^5.27.1", - "@typescript-eslint/parser": "^5.23.0", + "@typescript-eslint/eslint-plugin": "^5.30.6", + "@typescript-eslint/parser": "^5.30.6", "autoprefixer": "^10.4.7", "babel-jest": "^28.1.0", "babel-loader": "^8.2.3", diff --git a/web/ui/sentry.client.config.ts b/web/ui/sentry.client.config.ts index ff04cbd7..40f2b718 100644 --- a/web/ui/sentry.client.config.ts +++ b/web/ui/sentry.client.config.ts @@ -13,6 +13,7 @@ if (process.env.NODE_ENV && process.env.NODE_ENV !== 'development') { integrations: [new BrowserTracing()], // Adjust this value in production, or use tracesSampler for greater control tracesSampleRate: process.env.NODE_ENV === 'production' ? 0.2 : 0, + sampleRate: 1, // ... // Note: if you want to override the automatic release value, do not set a // `release` value here - use the environment variable `SENTRY_RELEASE`, so diff --git a/web/ui/sentry.server.config.ts b/web/ui/sentry.server.config.ts index f6a9614e..1fc8e8e9 100644 --- a/web/ui/sentry.server.config.ts +++ b/web/ui/sentry.server.config.ts @@ -13,6 +13,7 @@ if (process.env.NODE_ENV && process.env.NODE_ENV !== 'development') { integrations: [new BrowserTracing()], // Adjust this value in production, or use tracesSampler for greater control tracesSampleRate: process.env.NODE_ENV === 'production' ? 0.2 : 0, + sampleRate: 1, // ... // Note: if you want to override the automatic release value, do not set a // `release` value here - use the environment variable `SENTRY_RELEASE`, so diff --git a/web/ui/src/components/Sidebar/Sidebar.tsx b/web/ui/src/components/Sidebar/Sidebar.tsx index cbc1f055..b890f69c 100644 --- a/web/ui/src/components/Sidebar/Sidebar.tsx +++ b/web/ui/src/components/Sidebar/Sidebar.tsx @@ -113,6 +113,11 @@ export const Sidebar = ({ +
{ + return ( +
+

+ + + Under construction +

+ + This part is not developed yet. Will be available during the beta phase.{' '} +
+ You can help us by contributing to the idea on Discord. +
+ + Talk about it on Discord + +
+ ); +}; diff --git a/web/ui/src/components/Soon/index.ts b/web/ui/src/components/Soon/index.ts new file mode 100644 index 00000000..6bc423b8 --- /dev/null +++ b/web/ui/src/components/Soon/index.ts @@ -0,0 +1 @@ +export { Soon, Soon as default } from './Soon'; diff --git a/web/ui/src/containers/clusters/ClusterSidebar.tsx b/web/ui/src/containers/clusters/ClusterSidebar.tsx index e860b4da..ed377b35 100644 --- a/web/ui/src/containers/clusters/ClusterSidebar.tsx +++ b/web/ui/src/containers/clusters/ClusterSidebar.tsx @@ -55,7 +55,7 @@ export const ClusterSidebar = ({ @@ -64,7 +64,7 @@ export const ClusterSidebar = ({ @@ -73,7 +73,7 @@ export const ClusterSidebar = ({ diff --git a/web/ui/src/pages/_middleware.tsx b/web/ui/src/pages/_middleware.tsx index e64d21d8..a35bc61d 100644 --- a/web/ui/src/pages/_middleware.tsx +++ b/web/ui/src/pages/_middleware.tsx @@ -8,7 +8,7 @@ export const middleware: NextMiddleware = async (req) => { if ( pathname.startsWith('/api') || pathname.startsWith('/assets') || - pathname.startsWith('/discord') + pathname.startsWith('/beta') ) { return NextResponse.next(); } @@ -36,5 +36,5 @@ export const middleware: NextMiddleware = async (req) => { return NextResponse.next(); } - return NextResponse.redirect(new URL('/discord', req.url)); + return NextResponse.redirect(new URL('/beta', req.url)); }; diff --git a/web/ui/src/pages/discord/index.tsx b/web/ui/src/pages/beta/index.tsx similarity index 87% rename from web/ui/src/pages/discord/index.tsx rename to web/ui/src/pages/beta/index.tsx index 3b47e211..29d09fb6 100644 --- a/web/ui/src/pages/discord/index.tsx +++ b/web/ui/src/pages/beta/index.tsx @@ -11,13 +11,10 @@ import classNames from 'classnames'; import { GetServerSideProps, NextPage } from 'next'; import { signIn } from 'next-auth/react'; import Image from 'next/image'; +import Link from 'next/link'; import { useState } from 'react'; -const SponsorGithubPart = ({ - hasDiscordAccess, -}: { - hasDiscordAccess: boolean; -}) => { +const SponsorGithubPart = ({ hasSponsored }: { hasSponsored: boolean }) => { const [invited, setInvited] = useState(false); const [joinDiscordMutation] = useInviteOnDiscordMutation({ onError: () => setInvited(false), @@ -28,8 +25,8 @@ const SponsorGithubPart = ({ setInvited(true); }; - if (hasDiscordAccess) { - return ( + return ( +

You have unlocked a new feature! @@ -56,30 +53,43 @@ const SponsorGithubPart = ({ )}

- ); - } - return ( -
-

+

- Get early-access to the Discord by becoming a sponsor + {(hasSponsored && 'You have the power !') || + 'Get early-access to the beta by becoming a sponsor'} - +

- Becoming a sponsor means access to the Discord, to the code, to the beta + Becoming a sponsor means access to the beta and the code
and to participate in new features before anyone else!
- - Sponsor on Github - + {(hasSponsored && ( + + + Go to the future + + + )) || ( + + Sponsor on Github + + )} + After sponsoring come back on this page, refresh and see
@@ -178,14 +188,14 @@ interface PageProps { } export const IndexPage: NextPage = ({ me }) => { - const hasDiscordAccess = me.flags?.some((f) => f === Flag.DISCORD); + const hasSponsored = me.flags?.some((f) => f === Flag.SPONSOR); let currentStep = (me.accounts?.filter( (a) => a?.provider === Provider.GITHUB || a?.provider === Provider.DISCORD ).length || 0) + 1; - if (currentStep == 3 && hasDiscordAccess) currentStep = 4; + if (currentStep == 3 && hasSponsored) currentStep = 4; if (!me) { return <>OUPS; @@ -270,7 +280,7 @@ export const IndexPage: NextPage = ({ me }) => {
@@ -323,7 +333,7 @@ export const getServerSideProps: GetServerSideProps = async ({ req }) => { return { props: {}, redirect: { - destination: '/auth/signin?callbackUrl=/discord', + destination: '/auth/signin?callbackUrl=/beta', }, }; } diff --git a/web/ui/src/pages/feed/index.tsx b/web/ui/src/pages/feed/index.tsx index a3a25d71..2ccb3c92 100644 --- a/web/ui/src/pages/feed/index.tsx +++ b/web/ui/src/pages/feed/index.tsx @@ -1,6 +1,7 @@ import { ComponentWithAuthGuard } from '@components/AuthGuard'; import React from 'react'; import { useSidebar } from '@components/Sidebar'; +import Soon from '@components/Soon'; type PageProps = {}; @@ -11,8 +12,8 @@ const IndexPage: ComponentWithAuthGuard = () => { - -

Feed Page

+ +
diff --git a/web/ui/src/pages/index.tsx b/web/ui/src/pages/index.tsx index 527b3059..b217e0bc 100644 --- a/web/ui/src/pages/index.tsx +++ b/web/ui/src/pages/index.tsx @@ -1,3 +1,5 @@ +import { Flag, MeWithFlagsDocument, MeWithFlagsQuery } from '@graphql.d'; +import { queryAuthenticatedSSR } from '@lib/apollo'; import type { GetServerSideProps, NextPage } from 'next'; import Head from 'next/head'; @@ -12,10 +14,24 @@ const Home: NextPage = () => { ); }; -export const getServerSideProps: GetServerSideProps = async () => { +export const getServerSideProps: GetServerSideProps = async ({ req }) => { + const { data } = await queryAuthenticatedSSR(req, { + query: MeWithFlagsDocument, + }); + + const { flags = [] } = data?.me || {}; + if (flags.includes(Flag.STAFF) || flags.includes(Flag.BETA)) { + return { + redirect: { + destination: '/clusters', + permanent: false, + }, + }; + } + return { redirect: { - destination: '/discord', + destination: '/beta', permanent: false, }, props: {}, diff --git a/web/ui/src/pages/statistics/index.tsx b/web/ui/src/pages/statistics/index.tsx index aef78891..2ccb3c92 100644 --- a/web/ui/src/pages/statistics/index.tsx +++ b/web/ui/src/pages/statistics/index.tsx @@ -1,6 +1,7 @@ import { ComponentWithAuthGuard } from '@components/AuthGuard'; import React from 'react'; import { useSidebar } from '@components/Sidebar'; +import Soon from '@components/Soon'; type PageProps = {}; @@ -10,9 +11,9 @@ const IndexPage: ComponentWithAuthGuard = () => { return ( - - -

Statistics Page

+ + +
diff --git a/web/ui/yarn.lock b/web/ui/yarn.lock index 10ac7a82..9c81c160 100644 --- a/web/ui/yarn.lock +++ b/web/ui/yarn.lock @@ -2024,14 +2024,14 @@ dependencies: any-observable "^0.3.0" -"@sentry/browser@7.4.1": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.4.1.tgz#7cbc481a23970338634084658fb1c9ecac4830f6" - integrity sha512-eHSjseHBmfqmyS8auYDQPVSNy2yOEoqGDUumspyvZzxy8taFNiBDvt8JdIXyCwuAhEQBfNi6kMMGlcgkcWOVpw== - dependencies: - "@sentry/core" "7.4.1" - "@sentry/types" "7.4.1" - "@sentry/utils" "7.4.1" +"@sentry/browser@7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.7.0.tgz#7810ee98d4969bd0367e29ac0af6c5779db7e6c4" + integrity sha512-oyzpWcsjVZTaf14zAL89Ng1DUHlbjN+V8pl8dR9Y9anphbzL5BK9p0fSK4kPIrO4GukK+XrKnLJDPuE/o7WR3g== + dependencies: + "@sentry/core" "7.7.0" + "@sentry/types" "7.7.0" + "@sentry/utils" "7.7.0" tslib "^1.9.3" "@sentry/cli@^1.74.4": @@ -2047,97 +2047,97 @@ proxy-from-env "^1.1.0" which "^2.0.2" -"@sentry/core@7.4.1": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.4.1.tgz#a18441f2da328f170cd7c78f4f1040e39a0dabcb" - integrity sha512-YHx6CCds6ZqyCXAYX8ZpBKZLcFsGWbXZwofIfdILxO1PoToKXOLMPY4XFcI4NNhNg1gM3efleVdcyHKfBLDNyw== +"@sentry/core@7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.7.0.tgz#1a2d477897552d179380f7c54c7d81a4e98ea29a" + integrity sha512-Z15ACiuiFINFcK4gbMrnejLn4AVjKBPJOWKrrmpIe8mh+Y9diOuswt5mMUABs+jhpZvqht3PBLLGBL0WMsYMYA== dependencies: - "@sentry/hub" "7.4.1" - "@sentry/types" "7.4.1" - "@sentry/utils" "7.4.1" + "@sentry/hub" "7.7.0" + "@sentry/types" "7.7.0" + "@sentry/utils" "7.7.0" tslib "^1.9.3" -"@sentry/hub@7.4.1": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.4.1.tgz#3fa188d85a272e26ffbf94bf38b5b8369b7692e7" - integrity sha512-VSeaMgn5sbAJ+TCk0NpQbyV5zI3YeuLZgQogQF1YLtNdW9kW9vRDjawNnKEqu7aX18s8bdVbnwjK1oUHUXDKdg== +"@sentry/hub@7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.7.0.tgz#9ad3471cf5ecaf1a9d3a3a04ca2515ffec9e2c09" + integrity sha512-6gydK234+a0nKhBRDdIJ7Dp42CaiW2juTiHegUVDq+482balVzbZyEAmESCmuzKJhx5BhlCElVxs/cci1NjMpg== dependencies: - "@sentry/types" "7.4.1" - "@sentry/utils" "7.4.1" + "@sentry/types" "7.7.0" + "@sentry/utils" "7.7.0" tslib "^1.9.3" -"@sentry/integrations@7.4.1": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.4.1.tgz#405b4f7110cc3fa6e378bd17b2b78d3111973cba" - integrity sha512-FfECaC5tSiZomwQH7OGgpX3CIFFTN3N5SIiQKXGn0xdfQHMi22rVO8GYogv0yyEsbu+4FAgLjvMRCsPSIXDsHw== +"@sentry/integrations@7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.7.0.tgz#be4d89ccce756f3decc52b04cc09add19f142715" + integrity sha512-qHIw4JrluVfkcdA6v22KVumhuqdk9I0MxEaiHyP/uzx4xIoi9S4I86YbLHZUpjqreJIQkntsimJSepZJkxvG5g== dependencies: - "@sentry/types" "7.4.1" - "@sentry/utils" "7.4.1" + "@sentry/types" "7.7.0" + "@sentry/utils" "7.7.0" localforage "^1.8.1" tslib "^1.9.3" -"@sentry/nextjs@^7.4.1": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-7.4.1.tgz#2eb014e58dc5a7df5570cd67d4bba2dcaa73fee1" - integrity sha512-KvlCP3m4xb07nVp26Wn9p4XogtVbecpoVU/oUC1YP6rd4bT/t+VPsZ1rhyNfLkKKtNctVWJwPAEnni7IV0ESiw== - dependencies: - "@sentry/core" "7.4.1" - "@sentry/hub" "7.4.1" - "@sentry/integrations" "7.4.1" - "@sentry/node" "7.4.1" - "@sentry/react" "7.4.1" - "@sentry/tracing" "7.4.1" - "@sentry/types" "7.4.1" - "@sentry/utils" "7.4.1" +"@sentry/nextjs@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-7.7.0.tgz#c257458a1d430a712bc6908fad5092a3362953e7" + integrity sha512-mC1fdX6ajGFYVo1fyDR2h6XmUjpI5JP414pxca/77H8wmOXci+2o9WfgZzB/jkLSbo91C4vGcuD7kvH5ytjTDQ== + dependencies: + "@sentry/core" "7.7.0" + "@sentry/hub" "7.7.0" + "@sentry/integrations" "7.7.0" + "@sentry/node" "7.7.0" + "@sentry/react" "7.7.0" + "@sentry/tracing" "7.7.0" + "@sentry/types" "7.7.0" + "@sentry/utils" "7.7.0" "@sentry/webpack-plugin" "1.18.9" tslib "^1.9.3" -"@sentry/node@7.4.1": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.4.1.tgz#7cef7d0f714a5efe46f2a89cda2a3e1dc41f90ef" - integrity sha512-EkN+aIDesLukeIrJSmxeg/mxmoAFNCYuC49T5eNcKYD57K4xtdJFI72FcgZ8QKdiAtUea6y8z2grCA73My31BQ== +"@sentry/node@7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.7.0.tgz#d39e904968fcca8cb0a881dee81887a6abf3ad74" + integrity sha512-i62x23NHEhLe6CJ6l9E30uRCUMm0VMz9aUmmrjW+9uxS1mZhHTG2kpbU16ozyh9KTLswKDOSE75Z+MzQpGSQ/Q== dependencies: - "@sentry/core" "7.4.1" - "@sentry/hub" "7.4.1" - "@sentry/types" "7.4.1" - "@sentry/utils" "7.4.1" + "@sentry/core" "7.7.0" + "@sentry/hub" "7.7.0" + "@sentry/types" "7.7.0" + "@sentry/utils" "7.7.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/react@7.4.1": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.4.1.tgz#0697c85509988f1465b000afb9881226f6ea4f49" - integrity sha512-qmcRhFRiQz08zcZ+TGe/f0xiFM03NkQcjX8upqDcjr9pyZ6wF4wiysFwECOpURJWLyusd1bIJotxdXWNd7kiBw== +"@sentry/react@7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.7.0.tgz#a519dd727f863c1abf1a77beac01a3336c856828" + integrity sha512-93Khad3YAln6mKU9E15QH09XC1ARIOpNTRpnBl6AGl3bVhSdLExsbKDLa7Rx0mW2j4z/prOC6VEHf5mBvg4mPg== dependencies: - "@sentry/browser" "7.4.1" - "@sentry/types" "7.4.1" - "@sentry/utils" "7.4.1" + "@sentry/browser" "7.7.0" + "@sentry/types" "7.7.0" + "@sentry/utils" "7.7.0" hoist-non-react-statics "^3.3.2" tslib "^1.9.3" -"@sentry/tracing@7.4.1", "@sentry/tracing@^7.4.1": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.4.1.tgz#2fd242f01f9ef550182124adbd6d426c5505b98c" - integrity sha512-Te/1GwQmy+D/USOd1bXjyrstnXnArW+5ufxgHlX7LfcQlCcfVEO2PNJkxSPG5fouLZdEjlRc8Yv+wVz5iCwDaQ== +"@sentry/tracing@7.7.0", "@sentry/tracing@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.7.0.tgz#67324b755a28e115289755e44a0b8b467a63d0b2" + integrity sha512-HNmvTwemuc21q/K6HXsSp9njkne6N1JQ71TB+QGqYU5VtxsVgYSUhhYqV6WcHz7LK4Hj6TvNFoeu69/rO0ysgw== dependencies: - "@sentry/hub" "7.4.1" - "@sentry/types" "7.4.1" - "@sentry/utils" "7.4.1" + "@sentry/hub" "7.7.0" + "@sentry/types" "7.7.0" + "@sentry/utils" "7.7.0" tslib "^1.9.3" -"@sentry/types@7.4.1": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.4.1.tgz#bc6e782084db0860e4e93ef1b2c2793f9bea9958" - integrity sha512-PXzoTwdR5qAoZGdDromiE1JuIJE43ItDVpmMQYA+L40BdlrmvKh1nAP13e8tTCOKxMJ+4TulTLnysumo0NDTlw== +"@sentry/types@7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.7.0.tgz#dd6bd3d119d7efea0e85dbaa4b17de1c22b63c7a" + integrity sha512-4x8O7uerSGLnYC10krHl9t8h7xXHn5FextqKYbTCXCnx2hC8D+9lz8wcbQAFo0d97wiUYqI8opmEgFVGx7c5hQ== -"@sentry/utils@7.4.1": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.4.1.tgz#9a1a052129f0846a7b700578531b85b531b43734" - integrity sha512-fJnMPKrM9/fGr43aNCiAJG5F1W6Scpu7TV5MTvHDx7XPVfJhvlW70XBOtrpF1kD7xD9QJw5t+50WX6HctAACjA== +"@sentry/utils@7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.7.0.tgz#013e3097c4268a76de578494c7df999635fb0ad4" + integrity sha512-fD+ROSFpeJlK7bEvUT2LOW7QqgjBpXJwVISKZ0P2fuzclRC3KoB2pbZgBM4PXMMTiSzRGWhvfRRjBiBvQJBBJQ== dependencies: - "@sentry/types" "7.4.1" + "@sentry/types" "7.7.0" tslib "^1.9.3" "@sentry/webpack-plugin@1.18.9": @@ -2691,14 +2691,14 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.27.1.tgz#fdf59c905354139046b41b3ed95d1609913d0758" - integrity sha512-6dM5NKT57ZduNnJfpY81Phe9nc9wolnMCnknb1im6brWi1RYv84nbMS3olJa27B6+irUVV1X/Wb+Am0FjJdGFw== +"@typescript-eslint/eslint-plugin@^5.30.6": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.6.tgz#9c6017b6c1d04894141b4a87816388967f64c359" + integrity sha512-J4zYMIhgrx4MgnZrSDD7sEnQp7FmhKNOaqaOpaoQ/SfdMfRB/0yvK74hTnvH+VQxndZynqs5/Hn4t+2/j9bADg== dependencies: - "@typescript-eslint/scope-manager" "5.27.1" - "@typescript-eslint/type-utils" "5.27.1" - "@typescript-eslint/utils" "5.27.1" + "@typescript-eslint/scope-manager" "5.30.6" + "@typescript-eslint/type-utils" "5.30.6" + "@typescript-eslint/utils" "5.30.6" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -2716,15 +2716,15 @@ "@typescript-eslint/typescript-estree" "5.10.1" debug "^4.3.2" -"@typescript-eslint/parser@^5.23.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.23.0.tgz#443778e1afc9a8ff180f91b5e260ac3bec5e2de1" - integrity sha512-V06cYUkqcGqpFjb8ttVgzNF53tgbB/KoQT/iB++DOIExKmzI9vBJKjZKt/6FuV9c+zrDsvJKbJ2DOCYwX91cbw== +"@typescript-eslint/parser@^5.30.6": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.6.tgz#add440db038fa9d777e4ebdaf66da9e7fb7abe92" + integrity sha512-gfF9lZjT0p2ZSdxO70Xbw8w9sPPJGfAdjK7WikEjB3fcUI/yr9maUVEdqigBjKincUYNKOmf7QBMiTf719kbrA== dependencies: - "@typescript-eslint/scope-manager" "5.23.0" - "@typescript-eslint/types" "5.23.0" - "@typescript-eslint/typescript-estree" "5.23.0" - debug "^4.3.2" + "@typescript-eslint/scope-manager" "5.30.6" + "@typescript-eslint/types" "5.30.6" + "@typescript-eslint/typescript-estree" "5.30.6" + debug "^4.3.4" "@typescript-eslint/scope-manager@5.10.1": version "5.10.1" @@ -2734,28 +2734,20 @@ "@typescript-eslint/types" "5.10.1" "@typescript-eslint/visitor-keys" "5.10.1" -"@typescript-eslint/scope-manager@5.23.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.23.0.tgz#4305e61c2c8e3cfa3787d30f54e79430cc17ce1b" - integrity sha512-EhjaFELQHCRb5wTwlGsNMvzK9b8Oco4aYNleeDlNuL6qXWDF47ch4EhVNPh8Rdhf9tmqbN4sWDk/8g+Z/J8JVw== +"@typescript-eslint/scope-manager@5.30.6": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.6.tgz#ce1b49ff5ce47f55518d63dbe8fc9181ddbd1a33" + integrity sha512-Hkq5PhLgtVoW1obkqYH0i4iELctEKixkhWLPTYs55doGUKCASvkjOXOd/pisVeLdO24ZX9D6yymJ/twqpJiG3g== dependencies: - "@typescript-eslint/types" "5.23.0" - "@typescript-eslint/visitor-keys" "5.23.0" + "@typescript-eslint/types" "5.30.6" + "@typescript-eslint/visitor-keys" "5.30.6" -"@typescript-eslint/scope-manager@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.27.1.tgz#4d1504392d01fe5f76f4a5825991ec78b7b7894d" - integrity sha512-fQEOSa/QroWE6fAEg+bJxtRZJTH8NTskggybogHt4H9Da8zd4cJji76gA5SBlR0MgtwF7rebxTbDKB49YUCpAg== +"@typescript-eslint/type-utils@5.30.6": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.6.tgz#a64aa9acbe609ab77f09f53434a6af2b9685f3af" + integrity sha512-GFVVzs2j0QPpM+NTDMXtNmJKlF842lkZKDSanIxf+ArJsGeZUIaeT4jGg+gAgHt7AcQSFwW7htzF/rbAh2jaVA== dependencies: - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/visitor-keys" "5.27.1" - -"@typescript-eslint/type-utils@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.27.1.tgz#369f695199f74c1876e395ebea202582eb1d4166" - integrity sha512-+UC1vVUWaDHRnC2cQrCJ4QtVjpjjCgjNFpg8b03nERmkHv9JV9X5M19D7UFMd+/G7T/sgFwX2pGmWK38rqyvXw== - dependencies: - "@typescript-eslint/utils" "5.27.1" + "@typescript-eslint/utils" "5.30.6" debug "^4.3.4" tsutils "^3.21.0" @@ -2764,15 +2756,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.10.1.tgz#dca9bd4cb8c067fc85304a31f38ec4766ba2d1ea" integrity sha512-ZvxQ2QMy49bIIBpTqFiOenucqUyjTQ0WNLhBM6X1fh1NNlYAC6Kxsx8bRTY3jdYsYg44a0Z/uEgQkohbR0H87Q== -"@typescript-eslint/types@5.23.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.23.0.tgz#8733de0f58ae0ed318dbdd8f09868cdbf9f9ad09" - integrity sha512-NfBsV/h4dir/8mJwdZz7JFibaKC3E/QdeMEDJhiAE3/eMkoniZ7MjbEMCGXw6MZnZDMN3G9S0mH/6WUIj91dmw== - -"@typescript-eslint/types@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.27.1.tgz#34e3e629501349d38be6ae97841298c03a6ffbf1" - integrity sha512-LgogNVkBhCTZU/m8XgEYIWICD6m4dmEDbKXESCbqOXfKZxRKeqpiJXQIErv66sdopRKZPo5l32ymNqibYEH/xg== +"@typescript-eslint/types@5.30.6": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.6.tgz#86369d0a7af8c67024115ac1da3e8fb2d38907e1" + integrity sha512-HdnP8HioL1F7CwVmT4RaaMX57RrfqsOMclZc08wGMiDYJBsLGBM7JwXM4cZJmbWLzIR/pXg1kkrBBVpxTOwfUg== "@typescript-eslint/typescript-estree@5.10.1": version "5.10.1" @@ -2787,41 +2774,28 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.23.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.23.0.tgz#dca5f10a0a85226db0796e8ad86addc9aee52065" - integrity sha512-xE9e0lrHhI647SlGMl+m+3E3CKPF1wzvvOEWnuE3CCjjT7UiRnDGJxmAcVKJIlFgK6DY9RB98eLr1OPigPEOGg== +"@typescript-eslint/typescript-estree@5.30.6": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.6.tgz#a84a0d6a486f9b54042da1de3d671a2c9f14484e" + integrity sha512-Z7TgPoeYUm06smfEfYF0RBkpF8csMyVnqQbLYiGgmUSTaSXTP57bt8f0UFXstbGxKIreTwQCujtaH0LY9w9B+A== dependencies: - "@typescript-eslint/types" "5.23.0" - "@typescript-eslint/visitor-keys" "5.23.0" - debug "^4.3.2" - globby "^11.0.4" - is-glob "^4.0.3" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/typescript-estree@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.27.1.tgz#7621ee78607331821c16fffc21fc7a452d7bc808" - integrity sha512-DnZvvq3TAJ5ke+hk0LklvxwYsnXpRdqUY5gaVS0D4raKtbznPz71UJGnPTHEFo0GDxqLOLdMkkmVZjSpET1hFw== - dependencies: - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/visitor-keys" "5.27.1" + "@typescript-eslint/types" "5.30.6" + "@typescript-eslint/visitor-keys" "5.30.6" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.27.1.tgz#b4678b68a94bc3b85bf08f243812a6868ac5128f" - integrity sha512-mZ9WEn1ZLDaVrhRaYgzbkXBkTPghPFsup8zDbbsYTxC5OmqrFE7skkKS/sraVsLP3TcT3Ki5CSyEFBRkLH/H/w== +"@typescript-eslint/utils@5.30.6": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.6.tgz#1de2da14f678e7d187daa6f2e4cdb558ed0609dc" + integrity sha512-xFBLc/esUbLOJLk9jKv0E9gD/OH966M40aY9jJ8GiqpSkP2xOV908cokJqqhVd85WoIvHVHYXxSFE4cCSDzVvA== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.27.1" - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/typescript-estree" "5.27.1" + "@typescript-eslint/scope-manager" "5.30.6" + "@typescript-eslint/types" "5.30.6" + "@typescript-eslint/typescript-estree" "5.30.6" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -2833,20 +2807,12 @@ "@typescript-eslint/types" "5.10.1" eslint-visitor-keys "^3.0.0" -"@typescript-eslint/visitor-keys@5.23.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.23.0.tgz#057c60a7ca64667a39f991473059377a8067c87b" - integrity sha512-Vd4mFNchU62sJB8pX19ZSPog05B0Y0CE2UxAZPT5k4iqhRYjPnqyY3woMxCd0++t9OTqkgjST+1ydLBi7e2Fvg== - dependencies: - "@typescript-eslint/types" "5.23.0" - eslint-visitor-keys "^3.0.0" - -"@typescript-eslint/visitor-keys@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.27.1.tgz#05a62666f2a89769dac2e6baa48f74e8472983af" - integrity sha512-xYs6ffo01nhdJgPieyk7HAOpjhTsx7r/oB9LWEhwAXgwn33tkr+W8DI2ChboqhZlC4q3TC6geDYPoiX8ROqyOQ== +"@typescript-eslint/visitor-keys@5.30.6": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.6.tgz#94dd10bb481c8083378d24de1742a14b38a2678c" + integrity sha512-41OiCjdL2mCaSDi2SvYbzFLlqqlm5v1ZW9Ym55wXKL/Rx6OOB1IbuFGo71Fj6Xy90gJDFTlgOS+vbmtGHPTQQA== dependencies: - "@typescript-eslint/types" "5.27.1" + "@typescript-eslint/types" "5.30.6" eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.11.1":