From 64ba3660435e91195336cfa67e334c93cb356b53 Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Tue, 12 Nov 2024 17:58:09 +0200 Subject: [PATCH 01/18] fixed memory leak (#2831) --- apps/backoffice-v2/src/main.tsx | 6 +-- .../components/CaseOptions/CaseOptions.tsx | 3 +- .../useGeneratePDFMutation.tsx | 43 ++++++++++--------- .../workflows-service/prisma/data-migrations | 2 +- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/apps/backoffice-v2/src/main.tsx b/apps/backoffice-v2/src/main.tsx index 3c312d217a..035bb9dec3 100644 --- a/apps/backoffice-v2/src/main.tsx +++ b/apps/backoffice-v2/src/main.tsx @@ -7,8 +7,8 @@ import '@ballerine/ui/dist/style.css'; import '@fontsource/inter'; import { Toaster } from '@/common/components/organisms/Toaster/Toaster'; -import { registerFont } from '@ballerine/react-pdf-toolkit'; -import { Font } from '@react-pdf/renderer'; +// Uncomment once react-pdf is back in use +// import { Font } from '@react-pdf/renderer'; import { Router } from './Router/Router'; import { env } from './common/env/env'; import './i18n'; @@ -24,7 +24,7 @@ initializeSessionRecording(); dayjs.extend(advancedFormat); -registerFont(Font); +// registerFont(Font); export const TOAST_DURATION_IN_MS = 1000 * 3; diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/components/CaseOptions/CaseOptions.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/components/CaseOptions/CaseOptions.tsx index 6974f5c2e8..dfa443741a 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/components/CaseOptions/CaseOptions.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/components/CaseOptions/CaseOptions.tsx @@ -25,7 +25,8 @@ export const CaseOptions = () => { + + ); +}; diff --git a/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/components/Submit/index.ts b/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/components/Submit/index.ts new file mode 100644 index 0000000000..40414f1fcb --- /dev/null +++ b/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/components/Submit/index.ts @@ -0,0 +1 @@ +export * from './Submit'; diff --git a/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/hooks/useCreateEndUserMutation/index.ts b/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/hooks/useCreateEndUserMutation/index.ts new file mode 100644 index 0000000000..c3b8a77048 --- /dev/null +++ b/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/hooks/useCreateEndUserMutation/index.ts @@ -0,0 +1 @@ +export * from './useCreateEndUserMutation'; diff --git a/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/hooks/useCreateEndUserMutation/useCreateEndUserMutation.ts b/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/hooks/useCreateEndUserMutation/useCreateEndUserMutation.ts new file mode 100644 index 0000000000..ce8ec05700 --- /dev/null +++ b/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/hooks/useCreateEndUserMutation/useCreateEndUserMutation.ts @@ -0,0 +1,28 @@ +import { useAccessToken } from '@/common/providers/AccessTokenProvider'; +import { collectionFlowQuerykeys, createEndUserRequest } from '@/domains/collection-flow'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { useNavigate } from 'react-router-dom'; +import { toast } from 'sonner'; + +export const useCreateEndUserMutation = () => { + const queryClient = useQueryClient(); + const navigate = useNavigate(); + const { accessToken } = useAccessToken(); + + const { mutateAsync, isLoading } = useMutation({ + mutationFn: createEndUserRequest, + onSuccess: () => { + void queryClient.invalidateQueries(collectionFlowQuerykeys.getEndUser()); + + navigate(`/collection-flow?token=${accessToken}`); + }, + onError: () => { + toast.error('Failed to create user. Please try again.'); + }, + }); + + return { + createEndUserRequest: mutateAsync, + isLoading, + }; +}; diff --git a/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/index.ts b/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/index.ts new file mode 100644 index 0000000000..04c66ba8ca --- /dev/null +++ b/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/index.ts @@ -0,0 +1 @@ +export * from './SignUpForm'; diff --git a/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/signup-form-schema.ts b/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/signup-form-schema.ts new file mode 100644 index 0000000000..06d923eb60 --- /dev/null +++ b/apps/kyb-app/src/pages/SignUpPage/components/SignUpForm/signup-form-schema.ts @@ -0,0 +1,26 @@ +import { RJSFSchema, UiSchema } from '@rjsf/utils'; + +export const signupFormSchema: RJSFSchema = { + type: 'object', + required: ['firstName', 'lastName', 'email'], + properties: { + firstName: { + type: 'string', + title: 'First Name', + maxLength: 50, + }, + lastName: { + type: 'string', + title: 'Last Name', + maxLength: 50, + }, + email: { + type: 'string', + title: 'Email', + format: 'email', + maxLength: 254, + }, + }, +}; + +export const signupFormUiSchema: UiSchema = {}; diff --git a/apps/kyb-app/src/pages/SignUpPage/index.ts b/apps/kyb-app/src/pages/SignUpPage/index.ts new file mode 100644 index 0000000000..b956d42fa2 --- /dev/null +++ b/apps/kyb-app/src/pages/SignUpPage/index.ts @@ -0,0 +1 @@ +export * from './SignUpPage'; diff --git a/apps/kyb-app/src/router.tsx b/apps/kyb-app/src/router.tsx index 2d4e3fb1ae..49b12ca482 100644 --- a/apps/kyb-app/src/router.tsx +++ b/apps/kyb-app/src/router.tsx @@ -1,8 +1,6 @@ -import { withTokenProtected } from '@/hocs/withTokenProtected'; import { CollectionFlow } from '@/pages/CollectionFlow'; -import { Approved } from '@/pages/CollectionFlow/components/pages/Approved'; -import { Rejected } from '@/pages/CollectionFlow/components/pages/Rejected'; -import { SignIn } from '@/pages/SignIn'; +import * as Sentry from '@sentry/react'; +import React from 'react'; import { createBrowserRouter, createRoutesFromChildren, @@ -10,8 +8,11 @@ import { useLocation, useNavigationType, } from 'react-router-dom'; -import * as Sentry from '@sentry/react'; -import React from 'react'; +import { ErrorScreen } from './common/components/organisms/ErrorScreen/ErrorScreen'; +import { withCustomer } from './hocs/withCustomer'; +import { GlobalProviders } from './pages/GlobalProviders'; +import { Root } from './pages/Root'; +import { SignUpPage } from './pages/SignUpPage'; export const sentryRouterInstrumentation = Sentry.reactRouterV6Instrumentation( React.useEffect, @@ -25,19 +26,29 @@ const sentryCreateBrowserRouter = Sentry.wrapCreateBrowserRouter(createBrowserRo export const router = sentryCreateBrowserRouter([ { - path: '/', - Component: withTokenProtected(SignIn), - }, - { - path: '/collection-flow', - Component: withTokenProtected(CollectionFlow), - }, - { - path: 'rejected', - Component: withTokenProtected(Rejected), - }, - { - path: 'approved', - Component: withTokenProtected(Approved), + path: '', + Component: GlobalProviders, + errorElement: , + children: [ + { + path: '/', + Component: Root, + children: [ + { + path: '', + Component: withCustomer(CollectionFlow), + }, + { + path: 'collection-flow', + Component: withCustomer(CollectionFlow), + }, + { + path: 'signup', + Component: SignUpPage, + }, + // TODO: 404 Page? + ], + }, + ], }, ]); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 259497c400..37c3b20601 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -631,6 +631,9 @@ importers: react-router-dom: specifier: ^6.11.2 version: 6.19.0(react-dom@18.2.0)(react@18.2.0) + sonner: + specifier: ^1.4.3 + version: 1.4.3(react-dom@18.2.0)(react@18.2.0) use-debounce: specifier: ^9.0.4 version: 9.0.4(react@18.2.0) @@ -4892,7 +4895,25 @@ packages: '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: true + + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.25.2): + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.25.2) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 @@ -4910,13 +4931,13 @@ packages: semver: 6.3.1 dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.7): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.25.2): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 @@ -4938,12 +4959,12 @@ packages: - supports-color dev: true - /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.7): + /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.25.2): resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.6 @@ -5034,6 +5055,20 @@ packages: '@babel/helper-validator-identifier': 7.22.20 dev: true + /@babel/helper-module-transforms@7.23.3(@babel/core@7.25.2): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} @@ -5072,13 +5107,13 @@ packages: '@babel/helper-wrap-function': 7.22.20 dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.7): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.25.2): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 @@ -5096,13 +5131,13 @@ packages: '@babel/helper-optimise-call-expression': 7.22.5 dev: true - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.7): + /@babel/helper-replace-supers@7.22.20(@babel/core@7.25.2): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -5275,13 +5310,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.7): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -5297,25 +5332,25 @@ packages: '@babel/plugin-transform-optional-chaining': 7.23.3(@babel/core@7.17.9) dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.7): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-optional-chaining': 7.23.3(@babel/core@7.25.2) dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.7): + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -5520,13 +5555,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 dev: true /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.17.9): @@ -5573,6 +5608,15 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: @@ -5600,6 +5644,15 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.17.9): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} @@ -5610,13 +5663,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.7): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -5629,12 +5682,12 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -5647,12 +5700,12 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -5666,23 +5719,23 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.7): + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.7): + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -5695,6 +5748,15 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.17.9): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: @@ -5713,6 +5775,15 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.17.9): resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} @@ -5761,6 +5832,15 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.17.9): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: @@ -5779,6 +5859,15 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.17.9): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: @@ -5797,6 +5886,15 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.17.9): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: @@ -5815,6 +5913,15 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.17.9): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: @@ -5833,6 +5940,15 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.17.9): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: @@ -5851,6 +5967,15 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.17.9): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} @@ -5861,13 +5986,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.7): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -5891,6 +6016,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.17.9): resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} @@ -5911,14 +6046,14 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.7): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -5932,27 +6067,27 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-async-generator-functions@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-async-generator-functions@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) dev: true /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.17.9): @@ -5967,16 +6102,16 @@ packages: '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.17.9) dev: true - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.25.2) dev: true /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.17.9): @@ -5989,13 +6124,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6009,37 +6144,37 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-block-scoping@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-static-block@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-class-static-block@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) dev: true /@babel/plugin-transform-classes@7.23.3(@babel/core@7.17.9): @@ -6060,20 +6195,20 @@ packages: globals: 11.12.0 dev: true - /@babel/plugin-transform-classes@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-classes@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.25.2) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: true @@ -6089,13 +6224,13 @@ packages: '@babel/template': 7.22.15 dev: true - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.15 dev: true @@ -6110,13 +6245,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6131,14 +6266,14 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6152,25 +6287,25 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dynamic-import@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-dynamic-import@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) dev: true /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.17.9): @@ -6184,26 +6319,26 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-export-namespace-from@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-export-namespace-from@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) dev: true /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.7): @@ -6227,13 +6362,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-for-of@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-for-of@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6249,27 +6384,27 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-json-strings@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-json-strings@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) dev: true /@babel/plugin-transform-literals@7.23.3(@babel/core@7.17.9): @@ -6282,25 +6417,25 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-logical-assignment-operators@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) dev: true /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.17.9): @@ -6313,13 +6448,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6334,14 +6469,14 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6364,7 +6499,19 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.25.2): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 dev: true @@ -6382,15 +6529,15 @@ packages: '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 dev: true @@ -6406,14 +6553,14 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6428,14 +6575,14 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.7): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.25.2): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6449,50 +6596,50 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-nullish-coalescing-operator@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) dev: true - /@babel/plugin-transform-numeric-separator@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-numeric-separator@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) dev: true - /@babel/plugin-transform-object-rest-spread@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-object-rest-spread@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.25.2) dev: true /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.17.9): @@ -6506,26 +6653,26 @@ packages: '@babel/helper-replace-supers': 7.22.20(@babel/core@7.17.9) dev: true - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.25.2) dev: true - /@babel/plugin-transform-optional-catch-binding@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-optional-catch-binding@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) dev: true /@babel/plugin-transform-optional-chaining@7.23.3(@babel/core@7.17.9): @@ -6540,16 +6687,16 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-transform-optional-chaining@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-optional-chaining@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) dev: true /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.17.9): @@ -6562,38 +6709,38 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-property-in-object@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-private-property-in-object@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) dev: true /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.17.9): @@ -6606,13 +6753,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6726,13 +6873,13 @@ packages: regenerator-transform: 0.15.2 dev: true - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 dev: true @@ -6747,13 +6894,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6767,13 +6914,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6788,13 +6935,13 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true @@ -6809,13 +6956,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6829,13 +6976,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6849,13 +6996,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6895,24 +7042,24 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6927,25 +7074,25 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.25.2): resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -7045,80 +7192,171 @@ packages: '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.7) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-async-generator-functions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-block-scoping': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-class-static-block': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-classes': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-dynamic-import': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-export-namespace-from': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-json-strings': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-logical-assignment-operators': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.7) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-numeric-separator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-object-rest-spread': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-optional-catch-binding': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-optional-chaining': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-private-property-in-object': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7) - babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.7) - babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.7) - babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-async-generator-functions': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-class-static-block': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-classes': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-dynamic-import': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-export-namespace-from': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-json-strings': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-logical-assignment-operators': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.25.2) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-numeric-separator': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-object-rest-spread': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-optional-catch-binding': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-private-property-in-object': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.25.2) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.25.2) + babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.25.2) + core-js-compat: 3.33.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-env@7.23.3(@babel/core@7.25.2): + resolution: {integrity: sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-async-generator-functions': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-class-static-block': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-classes': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-dynamic-import': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-export-namespace-from': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-json-strings': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-logical-assignment-operators': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.25.2) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-numeric-separator': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-object-rest-spread': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-optional-catch-binding': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-private-property-in-object': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.25.2) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.25.2) + babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.25.2) core-js-compat: 3.33.2 semver: 6.3.1 transitivePeerDependencies: @@ -7150,12 +7388,12 @@ packages: esutils: 2.0.3 dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.7): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 '@babel/types': 7.23.6 esutils: 2.0.3 @@ -10119,7 +10357,7 @@ packages: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.5.4) typescript: 5.5.4 - vite: 5.3.5(@types/node@20.9.2) + vite: 5.3.5(@types/node@18.17.19) dev: true /@jridgewell/gen-mapping@0.3.3: @@ -16183,7 +16421,7 @@ packages: hasBin: true dependencies: '@babel/core': 7.23.7 - '@babel/preset-env': 7.23.3(@babel/core@7.23.7) + '@babel/preset-env': 7.23.3(@babel/core@7.25.2) '@babel/types': 7.23.6 '@ndelangen/get-tarball': 3.0.9 '@storybook/codemod': 7.5.3 @@ -16754,7 +16992,7 @@ packages: react: 18.2.0 react-docgen: 6.0.4 react-dom: 18.2.0(react@18.2.0) - vite: 5.3.5(@types/node@20.9.2) + vite: 5.3.5(@types/node@18.17.19) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -20037,7 +20275,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.3) magic-string: 0.27.0 react-refresh: 0.14.0 - vite: 5.3.5(@types/node@20.9.2) + vite: 5.3.5(@types/node@18.17.19) transitivePeerDependencies: - supports-color dev: true @@ -21577,14 +21815,14 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.7): + /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.25.2): resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.25.2) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -21602,13 +21840,13 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.7): + /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.25.2): resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.25.2) core-js-compat: 3.33.2 transitivePeerDependencies: - supports-color @@ -21625,13 +21863,13 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.7): + /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.25.2): resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.7) + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.25.2) transitivePeerDependencies: - supports-color dev: true @@ -25608,7 +25846,7 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.22.0)(typescript@5.5.4) eslint: 8.22.0 eslint-rule-composer: 0.3.0 dev: true @@ -38218,7 +38456,7 @@ packages: debug: 4.3.6 globrex: 0.1.2 tsconfck: 3.1.4(typescript@5.5.4) - vite: 5.3.5(@types/node@20.9.2) + vite: 5.3.5(@types/node@18.17.19) transitivePeerDependencies: - supports-color - typescript diff --git a/services/workflows-service/prisma/data-migrations b/services/workflows-service/prisma/data-migrations index 19da21880e..797d436e92 160000 --- a/services/workflows-service/prisma/data-migrations +++ b/services/workflows-service/prisma/data-migrations @@ -1 +1 @@ -Subproject commit 19da21880e8898f4532ec79ea952d378fe840774 +Subproject commit 797d436e928b5739926e0c65f8cca41da19a6456 diff --git a/services/workflows-service/prisma/migrations/20241109121307_create_tx_direction_index/migration.sql b/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql similarity index 53% rename from services/workflows-service/prisma/migrations/20241109121307_create_tx_direction_index/migration.sql rename to services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql index c8e6107342..c67b5965b0 100644 --- a/services/workflows-service/prisma/migrations/20241109121307_create_tx_direction_index/migration.sql +++ b/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql @@ -1,4 +1,2 @@ -- CreateIndex CREATE INDEX "TransactionRecord_transactionDirection_idx" ON "TransactionRecord"("transactionDirection"); - -CREATE INDEX "TransactionRecord_transactionDate_desc_idx" ON "TransactionRecord"("transactionDate" DESC); diff --git a/services/workflows-service/prisma/schema.prisma b/services/workflows-service/prisma/schema.prisma index 38da3de197..66bfad1b06 100644 --- a/services/workflows-service/prisma/schema.prisma +++ b/services/workflows-service/prisma/schema.prisma @@ -724,7 +724,8 @@ model TransactionRecord { @@unique([projectId, transactionCorrelationId]) @@index([transactionType]) - @@index([transactionDate]) // Manually created additional indexes for Desc + @@index([transactionDate]) + @@index([transactionDirection]) @@index([transactionStatus]) @@index([reviewStatus]) @@index([projectId]) diff --git a/services/workflows-service/src/collection-flow/collection-flow.module.ts b/services/workflows-service/src/collection-flow/collection-flow.module.ts index b504f16989..6c25998009 100644 --- a/services/workflows-service/src/collection-flow/collection-flow.module.ts +++ b/services/workflows-service/src/collection-flow/collection-flow.module.ts @@ -39,7 +39,7 @@ import { WorkflowRuntimeDataRepository } from '@/workflow/workflow-runtime-data. import { WorkflowModule } from '@/workflow/workflow.module'; import { HttpModule } from '@nestjs/axios'; import { Module } from '@nestjs/common'; -import { CollectionFlowSignupController } from '@/collection-flow/controllers/collection-flow.signup.controller'; +import { CollectionFlowNoUserController } from '@/collection-flow/controllers/collection-flow.no-user.controller'; @Module({ imports: [ @@ -58,7 +58,7 @@ import { CollectionFlowSignupController } from '@/collection-flow/controllers/co controllers: [ CollectionFlowController, CollectionFlowFilesController, - CollectionFlowSignupController, + CollectionFlowNoUserController, CollectionFlowBusinessController, CollectionFlowEndUserController, ], diff --git a/services/workflows-service/src/collection-flow/controllers/collection-flow.signup.controller.intg.test.ts b/services/workflows-service/src/collection-flow/controllers/collection-flow.no-user.controller.intg.test.ts similarity index 81% rename from services/workflows-service/src/collection-flow/controllers/collection-flow.signup.controller.intg.test.ts rename to services/workflows-service/src/collection-flow/controllers/collection-flow.no-user.controller.intg.test.ts index 88413bef3a..04e627d114 100644 --- a/services/workflows-service/src/collection-flow/controllers/collection-flow.signup.controller.intg.test.ts +++ b/services/workflows-service/src/collection-flow/controllers/collection-flow.no-user.controller.intg.test.ts @@ -1,42 +1,42 @@ -import { noop } from 'lodash'; -import request from 'supertest'; import { INestApplication } from '@nestjs/common'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { Test, TestingModule } from '@nestjs/testing'; import { Project, WorkflowRuntimeDataToken } from '@prisma/client'; +import { noop } from 'lodash'; +import request from 'supertest'; -import { UserService } from '@/user/user.service'; -import { PrismaService } from '@/prisma/prisma.service'; -import { SentryService } from '@/sentry/sentry.service'; -import { UserRepository } from '@/user/user.repository'; -import { StorageService } from '@/storage/storage.service'; -import { FileService } from '@/providers/file/file.service'; -import { EndUserService } from '@/end-user/end-user.service'; -import { createProject } from '@/test/helpers/create-project'; +import { WorkflowTokenRepository } from '@/auth/workflow-token/workflow-token.repository'; +import { WorkflowTokenService } from '@/auth/workflow-token/workflow-token.service'; +import { BusinessReportService } from '@/business-report/business-report.service'; +import { MerchantMonitoringClient } from '@/business-report/merchant-monitoring-client'; +import { BusinessRepository } from '@/business/business.repository'; import { BusinessService } from '@/business/business.service'; +import { CollectionFlowService } from '@/collection-flow/collection-flow.service'; +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; +import { EntityRepository } from '@/common/entity/entity.repository'; +import { CustomerRepository } from '@/customer/customer.repository'; import { CustomerService } from '@/customer/customer.service'; -import { WorkflowService } from '@/workflow/workflow.service'; -import { RiskRuleService } from '@/rule-engine/risk-rule.service'; import { EndUserRepository } from '@/end-user/end-user.repository'; -import { SalesforceService } from '@/salesforce/salesforce.service'; -import { BusinessRepository } from '@/business/business.repository'; -import { CustomerRepository } from '@/customer/customer.repository'; -import { EntityRepository } from '@/common/entity/entity.repository'; -import { RuleEngineService } from '@/rule-engine/rule-engine.service'; +import { EndUserService } from '@/end-user/end-user.service'; +import { PrismaService } from '@/prisma/prisma.service'; import { ProjectScopeService } from '@/project/project-scope.service'; -import { AppLoggerService } from '@/common/app-logger/app-logger.service'; -import { UiDefinitionService } from '@/ui-definition/ui-definition.service'; -import { BusinessReportService } from '@/business-report/business-report.service'; -import { CollectionFlowService } from '@/collection-flow/collection-flow.service'; +import { FileService } from '@/providers/file/file.service'; +import { RiskRuleService } from '@/rule-engine/risk-rule.service'; +import { RuleEngineService } from '@/rule-engine/rule-engine.service'; +import { SalesforceService } from '@/salesforce/salesforce.service'; import { SecretsManagerFactory } from '@/secrets-manager/secrets-manager.factory'; +import { SentryService } from '@/sentry/sentry.service'; +import { StorageService } from '@/storage/storage.service'; +import { createProject } from '@/test/helpers/create-project'; import { cleanupDatabase, tearDownDatabase } from '@/test/helpers/database-helper'; -import { WorkflowTokenService } from '@/auth/workflow-token/workflow-token.service'; -import { CollectionFlowSignupController } from './collection-flow.signup.controller'; -import { MerchantMonitoringClient } from '@/business-report/merchant-monitoring-client'; +import { UiDefinitionService } from '@/ui-definition/ui-definition.service'; +import { UserRepository } from '@/user/user.repository'; +import { UserService } from '@/user/user.service'; +import { WorkflowDefinitionRepository } from '@/workflow-defintion/workflow-definition.repository'; import { WorkflowEventEmitterService } from '@/workflow/workflow-event-emitter.service'; -import { WorkflowTokenRepository } from '@/auth/workflow-token/workflow-token.repository'; import { WorkflowRuntimeDataRepository } from '@/workflow/workflow-runtime-data.repository'; -import { WorkflowDefinitionRepository } from '@/workflow-defintion/workflow-definition.repository'; +import { WorkflowService } from '@/workflow/workflow.service'; +import { CollectionFlowNoUserController } from './collection-flow.no-user.controller'; describe('CollectionFlowSignupController', () => { let app: INestApplication; @@ -52,9 +52,8 @@ describe('CollectionFlowSignupController', () => { beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ - controllers: [CollectionFlowSignupController], + controllers: [CollectionFlowNoUserController], providers: [ - { provide: AppLoggerService, useValue: noop }, { provide: BusinessService, useValue: noop }, { provide: UiDefinitionService, useValue: noop }, { provide: CustomerService, useValue: noop }, @@ -69,6 +68,8 @@ describe('CollectionFlowSignupController', () => { { provide: UserRepository, useValue: noop }, { provide: UserService, useValue: noop }, { provide: EventEmitter2, useValue: noop }, + { provide: AppLoggerService, useValue: { log: noop } }, + { provide: WorkflowEventEmitterService, useValue: { emit: noop } }, WorkflowService, EndUserService, BusinessReportService, @@ -77,7 +78,6 @@ describe('CollectionFlowSignupController', () => { ProjectScopeService, PrismaService, WorkflowTokenRepository, - WorkflowEventEmitterService, CollectionFlowService, WorkflowTokenService, WorkflowDefinitionRepository, @@ -147,7 +147,7 @@ describe('CollectionFlowSignupController', () => { await app.close(); }); - describe('POST /collection-flow/signup', () => { + describe('POST /collection-flow/no-user', () => { it('should create a new EndUser and attach it to the WorkflowRuntimeDataToken', async () => { const signupDto = { firstName: 'John', @@ -158,7 +158,7 @@ describe('CollectionFlowSignupController', () => { expect(workflowRuntimeDataToken.endUserId).toBeNull(); const response = await request(app.getHttpServer()) - .post('/collection-flow/signup') + .post('/collection-flow/no-user') .send(signupDto) .set('authorization', `Bearer ${workflowRuntimeDataToken.token}`); @@ -172,5 +172,37 @@ describe('CollectionFlowSignupController', () => { ]); expect(endUser).toBeDefined(); }); + + // TODO: Uncomment once DB cleanup issue will be fixed + + // it('should create a new EndUser and set mainRepresentative in context', async () => { + // const signupDto = { + // firstName: 'John', + // lastName: 'Doe', + // email: 'email@email.com', + // }; + + // await request(app.getHttpServer()) + // .post('/collection-flow/no-user') + // .send(signupDto) + // .set('authorization', `Bearer ${workflowRuntimeDataToken.token}`); + + // const workflowToken = await workflowTokenService.findByToken(workflowRuntimeDataToken.token); + // const endUser = await endUserRepository.findById(workflowToken?.endUserId ?? '', {}, [ + // project.id, + // ]); + + // const { body } = await request(app.getHttpServer()) + // .get('/collection-flow/context') + // .set('authorization', `Bearer ${workflowRuntimeDataToken.token}`); + + // const { context } = body; + + // expect(get(context, 'entity.data.additionalInfo.mainRepresentative')).toEqual({ + // ...signupDto, + // ballerineEntityId: endUser?.id, + // }); + // expect(get(context, 'data.additionalInfo.mainRepresentative')).toEqual(signupDto); + // }); }); }); diff --git a/services/workflows-service/src/collection-flow/controllers/collection-flow.signup.controller.ts b/services/workflows-service/src/collection-flow/controllers/collection-flow.no-user.controller.ts similarity index 53% rename from services/workflows-service/src/collection-flow/controllers/collection-flow.signup.controller.ts rename to services/workflows-service/src/collection-flow/controllers/collection-flow.no-user.controller.ts index 067d697840..29ee389bd6 100644 --- a/services/workflows-service/src/collection-flow/controllers/collection-flow.signup.controller.ts +++ b/services/workflows-service/src/collection-flow/controllers/collection-flow.no-user.controller.ts @@ -1,34 +1,63 @@ import * as common from '@nestjs/common'; import { ApiExcludeController } from '@nestjs/swagger'; -import { SignupDto } from '@/collection-flow/dto/signup.dto'; -import { EndUserService } from '@/end-user/end-user.service'; -import { WorkflowService } from '@/workflow/workflow.service'; -import { SignupConfig } from '@/collection-flow/controllers/types'; import { WorkflowTokenService } from '@/auth/workflow-token/workflow-token.service'; +import { SignupConfig } from '@/collection-flow/controllers/types'; +import { SignupDto } from '@/collection-flow/dto/signup.dto'; import { type ITokenScope, TokenScope } from '@/common/decorators/token-scope.decorator'; import { UseTokenWithoutEnduserAuthGuard } from '@/common/guards/token-guard-without-enduser/token-without-enduser-auth.decorator'; +import { EndUserService } from '@/end-user/end-user.service'; import { PrismaService } from '@/prisma/prisma.service'; +import { WorkflowService } from '@/workflow/workflow.service'; +import set from 'lodash/set'; +import { CollectionFlowService } from '../collection-flow.service'; +import { GetFlowConfigurationInputDto } from '../dto/get-flow-configuration-input.dto'; +import { FlowConfigurationModel } from '../models/flow-configuration.model'; @UseTokenWithoutEnduserAuthGuard() @ApiExcludeController() -@common.Controller('collection-flow/signup') -export class CollectionFlowSignupController { +@common.Controller('collection-flow/no-user') +export class CollectionFlowNoUserController { constructor( protected readonly prismaService: PrismaService, protected readonly endUserService: EndUserService, protected readonly workflowService: WorkflowService, protected readonly workflowTokenService: WorkflowTokenService, + protected readonly collectionFlowService: CollectionFlowService, ) {} + @common.Get('/configuration/:language') + async getFlowConfiguration( + @TokenScope() tokenScope: ITokenScope, + @common.Param() params: GetFlowConfigurationInputDto, + ): Promise { + const workflow = await this.collectionFlowService.getActiveFlow( + tokenScope.workflowRuntimeDataId, + [tokenScope.projectId], + ); + + if (!workflow) { + throw new common.InternalServerErrorException('Workflow not found.'); + } + + return this.collectionFlowService.getFlowConfiguration( + workflow.workflowDefinitionId, + workflow.context, + params.language, + [tokenScope.projectId], + workflow.uiDefinitionId ? { where: { id: workflow.uiDefinitionId } } : {}, + ); + } + @common.Post() async signUp(@TokenScope() tokenScope: ITokenScope, @common.Body() payload: SignupDto) { try { - const { workflowDefinitionId } = await this.workflowService.getWorkflowRuntimeDataById( - tokenScope.workflowRuntimeDataId, - { select: { workflowDefinitionId: true } }, - [tokenScope.projectId], - ); + const { workflowDefinitionId, context } = + await this.workflowService.getWorkflowRuntimeDataById( + tokenScope.workflowRuntimeDataId, + { select: { workflowDefinitionId: true, context: true } }, + [tokenScope.projectId], + ); const { config } = await this.workflowService.getWorkflowDefinitionById( workflowDefinitionId, @@ -51,8 +80,27 @@ export class CollectionFlowSignupController { { endUser: { connect: { id: endUser.id } } }, transaction, ); + + const contextClone = structuredClone(context); + + const mainRepresentative = { + email: payload.email, + firstName: payload.firstName, + lastName: payload.lastName, + }; + + set(contextClone, 'entity.data.additionalInfo.mainRepresentative', { + ...mainRepresentative, + ballerineEntityId: endUser.id, + }); + set(contextClone, 'data.additionalInfo.mainRepresentative', mainRepresentative); + + await transaction.workflowRuntimeData.updateMany({ + where: { id: tokenScope.workflowRuntimeDataId, projectId: tokenScope.projectId }, + data: { context: contextClone }, + }); }); - } catch (error) { + } catch (error: unknown) { if (error instanceof common.BadRequestException) { throw error; } diff --git a/services/workflows-service/src/test/helpers/database-helper.ts b/services/workflows-service/src/test/helpers/database-helper.ts index 927e89bc4b..aa46c7f77a 100644 --- a/services/workflows-service/src/test/helpers/database-helper.ts +++ b/services/workflows-service/src/test/helpers/database-helper.ts @@ -12,15 +12,19 @@ const __getTables = async (prisma: PrismaClient): Promise => { const results: Array<{ tablename: string; }> = - await prisma.$queryRaw`SELECT tablename from pg_tables where schemaname = '${TEST_DATABASE_SCHEMA_NAME}';`; + await prisma.$queryRaw`SELECT tablename from pg_tables where schemaname = '${TEST_DATABASE_SCHEMA_NAME}'`; return results.map(result => result.tablename); }; const __removeAllTableContent = async (prisma: PrismaClient, tableNames: string[]) => { + // await prisma.$executeRawUnsafe(`SET session_replication_role = replica;`); + for (const table of tableNames) { await prisma.$executeRawUnsafe(`DELETE FROM ${TEST_DATABASE_SCHEMA_NAME}."${table}" CASCADE;`); } + + // await prisma.$executeRawUnsafe(`SET session_replication_role = DEFAULT;`); }; //should be implemented in BeforeEach hook From df710028accebac68b021f6d7cff81d6adb4ba5c Mon Sep 17 00:00:00 2001 From: Tomer Shvadron Date: Thu, 14 Nov 2024 23:25:46 +0200 Subject: [PATCH 09/18] feat: fix existing index issue (#2838) --- services/workflows-service/prisma/data-migrations | 2 +- .../migration.sql | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/services/workflows-service/prisma/data-migrations b/services/workflows-service/prisma/data-migrations index 797d436e92..01ce7f9b89 160000 --- a/services/workflows-service/prisma/data-migrations +++ b/services/workflows-service/prisma/data-migrations @@ -1 +1 @@ -Subproject commit 797d436e928b5739926e0c65f8cca41da19a6456 +Subproject commit 01ce7f9b898da1357226484bef5c92de18e15143 diff --git a/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql b/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql index c67b5965b0..f401c524b0 100644 --- a/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql +++ b/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql @@ -1,2 +1,4 @@ +DROP INDEX "TransactionRecord_transactionDirection_idx" ON "TransactionRecord"("transactionDirection"); + -- CreateIndex CREATE INDEX "TransactionRecord_transactionDirection_idx" ON "TransactionRecord"("transactionDirection"); From 7dced1e7b5778e674d50214409c6dda2ffe6c4ee Mon Sep 17 00:00:00 2001 From: Tomer Shvadron Date: Thu, 14 Nov 2024 23:42:00 +0200 Subject: [PATCH 10/18] feat: fixing bad migration sql (#2839) --- .../migration.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql b/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql index f401c524b0..a76ede7c7c 100644 --- a/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql +++ b/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql @@ -1,4 +1,4 @@ -DROP INDEX "TransactionRecord_transactionDirection_idx" ON "TransactionRecord"("transactionDirection"); +DROP INDEX "TransactionRecord_transactionDirection_idx"; -- CreateIndex CREATE INDEX "TransactionRecord_transactionDirection_idx" ON "TransactionRecord"("transactionDirection"); From 40ff2bcee1d99fe036cdc081a6eeece0a34df84e Mon Sep 17 00:00:00 2001 From: Tomer Shvadron Date: Fri, 15 Nov 2024 01:50:56 +0200 Subject: [PATCH 11/18] feat: fix bad db migration sql (#2840) --- .../workflows-service/prisma/data-migrations | 2 +- .../migration.sql | 2 +- .../workflow-token.repository.ts | 17 ++++++++++ .../workflow-token/workflow-token.service.ts | 4 +++ .../workflow/workflow.controller.external.ts | 34 +++++++++++-------- 5 files changed, 42 insertions(+), 17 deletions(-) diff --git a/services/workflows-service/prisma/data-migrations b/services/workflows-service/prisma/data-migrations index 01ce7f9b89..a0c3055b4d 160000 --- a/services/workflows-service/prisma/data-migrations +++ b/services/workflows-service/prisma/data-migrations @@ -1 +1 @@ -Subproject commit 01ce7f9b898da1357226484bef5c92de18e15143 +Subproject commit a0c3055b4df212f7d4cf13a200593fe4de2ae909 diff --git a/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql b/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql index a76ede7c7c..d3115f422f 100644 --- a/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql +++ b/services/workflows-service/prisma/migrations/20241114130413_added_transaction_direction_index/migration.sql @@ -1,4 +1,4 @@ -DROP INDEX "TransactionRecord_transactionDirection_idx"; +DROP INDEX IF EXISTS "TransactionRecord_transactionDirection_idx"; -- CreateIndex CREATE INDEX "TransactionRecord_transactionDirection_idx" ON "TransactionRecord"("transactionDirection"); diff --git a/services/workflows-service/src/auth/workflow-token/workflow-token.repository.ts b/services/workflows-service/src/auth/workflow-token/workflow-token.repository.ts index 2f5c6a87d5..07a708a6ac 100644 --- a/services/workflows-service/src/auth/workflow-token/workflow-token.repository.ts +++ b/services/workflows-service/src/auth/workflow-token/workflow-token.repository.ts @@ -23,6 +23,23 @@ export class WorkflowTokenRepository { }); } + async findFirstByWorkflowruntimeDataIdUnscoped(workflowRuntimeDataId: string) { + return await this.prismaService.workflowRuntimeDataToken.findFirst({ + select: { + token: true, + }, + where: { + workflowRuntimeDataId, + deletedAt: null, + expiresAt: { gt: new Date() }, + }, + take: 1, + orderBy: { + createdAt: 'asc', + }, + }); + } + async findByTokenUnscoped(token: string) { return await this.prismaService.workflowRuntimeDataToken.findFirst({ where: { diff --git a/services/workflows-service/src/auth/workflow-token/workflow-token.service.ts b/services/workflows-service/src/auth/workflow-token/workflow-token.service.ts index b9034dceb4..4c07dd4ef9 100644 --- a/services/workflows-service/src/auth/workflow-token/workflow-token.service.ts +++ b/services/workflows-service/src/auth/workflow-token/workflow-token.service.ts @@ -18,6 +18,10 @@ export class WorkflowTokenService { return await this.workflowTokenRepository.findByTokenUnscoped(token); } + async findFirstByWorkflowruntimeDataIdUnscoped(token: string) { + return await this.workflowTokenRepository.findFirstByWorkflowruntimeDataIdUnscoped(token); + } + async findByTokenWithExpiredUnscoped(token: string) { return await this.workflowTokenRepository.findByTokenWithExpiredUnscoped(token); } diff --git a/services/workflows-service/src/workflow/workflow.controller.external.ts b/services/workflows-service/src/workflow/workflow.controller.external.ts index 90e1f2fa9f..5d529848bc 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.ts @@ -6,7 +6,6 @@ import { HttpStatus, NotFoundException, Query, Res } from '@nestjs/common'; import * as swagger from '@nestjs/swagger'; import { ApiOkResponse, ApiResponse } from '@nestjs/swagger'; import type { WorkflowRuntimeData } from '@prisma/client'; -// import * as nestAccessControl from 'nest-access-control'; import { WorkflowTokenService } from '@/auth/workflow-token/workflow-token.service'; import { putPluginsExampleResponse } from '@/workflow/workflow-controller-examples'; import { CurrentProject } from '@/common/decorators/current-project.decorator'; @@ -54,8 +53,6 @@ export class WorkflowControllerExternal { constructor( protected readonly service: WorkflowService, protected readonly normalizeService: HookCallbackHandlerService, - // @nestAccessControl.InjectRolesBuilder() - // protected readonly rolesBuilder: nestAccessControl.RolesBuilder, private readonly workflowTokenService: WorkflowTokenService, private readonly workflowDefinitionService: WorkflowDefinitionService, private readonly prismaService: PrismaService, @@ -380,20 +377,21 @@ export class WorkflowControllerExternal { @common.HttpCode(200) @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) async createCollectionFlowUrl( - @common.Body() { expiry, workflowRuntimeDataId, endUserId }: CreateCollectionFlowUrlDto, - @CurrentProject() currentProjectId: TProjectId, + @common.Body() + { workflowRuntimeDataId }: Pick, ) { - const expiresAt = new Date(Date.now() + (expiry || 30) * 24 * 60 * 60 * 1000); + const result = await this.workflowTokenService.findFirstByWorkflowruntimeDataIdUnscoped( + workflowRuntimeDataId, + ); - const { token } = await this.workflowTokenService.create(currentProjectId, { - workflowRuntimeDataId: workflowRuntimeDataId, - expiresAt, - endUserId, - }); + if (!result) { + throw new NotFoundException( + `No WorkflowRuntimeDataId was found for ${JSON.stringify(workflowRuntimeDataId)}`, + ); + } return { - token, - collectionFlowUrl: `${env.COLLECTION_FLOW_URL}?token=${token}`, + collectionFlowUrl: `${env.COLLECTION_FLOW_URL}?token=${result.token}`, }; } @@ -403,10 +401,16 @@ export class WorkflowControllerExternal { @common.HttpCode(200) @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) async createToken( - @common.Body() body: CreateCollectionFlowUrlDto, + @common.Body() { expiry, workflowRuntimeDataId, endUserId }: CreateCollectionFlowUrlDto, @CurrentProject() currentProjectId: TProjectId, ) { - const { token } = await this.createCollectionFlowUrl(body, currentProjectId); + const expiresAt = new Date(Date.now() + (expiry || 30) * 24 * 60 * 60 * 1000); + + const { token } = await this.workflowTokenService.create(currentProjectId, { + workflowRuntimeDataId: workflowRuntimeDataId, + expiresAt, + endUserId, + }); return { token, From f595dd52664c870db1baf9b29dcdbf030f2b325b Mon Sep 17 00:00:00 2001 From: Tomer Shvadron Date: Fri, 15 Nov 2024 02:07:18 +0200 Subject: [PATCH 12/18] feat: updated entity schema in default context schema --- .../common/src/schemas/documents/schemas/entity-schema.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/common/src/schemas/documents/schemas/entity-schema.ts b/packages/common/src/schemas/documents/schemas/entity-schema.ts index 0a4eaa1d1a..d5b8692fec 100644 --- a/packages/common/src/schemas/documents/schemas/entity-schema.ts +++ b/packages/common/src/schemas/documents/schemas/entity-schema.ts @@ -8,8 +8,8 @@ export const EntitySchema = Type.Object( isContactPerson: Type.Optional(Type.Boolean()), correlationId: Type.Optional(Type.Union([Type.String(), Type.Null()])), endUserType: Type.Optional(Type.Union([Type.String(), Type.Null()])), - firstName: Type.String(), - lastName: Type.String(), + firstName: Type.Optional(Type.String()), + lastName: Type.Optional(Type.String()), email: Type.Optional(Type.Union([Type.String(), Type.Null()])), phone: Type.Optional(Type.Union([Type.String(), Type.Null()])), country: Type.Optional( From 37a8a40acb7fdde2d127e1bceb237802b1805beb Mon Sep 17 00:00:00 2001 From: Tomer Shvadron Date: Fri, 15 Nov 2024 02:43:18 +0200 Subject: [PATCH 13/18] feat: fixed collection flow url and create token endpoints swagger schema --- .../workflow/dtos/create-collection-flow-url.dto.ts | 12 ++++++++++++ ...te-collection-flow-url.ts => create-token.dto.ts} | 2 +- .../src/workflow/workflow.controller.external.ts | 7 ++++--- 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 services/workflows-service/src/workflow/dtos/create-collection-flow-url.dto.ts rename services/workflows-service/src/workflow/dtos/{create-collection-flow-url.ts => create-token.dto.ts} (92%) diff --git a/services/workflows-service/src/workflow/dtos/create-collection-flow-url.dto.ts b/services/workflows-service/src/workflow/dtos/create-collection-flow-url.dto.ts new file mode 100644 index 0000000000..d1f2b05a76 --- /dev/null +++ b/services/workflows-service/src/workflow/dtos/create-collection-flow-url.dto.ts @@ -0,0 +1,12 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsString } from 'class-validator'; + +export class CreateCollectionFlowUrlDto { + @ApiProperty({ + required: true, + type: String, + }) + @IsNotEmpty() + @IsString() + workflowRuntimeDataId!: string; +} diff --git a/services/workflows-service/src/workflow/dtos/create-collection-flow-url.ts b/services/workflows-service/src/workflow/dtos/create-token.dto.ts similarity index 92% rename from services/workflows-service/src/workflow/dtos/create-collection-flow-url.ts rename to services/workflows-service/src/workflow/dtos/create-token.dto.ts index eaa00ca251..5da6d6317c 100644 --- a/services/workflows-service/src/workflow/dtos/create-collection-flow-url.ts +++ b/services/workflows-service/src/workflow/dtos/create-token.dto.ts @@ -1,7 +1,7 @@ import { ApiProperty } from '@nestjs/swagger'; import { IsNotEmpty, IsNumber, IsOptional, IsString } from 'class-validator'; -export class CreateCollectionFlowUrlDto { +export class CreateTokenDto { @ApiProperty({ required: true, type: String, diff --git a/services/workflows-service/src/workflow/workflow.controller.external.ts b/services/workflows-service/src/workflow/workflow.controller.external.ts index 5d529848bc..313e3ba4ec 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.ts @@ -18,7 +18,7 @@ import { PrismaService } from '@/prisma/prisma.service'; import type { AnyRecord, InputJsonValue, TProjectId, TProjectIds } from '@/types'; import { WORKFLOW_DEFINITION_TAG } from '@/workflow-defintion/workflow-definition.controller'; import { WorkflowDefinitionService } from '@/workflow-defintion/workflow-definition.service'; -import { CreateCollectionFlowUrlDto } from '@/workflow/dtos/create-collection-flow-url'; +import { CreateCollectionFlowUrlDto } from '@/workflow/dtos/create-collection-flow-url.dto'; import { GetWorkflowsRuntimeInputDto } from '@/workflow/dtos/get-workflows-runtime-input.dto'; import { GetWorkflowsRuntimeOutputDto } from '@/workflow/dtos/get-workflows-runtime-output.dto'; import { WorkflowHookQuery } from '@/workflow/dtos/workflow-hook-query'; @@ -44,6 +44,7 @@ import { defaultContextSchema } from '@ballerine/common'; import { WorkflowRunSchema } from './schemas/workflow-run'; import { ValidationError } from '@/errors'; import { WorkflowRuntimeListItemModel } from '@/workflow/workflow-runtime-list-item.model'; +import { CreateTokenDto } from '@/workflow/dtos/create-token.dto'; export const WORKFLOW_TAG = 'Workflows'; @swagger.ApiBearerAuth() @@ -378,7 +379,7 @@ export class WorkflowControllerExternal { @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) async createCollectionFlowUrl( @common.Body() - { workflowRuntimeDataId }: Pick, + { workflowRuntimeDataId }: CreateCollectionFlowUrlDto, ) { const result = await this.workflowTokenService.findFirstByWorkflowruntimeDataIdUnscoped( workflowRuntimeDataId, @@ -401,7 +402,7 @@ export class WorkflowControllerExternal { @common.HttpCode(200) @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) async createToken( - @common.Body() { expiry, workflowRuntimeDataId, endUserId }: CreateCollectionFlowUrlDto, + @common.Body() { expiry, workflowRuntimeDataId, endUserId }: CreateTokenDto, @CurrentProject() currentProjectId: TProjectId, ) { const expiresAt = new Date(Date.now() + (expiry || 30) * 24 * 60 * 60 * 1000); From c67a5961e0027be9600466dd26b77db372c1ed8b Mon Sep 17 00:00:00 2001 From: liorzam <6435752+liorzam@users.noreply.github.com> Date: Sat, 16 Nov 2024 14:40:48 +0200 Subject: [PATCH 14/18] fix: fetch more transaction (#2805) --- .../useTransactionMonitoringAlertsAnalysisPageLogic.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/backoffice-v2/src/pages/TransactionMonitoringAlertsAnalysis/hooks/useTransactionMonitoringAlertsAnalysisPageLogic/useTransactionMonitoringAlertsAnalysisPageLogic.tsx b/apps/backoffice-v2/src/pages/TransactionMonitoringAlertsAnalysis/hooks/useTransactionMonitoringAlertsAnalysisPageLogic/useTransactionMonitoringAlertsAnalysisPageLogic.tsx index 3eda80cb28..9e4be9d012 100644 --- a/apps/backoffice-v2/src/pages/TransactionMonitoringAlertsAnalysis/hooks/useTransactionMonitoringAlertsAnalysisPageLogic/useTransactionMonitoringAlertsAnalysisPageLogic.tsx +++ b/apps/backoffice-v2/src/pages/TransactionMonitoringAlertsAnalysis/hooks/useTransactionMonitoringAlertsAnalysisPageLogic/useTransactionMonitoringAlertsAnalysisPageLogic.tsx @@ -17,7 +17,7 @@ export const useTransactionMonitoringAlertsAnalysisPageLogic = () => { // @TODO: Remove counterpartyId: counterpartyId ?? '', page: 1, - pageSize: 50, + pageSize: 500, }); const navigate = useNavigate(); const onNavigateBack = useCallback(() => { From db4388779e2f072fd7574dc627e8a39c3aa4bf3f Mon Sep 17 00:00:00 2001 From: Matan Yadaev Date: Sun, 17 Nov 2024 16:47:25 +0200 Subject: [PATCH 15/18] feat: send failed reports to the manual review (#2843) --- .../useCreateBusinessReportBatchMutation.tsx | 3 --- .../useCreateBusinessReportMutation.tsx | 3 --- .../pages/MerchantMonitoring/MerchantMonitoring.page.tsx | 8 +++----- .../components/MerchantMonitoringTable/columns.tsx | 1 + .../useMerchantMonitoringBusinessReportLogic.tsx | 1 + services/workflows-service/prisma/data-migrations | 2 +- 6 files changed, 6 insertions(+), 12 deletions(-) diff --git a/apps/backoffice-v2/src/domains/business-reports/hooks/mutations/useCreateBusinessReportBatchMutation/useCreateBusinessReportBatchMutation.tsx b/apps/backoffice-v2/src/domains/business-reports/hooks/mutations/useCreateBusinessReportBatchMutation/useCreateBusinessReportBatchMutation.tsx index 841a4f888b..bf205b9000 100644 --- a/apps/backoffice-v2/src/domains/business-reports/hooks/mutations/useCreateBusinessReportBatchMutation/useCreateBusinessReportBatchMutation.tsx +++ b/apps/backoffice-v2/src/domains/business-reports/hooks/mutations/useCreateBusinessReportBatchMutation/useCreateBusinessReportBatchMutation.tsx @@ -29,9 +29,6 @@ export const useCreateBusinessReportBatchMutation = ({ merchantSheet, isExample: customer?.config?.isExample ?? false, }); - - // Artificial delay to ensure report is created in Unified API's DB - await new Promise(resolve => setTimeout(resolve, 3000)); }, onSuccess: data => { void queryClient.invalidateQueries(); diff --git a/apps/backoffice-v2/src/domains/business-reports/hooks/mutations/useCreateBusinessReportMutation/useCreateBusinessReportMutation.tsx b/apps/backoffice-v2/src/domains/business-reports/hooks/mutations/useCreateBusinessReportMutation/useCreateBusinessReportMutation.tsx index 2429f70c6a..b816ab61c3 100644 --- a/apps/backoffice-v2/src/domains/business-reports/hooks/mutations/useCreateBusinessReportMutation/useCreateBusinessReportMutation.tsx +++ b/apps/backoffice-v2/src/domains/business-reports/hooks/mutations/useCreateBusinessReportMutation/useCreateBusinessReportMutation.tsx @@ -43,9 +43,6 @@ export const useCreateBusinessReportMutation = ({ workflowVersion, isExample: customer?.config?.isExample ?? false, }); - - // Artificial delay to ensure report is created in Unified API's DB - await new Promise(resolve => setTimeout(resolve, 3000)); }, onSuccess: data => { if (customer?.config?.isExample) { diff --git a/apps/backoffice-v2/src/pages/MerchantMonitoring/MerchantMonitoring.page.tsx b/apps/backoffice-v2/src/pages/MerchantMonitoring/MerchantMonitoring.page.tsx index 130ddc8c59..77ef7582a3 100644 --- a/apps/backoffice-v2/src/pages/MerchantMonitoring/MerchantMonitoring.page.tsx +++ b/apps/backoffice-v2/src/pages/MerchantMonitoring/MerchantMonitoring.page.tsx @@ -90,11 +90,9 @@ export const MerchantMonitoring: FunctionComponent = () => { - {!!businessReports?.length && ( -
- -
- )} +
+ +
{isNonEmptyArray(businessReports) && } {Array.isArray(businessReports) && !businessReports.length && !isLoadingBusinessReports && ( diff --git a/apps/backoffice-v2/src/pages/MerchantMonitoring/components/MerchantMonitoringTable/columns.tsx b/apps/backoffice-v2/src/pages/MerchantMonitoring/components/MerchantMonitoringTable/columns.tsx index de80472b63..3ba4b15a7b 100644 --- a/apps/backoffice-v2/src/pages/MerchantMonitoring/components/MerchantMonitoringTable/columns.tsx +++ b/apps/backoffice-v2/src/pages/MerchantMonitoring/components/MerchantMonitoringTable/columns.tsx @@ -166,6 +166,7 @@ export const columns = [ {titleCase(statusToDisplayStatus[status as keyof typeof statusToDisplayStatus] ?? status)} diff --git a/apps/backoffice-v2/src/pages/MerchantMonitoringBusinessReport/hooks/useMerchantMonitoringBusinessReportLogic/useMerchantMonitoringBusinessReportLogic.tsx b/apps/backoffice-v2/src/pages/MerchantMonitoringBusinessReport/hooks/useMerchantMonitoringBusinessReportLogic/useMerchantMonitoringBusinessReportLogic.tsx index 29c67ec751..9b57afcb9c 100644 --- a/apps/backoffice-v2/src/pages/MerchantMonitoringBusinessReport/hooks/useMerchantMonitoringBusinessReportLogic/useMerchantMonitoringBusinessReportLogic.tsx +++ b/apps/backoffice-v2/src/pages/MerchantMonitoringBusinessReport/hooks/useMerchantMonitoringBusinessReportLogic/useMerchantMonitoringBusinessReportLogic.tsx @@ -62,6 +62,7 @@ export const useMerchantMonitoringBusinessReportLogic = () => { variant: 'violet', text: 'Quality Control', }, + [MERCHANT_REPORT_STATUSES_MAP['failed']]: { variant: 'destructive', text: 'Failed' }, } as const; const websiteWithNoProtocol = safeUrl(businessReport?.website)?.hostname; diff --git a/services/workflows-service/prisma/data-migrations b/services/workflows-service/prisma/data-migrations index a0c3055b4d..ce93f44f91 160000 --- a/services/workflows-service/prisma/data-migrations +++ b/services/workflows-service/prisma/data-migrations @@ -1 +1 @@ -Subproject commit a0c3055b4df212f7d4cf13a200593fe4de2ae909 +Subproject commit ce93f44f91051f3f875fc9ea6d04ef2b4d8c18cb From 9e00dae35990890e9f11807e61f6dc4d8917d641 Mon Sep 17 00:00:00 2001 From: ImmanuelSegol <3ditds@gmail.com> Date: Sun, 17 Nov 2024 11:47:00 -0500 Subject: [PATCH 16/18] Update simple_kyb_guide.mdx (#2845) --- websites/docs/src/content/docs/en/learn/simple_kyb_guide.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/websites/docs/src/content/docs/en/learn/simple_kyb_guide.mdx b/websites/docs/src/content/docs/en/learn/simple_kyb_guide.mdx index 52da18fea2..bd25f38e19 100644 --- a/websites/docs/src/content/docs/en/learn/simple_kyb_guide.mdx +++ b/websites/docs/src/content/docs/en/learn/simple_kyb_guide.mdx @@ -189,7 +189,7 @@ To create a new workflow instance, execute the following `curl` command: "pages": [ { "provider": "http", - "uri": "https://www.africau.edu/images/default/sample.pdf", + "uri": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf", "metadata": { "side": "front", "pageNumber": "1" From f8dba172d556981d6870efe21b69888a2e12a283 Mon Sep 17 00:00:00 2001 From: Alon Peretz <8467965+alonp99@users.noreply.github.com> Date: Mon, 18 Nov 2024 01:39:38 +0200 Subject: [PATCH 17/18] docs(README): update local environment setup instructions - Revise URLs for document collection flows for clarity - Streamline instructions for tab positioning and workflow steps (your documentation is so detailed, it could double as a short novel) --- README.md | 49 ++++++++++++------- deploy/.env | 3 +- .../plugins/external-plugin/webhook-plugin.ts | 5 +- .../workflow-core/src/lib/workflow-runner.ts | 1 + services/workflows-service/.env.example | 3 +- .../workflows/e2e-dynamic-url-example.ts | 2 + 6 files changed, 41 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index dbe14570b3..4702d91733 100644 --- a/README.md +++ b/README.md @@ -104,24 +104,37 @@ To set up a local environment, follow these steps: pnpm kyc-manual-review-example ``` Once the process is complete, _2 tabs_ will open in your browser: -1. http://localhost:5201/ - for the _KYB document collection flow_ - OR http://localhost:5202 - for the _KYC document collection flow_ -2. http://localhost:5137/ - for the _backoffice_ - (See username/password below, It's recommended to have them positioned side-by-side). - - If the required tabs have not opened automatically, please use the links we have provided above. - - **Steps to go over the flow:** - -1. Go to the Backoffice tab to review the new user that was created - 1.1. Sign-in with the following credentials: - - **Email:** `admin@admin.com` - - **Password:** `admin` - 1.2. Under the business menu, choose "KYB with UBOs" to view the list of cases currently undergoing. -2. On the Collection flow, fill in the required fields on each step. -3. Go through and complete the flow. As you go through the collection flow, you should see the progress in the Backoffice case. -4. Once the collection flow is finished, you can see the new state is "manual review," Assign the case to yourself, and then you will be able to choose to Approve, Reject, or Ask to Resubmit. -5. Ask to resubmit a document, go back to the collection flow to re-upload, then go back to the Backoffice to see the updated information. +1. Document Collection Flow: + - KYB: [http://localhost:5201/](http://localhost:5201/) + - KYC: [http://localhost:5202](http://localhost:5202) +2. Back Office: [http://localhost:5137/](http://localhost:5137/) + _(It's recommended to position both tabs side-by-side)_ + +> **Note:** If the tabs don't open automatically, use the links above. + +### Flow Instructions + +1. **Access the Back Office** + - Sign in using: + ``` + Email: admin@admin.com + Password: admin + ``` + - Navigate to "KYB with UBOs" under the business menu to view ongoing cases + +2. **Complete the Collection Flow** + - Fill out all required fields in each step + - The Back Office case will update as you progress + +3. **Review & Process** + - Once complete, the case status changes to "manual review" + - Assign the case to yourself + - Choose to: Approve, Reject, or Request Resubmission + +4. **Document Resubmission** + - Request a document resubmission + - Return to collection flow to upload new document + - Check Back Office for updated information * Note: some components are currently in beta, if you run into an issue please ping us on Slack diff --git a/deploy/.env b/deploy/.env index 52aa0054b2..cb30c1c312 100644 --- a/deploy/.env +++ b/deploy/.env @@ -21,7 +21,6 @@ SALESFORCE_API_VERSION=58.0 SALESFORCE_CONSUMER_KEY= SALESFORCE_CONSUMER_SECRET= #HASHING_KEY_SECRET="$2b$10$FovZTB91/QQ4Yu28nvL8e." -HASHING_KEY_SECRET_BASE64=JDJiJDEwJDNFeWtwWEs4QkdiczlRaWFwLkM4Vk8= NOTION_API_KEY=secret WORKFLOW_SVC_PORT=3000 WORKFLOW_DASHBOARD_PORT=5200 @@ -29,3 +28,5 @@ WEBSOCKET_SVC_PORT=3500 KYB_APP_PORT=5201 BACKOFFICE_PORT=5137 HEADLESS_SVC_PORT=5173 +HASHING_KEY_SECRET_BASE64=JDJiJDEwJFRYNjhmQi5JMlRCWHN0aGowakFHSi4= +SECRETS_MANAGER_PROVIDER=in-memory diff --git a/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.ts b/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.ts index 4f0a3c8ed9..15a35dd588 100644 --- a/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.ts +++ b/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.ts @@ -1,10 +1,11 @@ import { AnyRecord, isErrorWithMessage, sign } from '@ballerine/common'; import { logger } from '../../logger'; import { TContext } from '../../utils/types'; -import { BallerineApiPlugin, IBallerineApiPluginParams } from './ballerine-plugin'; +import { IBallerineApiPluginParams } from './ballerine-plugin'; import { IApiPluginParams } from './types'; +import { ApiPlugin } from '.'; -export class WebhookPlugin extends BallerineApiPlugin { +export class WebhookPlugin extends ApiPlugin { public static pluginType = 'http'; constructor(pluginParams: IBallerineApiPluginParams & IApiPluginParams) { super(pluginParams); diff --git a/packages/workflow-core/src/lib/workflow-runner.ts b/packages/workflow-core/src/lib/workflow-runner.ts index b4a810ae82..27c31b4e31 100644 --- a/packages/workflow-core/src/lib/workflow-runner.ts +++ b/packages/workflow-core/src/lib/workflow-runner.ts @@ -778,6 +778,7 @@ export class WorkflowRunner { }); if (error) { + console.error(error); logger.error('WORKFLOW CORE:: Error invoking plugin', { error, stack: error instanceof Error ? error.stack : undefined, diff --git a/services/workflows-service/.env.example b/services/workflows-service/.env.example index e6f10cfd17..72780fb0b1 100644 --- a/services/workflows-service/.env.example +++ b/services/workflows-service/.env.example @@ -33,5 +33,6 @@ APP_API_URL=http://localhost:3000 COLLECTION_FLOW_URL=http://localhost:5201 WEB_UI_SDK_URL=http://localhost:5202 #HASHING_KEY_SECRET="$2b$10$FovZTB91/QQ4Yu28nvL8e." -HASHING_KEY_SECRET_BASE64=JDJiJDEwJDNFeWtwWEs4QkdiczlRaWFwLkM4Vk8= NOTION_API_KEY=secret +HASHING_KEY_SECRET_BASE64=JDJiJDEwJFRYNjhmQi5JMlRCWHN0aGowakFHSi4= +SECRETS_MANAGER_PROVIDER=in-memory \ No newline at end of file diff --git a/services/workflows-service/scripts/workflows/e2e-dynamic-url-example.ts b/services/workflows-service/scripts/workflows/e2e-dynamic-url-example.ts index e7eb174681..931ac97958 100644 --- a/services/workflows-service/scripts/workflows/e2e-dynamic-url-example.ts +++ b/services/workflows-service/scripts/workflows/e2e-dynamic-url-example.ts @@ -195,6 +195,7 @@ export const kybWithDynamicExternalRequestWorkflowExample = { name: 'finish_webhook', url: 'https://webhook.site/3c48b14f-1a70-4f73-9385-fab2d0db0db8', method: 'POST', + pluginKind: 'webhook', stateNames: ['auto_approve', 'approve', 'reject'], headers: { authorization: 'Bearer {secret.BUSINESS_DATA__VENDOR_API_KEY}', @@ -212,6 +213,7 @@ export const kybWithDynamicExternalRequestWorkflowExample = { name: 'fail_webhook', url: 'https://webhook.site/3c48b14f-1a70-4f73-9385-fab2d0db0db8', method: 'POST', + pluginKind: 'webhook', stateNames: ['auto_reject'], request: { transform: [ From 8121b8d6626bf28c6d283507788391a0b698b0ec Mon Sep 17 00:00:00 2001 From: Matan Yadaev Date: Wed, 20 Nov 2024 10:37:05 +0200 Subject: [PATCH 18/18] fix: data-migrations --- services/workflows-service/prisma/data-migrations | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/workflows-service/prisma/data-migrations b/services/workflows-service/prisma/data-migrations index ce93f44f91..c31151af31 160000 --- a/services/workflows-service/prisma/data-migrations +++ b/services/workflows-service/prisma/data-migrations @@ -1 +1 @@ -Subproject commit ce93f44f91051f3f875fc9ea6d04ef2b4d8c18cb +Subproject commit c31151af31faded0a66a9ab20ff4680ea07feb1f