diff --git a/api/package.json b/api/package.json index ae1bd6e..9a8e756 100644 --- a/api/package.json +++ b/api/package.json @@ -28,10 +28,10 @@ "@nestjs/core": "^10.0.0", "@nestjs/platform-express": "^10.0.0", "@noahspan/azure-database": "^3.1.2", - "@noahspan/noahspan-modules": "^0.6.5", + "@noahspan/noahspan-modules": "^1.0.0", "axios": "^1.7.9", - "reflect-metadata": "^0.1.14", - "rxjs": "^7.8.1", + "reflect-metadata": "^0.2.2", + "rxjs": "^7.8.2", "uuid": "^11.0.5" }, "devDependencies": { diff --git a/api/src/app.controller.ts b/api/src/app.controller.ts deleted file mode 100644 index 3bf2b15..0000000 --- a/api/src/app.controller.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { - Controller, - Get, - Headers, - Query, - StreamableFile, - UseGuards -} from '@nestjs/common'; -// import { Client as MsGraphClient } from '@microsoft/microsoft-graph-client'; -import { MsGraphService } from '@noahspan/noahspan-modules' - -@Controller() -export class AppController { - constructor( - private readonly msGraphService: MsGraphService - ) {} - - @Get('userPhoto') - async getProfilePhoto(@Headers() headers: any): Promise { - // try { - // const graphToken: string = await this.msGraphService.getMsGraphAuth( - // headers.authorization.replace('Bearer ', ''), - // ['user.read'] - // ); - // const client: MsGraphClient = - // await this.msGraphService.getMsGraphClientDelegated(graphToken); - // const blob: Blob = await client.api(`me/photos('48x48')/$value`).get(); - // const arrayBuffer: ArrayBuffer = await blob.arrayBuffer(); - // const buffer: Buffer = Buffer.from(arrayBuffer); - - // return new StreamableFile(buffer, { - // type: 'application/json', - // disposition: `attachment; filename="user_photo.png"` - // }); - // } catch (error) { - // return error; - // } - - try { - const buffer = await this.msGraphService.getProfilePhoto( - headers.authorization.replace('Bearer ', ''), - ['user.read'] - ) - - return new StreamableFile(buffer, { - type: 'application/json', - disposition: `attachment; filename="user_photo.png"` - }); - } catch (error) { - return error; - } - } - - @Get('userProfile') - async getUserProfile(@Headers() headers: any): Promise { - // try { - // const graphToken: string = await this.msGraphService.getMsGraphAuth( - // headers.authorization.replace('Bearer ', ''), - // ['user.read'] - // ); - // const client: MsGraphClient = - // await this.msGraphService.getMsGraphClientDelegated(graphToken); - // const userProfile = await client.api(`me`).get(); - - // return userProfile; - // } catch (error) { - // return error; - // } - - try { - const userProfile = await this.msGraphService.getUserProfile(headers.authorization.replace('Bearer ', '')); - - return userProfile; - } catch (error) { - return error; - } - } -} diff --git a/api/src/app.module.ts b/api/src/app.module.ts index bd23c2b..b821836 100644 --- a/api/src/app.module.ts +++ b/api/src/app.module.ts @@ -2,10 +2,9 @@ import { Module } from '@nestjs/common'; import { APP_FILTER, APP_GUARD } from '@nestjs/core'; import { HttpExceptionFilter } from './filters/http-exception.filter'; import { ProjectModule } from './project/project.module'; -import { AuthGuard, AuthModule, MsGraphModule } from '@noahspan/noahspan-modules' +import { AuthGuard, AuthModule, UserModule } from '@noahspan/noahspan-modules' import { ConfigModule, ConfigService } from '@nestjs/config'; import configuration from './config/configuration'; -import { AppController } from './app.controller'; @Module({ imports: [ @@ -23,7 +22,7 @@ import { AppController } from './app.controller'; ConfigModule.forRoot({ load: [configuration] }), - MsGraphModule.registerAsync({ + UserModule.registerAsync({ inject: [ConfigService], imports: [ConfigModule], useFactory: async (configService: ConfigService) => { @@ -36,7 +35,6 @@ import { AppController } from './app.controller'; }), ProjectModule ], - controllers: [AppController], providers: [ { provide: APP_FILTER, diff --git a/api/src/config/configuration.ts b/api/src/config/configuration.ts index b92caed..2354131 100644 --- a/api/src/config/configuration.ts +++ b/api/src/config/configuration.ts @@ -1,4 +1,5 @@ export default () => ({ + azureStorageConnectionString: process.env.AZURE_STORAGE_CONNECTION_STRING, clientId: process.env.CLIENT_ID, clientSecret: process.env.CLIENT_SECRET, tenantId: process.env.TENANT_ID diff --git a/app/package.json b/app/package.json index 13cecaf..c8fdde7 100644 --- a/app/package.json +++ b/app/package.json @@ -1,5 +1,5 @@ { - "name": "app2", + "name": "app", "private": true, "version": "0.0.3", "type": "module", diff --git a/app/src/App.tsx b/app/src/App.tsx index a351b1b..0a94c6d 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -1,7 +1,6 @@ import { Route, Routes } from 'react-router-dom'; import Projects from './components/projects/Projects'; import SiteNav from './components/siteNav/SiteNav'; -import { useAppContext } from './hooks/appContext/UseAppContext'; import { IPublicClientApplication } from '@azure/msal-browser'; import { MsalProvider } from '@azure/msal-react'; @@ -10,8 +9,6 @@ interface AppProps { } const App = ({ pca }: AppProps) => { - const appContext = useAppContext(); - return ( diff --git a/app/src/components/actionMenu/ActionMenu.tsx b/app/src/components/actionMenu/ActionMenu.tsx index c411075..353582c 100644 --- a/app/src/components/actionMenu/ActionMenu.tsx +++ b/app/src/components/actionMenu/ActionMenu.tsx @@ -3,6 +3,7 @@ import { ActionMenuProps } from './ActionMenuProps.interface'; import { Icon, IconButton, + IconName, ListItemIcon, ListItemText, Menu, @@ -26,7 +27,7 @@ const ActionMenu = ({ id, onDelete, onOpenCloseForm }: ActionMenuProps) => { return (
- + { > onOpenCloseForm(FormMode.EDIT, id)}> - + Edit onOpenCloseForm(FormMode.VIEW, id)}> - + View
onDelete(id)}> - + Delete diff --git a/app/src/components/confirmationDialog/ConfirmationDialog.tsx b/app/src/components/confirmationDialog/ConfirmationDialog.tsx index cf0b008..3f8281f 100644 --- a/app/src/components/confirmationDialog/ConfirmationDialog.tsx +++ b/app/src/components/confirmationDialog/ConfirmationDialog.tsx @@ -1,5 +1,4 @@ import { - Box, Button, Dialog, DialogActions, @@ -7,6 +6,7 @@ import { DialogContentText, DialogTitle, Icon, + IconName, Spinner } from '@noahspan/noahspan-components'; import { ConfirmationDialogProps } from './ConfirmationDialogProps.interface'; @@ -33,13 +33,13 @@ const ConfirmationDialog = ({ {isLoading && } - diff --git a/app/src/components/projectForm/ProjectForm.tsx b/app/src/components/projectForm/ProjectForm.tsx index 32a700f..5977fb6 100644 --- a/app/src/components/projectForm/ProjectForm.tsx +++ b/app/src/components/projectForm/ProjectForm.tsx @@ -15,7 +15,7 @@ import { initialState, reducer } from './reducer'; import { ProjectFormProps } from './ProjectFormProps.interface'; import { FormMode } from '../../enums/formMode'; import { useIsAuthenticated } from '@azure/msal-react'; -import { useAccessToken } from '../../hooks/accessToken/UseAccessToken'; +import { useAccessToken } from '../../hooks/accessToken/UseAccessToken' import { useHttpClient } from '../../hooks/httpClient/UseHttpClient'; import { AxiosError, AxiosInstance, AxiosResponse } from 'axios'; diff --git a/app/src/components/projects/Projects.tsx b/app/src/components/projects/Projects.tsx index c2e28f6..7fe6b43 100644 --- a/app/src/components/projects/Projects.tsx +++ b/app/src/components/projects/Projects.tsx @@ -1,5 +1,6 @@ import { Project } from './Project.interface'; import { + Alert, Box, Button, Card, @@ -10,6 +11,7 @@ import { Grid, Icon, IconName, + Spinner, Typography } from '@noahspan/noahspan-components'; import { useIsAuthenticated } from '@azure/msal-react'; @@ -29,33 +31,15 @@ const Projects = () => { const isAuthenticated = useIsAuthenticated(); const { getAccessToken } = useAccessToken(); - const findIconByName: IconName = (name: string) => { - const keys = Object.keys(IconName); - - for (const key of keys) { - if (IconName[key] === name) { - return key - } - } - - return undefined; - } - const getProjects = async (): Promise => { try { - // const config = isAuthenticated - // ? { headers: { Authorization: await getAccessToken() } } - // : {}; const response: AxiosResponse = await httpClient.get( `api/projects`, - // config ); const projects: Project[] = response.data; projects.sort((a, b) => Number(a.order) - Number(b.order)) - console.log(projects) - return projects; } catch (error) { throw new Error('broken'); @@ -107,19 +91,19 @@ const Projects = () => { ? { headers: { Authorization: `${token}` } } : {}; - // await httpClient.delete(`api/logs/log/${state.selectedEntryId}`, config); + await httpClient.delete(`api/projects/project/${state.selectedProjectId}`, config); dispatch({ type: 'SET_DELETE', payload: { isConfirmationDialogOpen: false, selectedProjectId: undefined } }); - // await getProjects(); + await getProjects(); } catch (error) { const axiosError = error as AxiosError; dispatch({ - type: 'SET_ERROR', - payload: `Loading of logbook entries failed with the following message: ${axiosError.message}` + type: 'SET_ALERT', + payload: { severity: 'error', message: `Loading of projects failed with the following message: ${axiosError.message}` } }); } finally { dispatch({ type: 'SET_IS_CONFIRMATION_DIALOG_LOADING', payload: false }); @@ -136,16 +120,24 @@ const Projects = () => { useEffect(() => { const loadProjects = async () => { try { + dispatch({ type: 'SET_IS_LOADING', payload: true }) const projects = await getProjects(); dispatch({ type: 'SET_PROJECTS', payload: projects }) } catch (error) { - console.log(error); + dispatch({ + type: 'SET_ALERT', + payload: { severity: 'error', message: `Loading of projects failed with the following message: ${error}` } + }); + } finally { + dispatch({ type: 'SET_IS_LOADING', payload: false }) } } - loadProjects() - }, []); + if (!state.isFormOpen || !state.isConfirmDialogOpen) { + loadProjects(); + } + }, [state.isFormOpen, state.isConfirmDialogOpen]); return ( @@ -158,14 +150,27 @@ const Projects = () => { {isAuthenticated && } - {state.projects.length > 0 && state.projects.map((project: Project) => { + {!state.isLoading && state.alert && ( + + + dispatch({ type: 'SET_ALERT', payload: undefined }) + } + severity={state.alert.severity} + sx={{ width: '100%' }} + > + {state.alert.message} + + + )} + {!state.isLoading && state.projects.length > 0 && state.projects.map((project: Project) => { return ( { > : null} - avatar={} + avatar={} subheader={project.subTitle} title={project.title} slotProps={{ @@ -198,7 +203,6 @@ const Projects = () => { component='a' href={`https://github.com/noahspannbauer/${project.repoName}`} startIcon={} - target='_blank' > Code @@ -221,6 +225,16 @@ const Projects = () => { ) })} + {state.isLoading && ( + <> + + + + + Loading... + + + )} {state.isFormOpen && { - const [loading, setLoading] = useState(false); +const SiteNav: React.FC = () => { const [userPhoto, setUserPhoto] = useState(); + const [pages, setPages] = useState<{ name: string; url: string; }[]>([]); const httpClient: AxiosInstance = useHttpClient(); const appContext = useAppContext(); const isAuthenticated = useIsAuthenticated(); const { getAccessToken } = useAccessToken(); const { instance } = useMsal(); const navigate = useNavigate(); - const pages = [ - { - name: 'Projects', - url: '/' - } - ]; + const getPages = () => { + const pages = [ + { + name: 'Projects', + url: '/' + } + ]; + + setPages(pages) + }; const handleSignIn = () => { instance.loginRedirect({ scopes: [`api://${import.meta.env.VITE_CLIENT_ID}/user_impersonation`] @@ -39,7 +43,7 @@ const SiteNav = () => { }; const getUserProfile = async (accessToken: string): Promise => { try { - const response: AxiosResponse = await httpClient.get(`api/userProfile`, { + const response: AxiosResponse = await httpClient.get(`api/user/profile`, { headers: { Authorization: accessToken } @@ -53,7 +57,7 @@ const SiteNav = () => { }; const getUserPhoto = async (accessToken: string): Promise => { try { - const response: AxiosResponse = await httpClient.get(`api/userPhoto`, { + const response: AxiosResponse = await httpClient.get(`api/user/photo`, { headers: { Authorization: accessToken }, @@ -76,7 +80,7 @@ const SiteNav = () => { const Settings = () => { return ( - + Sign Out @@ -87,11 +91,10 @@ const SiteNav = () => { useEffect(() => { const setUserProfile = async () => { try { - setLoading(true); - const accessToken: string = await getAccessToken(); const userProfile = await getUserProfile(accessToken); const userPhoto = await getUserPhoto(accessToken); + console.log(userPhoto) setUserPhoto(userPhoto); @@ -101,8 +104,6 @@ const SiteNav = () => { }); } catch (error) { console.log(error); - } finally { - setLoading(false); } }; @@ -111,15 +112,20 @@ const SiteNav = () => { Object.keys(appContext.state.userProfile).length === 0 ) { setUserProfile(); + getPages(); } }, [isAuthenticated]); + useEffect(() => { + getPages(); + }, []) + return ( } + logo={} pages={pages} settings={} userPhoto={userPhoto} diff --git a/app/src/context/appContext/AppContextProvider.tsx b/app/src/context/appContext/AppContextProvider.tsx index f1d20a4..3dcbc52 100644 --- a/app/src/context/appContext/AppContextProvider.tsx +++ b/app/src/context/appContext/AppContextProvider.tsx @@ -9,7 +9,6 @@ const AppContextProvider = ( props: AppContextProviderProps ) => { const intialState: AppContextState = { - featureFlags: [], userProfile: {} }; const [state, dispatch] = useReducer(reducer, intialState); diff --git a/app/src/context/appContext/AppContextState.interface.ts b/app/src/context/appContext/AppContextState.interface.ts index 6839fae..2fe9791 100644 --- a/app/src/context/appContext/AppContextState.interface.ts +++ b/app/src/context/appContext/AppContextState.interface.ts @@ -1,6 +1,5 @@ import { User } from '@microsoft/microsoft-graph-types'; export interface AppContextState { - featureFlags: { key: string; enabled: boolean }[]; userProfile: User; } diff --git a/app/src/interfaces.ts b/app/src/interfaces.ts new file mode 100644 index 0000000..5bbdf16 --- /dev/null +++ b/app/src/interfaces.ts @@ -0,0 +1,4 @@ +export interface Alert { + severity: 'success' | 'error' | 'info' | 'warning'; + message: string; +} \ No newline at end of file diff --git a/package.json b/package.json index b8b9279..b5e7e55 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,11 @@ { - "name": "noahspan-root", + "name": "@noahspan/noahspan-root", "version": "1.0.0", - "description": "", - "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "preprod": "rimraf ./.prod && pnpm --filter api build && pnpm --filter app build", "prod": "pnpm --filter api --prod deploy ./.prod/api && pnpm --filter app --prod deploy ./.prod/app" }, - "author": "", - "license": "ISC", "devDependencies": { "rimraf": "^6.0.1" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e277bea..3e370be 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,37 +20,37 @@ importers: version: 1.2.3 '@nestjs/axios': specifier: ^4.0.0 - version: 4.0.0(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(axios@1.7.9)(rxjs@7.8.1) + version: 4.0.0(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(axios@1.7.9)(rxjs@7.8.2) '@nestjs/azure-func-http': specifier: ^0.10.0 - version: 0.10.0(@azure/functions@1.2.3)(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.15)(reflect-metadata@0.1.14) + version: 0.10.0(@azure/functions@1.2.3)(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.15)(reflect-metadata@0.2.2) '@nestjs/common': specifier: ^10.0.0 - version: 10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1) + version: 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/config': specifier: ^4.0.0 - version: 4.0.0(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(rxjs@7.8.1) + version: 4.0.0(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2) '@nestjs/core': specifier: ^10.0.0 - version: 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.1.14)(rxjs@7.8.1) + version: 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/platform-express': specifier: ^10.0.0 - version: 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.15) + version: 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.15) '@noahspan/azure-database': specifier: ^3.1.2 - version: 3.1.2(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.15) + version: 3.1.2(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.15) '@noahspan/noahspan-modules': - specifier: ^0.6.5 - version: 0.6.5 + specifier: ^1.0.0 + version: 1.0.0 axios: specifier: ^1.7.9 version: 1.7.9 reflect-metadata: - specifier: ^0.1.14 - version: 0.1.14 + specifier: ^0.2.2 + version: 0.2.2 rxjs: - specifier: ^7.8.1 - version: 7.8.1 + specifier: ^7.8.2 + version: 7.8.2 uuid: specifier: ^11.0.5 version: 11.0.5 @@ -66,7 +66,7 @@ importers: version: 10.2.3(chokidar@3.6.0)(typescript@5.7.3) '@nestjs/testing': specifier: ^10.0.0 - version: 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.15)(@nestjs/platform-express@10.4.15) + version: 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.15)(@nestjs/platform-express@10.4.15) '@schematics/angular': specifier: ^19.1.4 version: 19.1.6(chokidar@3.6.0) @@ -1446,8 +1446,8 @@ packages: '@noahspan/noahspan-modules@0.5.9': resolution: {integrity: sha512-kkL9P/TNxuPp5T/gd6gTLAmAGi8SJD4MjTWtsrMvw4WWF69x69m2Nr2G6zCv9WLtFrm4NaJhF8I1MVVuNOCinw==} - '@noahspan/noahspan-modules@0.6.5': - resolution: {integrity: sha512-XxmEuaO8v6/u4A5hHZHjyCqY0rrkGqVqqydkZ02Gt0EuErVOo8QuiqEkfEZGLeZNmKZI86IOXWpbXOyn8YGz2g==} + '@noahspan/noahspan-modules@1.0.0': + resolution: {integrity: sha512-wO+wsf7AoX2uh+8eDoJHUqObHs5YRk4hzQZZrMB8QIt9HYkg598WMoLzQ1GghYi9o6+aClFSZekXh6+h6SS9IQ==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -4765,9 +4765,6 @@ packages: resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} engines: {node: '>= 4'} - reflect-metadata@0.1.14: - resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} - reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} @@ -4867,6 +4864,9 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -6871,20 +6871,20 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@nestjs/axios@4.0.0(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(axios@1.7.9)(rxjs@7.8.1)': + '@nestjs/axios@4.0.0(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(axios@1.7.9)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1) + '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2) axios: 1.7.9 - rxjs: 7.8.1 + rxjs: 7.8.2 - '@nestjs/azure-func-http@0.10.0(@azure/functions@1.2.3)(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.15)(reflect-metadata@0.1.14)': + '@nestjs/azure-func-http@0.10.0(@azure/functions@1.2.3)(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.15)(reflect-metadata@0.2.2)': dependencies: '@azure/functions': 1.2.3 - '@nestjs/common': 10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1) - '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.1.14)(rxjs@7.8.1) + '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2) cors: 2.8.5 jsonc-parser: 3.3.1 - reflect-metadata: 0.1.14 + reflect-metadata: 0.2.2 trouter: 3.2.1 '@nestjs/cli@10.4.9': @@ -6913,71 +6913,47 @@ snapshots: - uglify-js - webpack-cli - '@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1)': - dependencies: - iterare: 1.2.1 - reflect-metadata: 0.1.14 - rxjs: 7.8.1 - tslib: 2.8.1 - uid: 2.0.2 - - '@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1)': + '@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2)': dependencies: iterare: 1.2.1 reflect-metadata: 0.2.2 - rxjs: 7.8.1 + rxjs: 7.8.2 tslib: 2.8.1 uid: 2.0.2 - '@nestjs/config@4.0.0(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(rxjs@7.8.1)': + '@nestjs/config@4.0.0(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)': dependencies: - '@nestjs/common': 10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1) + '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2) dotenv: 16.4.7 dotenv-expand: 12.0.1 lodash: 4.17.21 - rxjs: 7.8.1 + rxjs: 7.8.2 - '@nestjs/core@10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.1.14)(rxjs@7.8.1)': + '@nestjs/core@10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1) - '@nuxtjs/opencollective': 0.3.2 - fast-safe-stringify: 2.1.1 - iterare: 1.2.1 - path-to-regexp: 3.3.0 - reflect-metadata: 0.1.14 - rxjs: 7.8.1 - tslib: 2.8.1 - uid: 2.0.2 - optionalDependencies: - '@nestjs/platform-express': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.15) - transitivePeerDependencies: - - encoding - - '@nestjs/core@10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.1)': - dependencies: - '@nestjs/common': 10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1) + '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nuxtjs/opencollective': 0.3.2 fast-safe-stringify: 2.1.1 iterare: 1.2.1 path-to-regexp: 3.3.0 reflect-metadata: 0.2.2 - rxjs: 7.8.1 + rxjs: 7.8.2 tslib: 2.8.1 uid: 2.0.2 optionalDependencies: - '@nestjs/platform-express': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.15) + '@nestjs/platform-express': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.15) transitivePeerDependencies: - encoding - '@nestjs/passport@10.0.3(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(passport@0.7.0)': + '@nestjs/passport@10.0.3(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(passport@0.7.0)': dependencies: - '@nestjs/common': 10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1) + '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2) passport: 0.7.0 - '@nestjs/platform-express@10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.15)': + '@nestjs/platform-express@10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.15)': dependencies: - '@nestjs/common': 10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1) - '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.1.14)(rxjs@7.8.1) + '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2) body-parser: 1.20.3 cors: 2.8.5 express: 4.21.2 @@ -7008,20 +6984,20 @@ snapshots: transitivePeerDependencies: - chokidar - '@nestjs/testing@10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.15)(@nestjs/platform-express@10.4.15)': + '@nestjs/testing@10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.15)(@nestjs/platform-express@10.4.15)': dependencies: - '@nestjs/common': 10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1) - '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.1.14)(rxjs@7.8.1) + '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2) tslib: 2.8.1 optionalDependencies: - '@nestjs/platform-express': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.15) + '@nestjs/platform-express': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.15) - '@noahspan/azure-database@3.1.2(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.15)': + '@noahspan/azure-database@3.1.2(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.15)': dependencies: '@azure/cosmos': 4.2.0 '@azure/data-tables': 13.3.0 - '@nestjs/common': 10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1) - '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.1.14)(rxjs@7.8.1) + '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@noahspan/noahspan-modules': 0.5.9 transitivePeerDependencies: - '@azure/msal-browser' @@ -7093,10 +7069,10 @@ snapshots: '@azure/msal-node': 2.16.2 '@dapr/dapr': 3.4.1 '@microsoft/microsoft-graph-client': 3.0.7(@azure/identity@4.6.0) - '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1) - '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.1) - '@nestjs/passport': 10.0.3(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(passport@0.7.0) - '@nestjs/platform-express': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.15) + '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/passport': 10.0.3(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(passport@0.7.0) + '@nestjs/platform-express': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.15) axios: 1.7.9 express-jwt: 8.5.1 jwks-rsa: 3.1.0 @@ -7104,7 +7080,7 @@ snapshots: passport-azure-ad: 4.3.5 passport-jwt: 4.0.1 reflect-metadata: 0.2.2 - rxjs: 7.8.1 + rxjs: 7.8.2 transitivePeerDependencies: - '@azure/msal-browser' - '@nestjs/microservices' @@ -7117,26 +7093,21 @@ snapshots: - stream-browserify - supports-color - '@noahspan/noahspan-modules@0.6.5': + '@noahspan/noahspan-modules@1.0.0': dependencies: - '@azure/app-configuration': 1.8.0 - '@azure/data-tables': 13.3.0 '@azure/identity': 4.6.0 '@azure/msal-node': 2.16.2 - '@dapr/dapr': 3.4.1 '@microsoft/microsoft-graph-client': 3.0.7(@azure/identity@4.6.0) - '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1) - '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.1) - '@nestjs/passport': 10.0.3(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(passport@0.7.0) - '@nestjs/platform-express': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.15) + '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/passport': 10.0.3(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(passport@0.7.0) + '@nestjs/platform-express': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.15) axios: 1.7.9 - express-jwt: 8.5.1 - jwks-rsa: 3.1.0 passport: 0.7.0 passport-azure-ad: 4.3.5 passport-jwt: 4.0.1 reflect-metadata: 0.2.2 - rxjs: 7.8.1 + rxjs: 7.8.2 transitivePeerDependencies: - '@azure/msal-browser' - '@nestjs/microservices' @@ -9746,7 +9717,7 @@ snapshots: mute-stream: 0.0.8 ora: 5.4.1 run-async: 2.4.1 - rxjs: 7.8.1 + rxjs: 7.8.2 string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 @@ -9765,7 +9736,7 @@ snapshots: mute-stream: 1.0.0 ora: 5.4.1 run-async: 3.0.0 - rxjs: 7.8.1 + rxjs: 7.8.2 string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 @@ -11016,8 +10987,6 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 - reflect-metadata@0.1.14: {} - reflect-metadata@0.2.2: {} regenerator-runtime@0.14.1: {} @@ -11122,6 +11091,10 @@ snapshots: dependencies: tslib: 2.8.1 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {}