diff --git a/.turbo/daemon/a55a0ce1e1048a13-turbo.log.2025-09-13 b/.turbo/daemon/a55a0ce1e1048a13-turbo.log.2025-09-13 deleted file mode 100644 index e69de29..0000000 diff --git a/.turbo/daemon/a55a0ce1e1048a13-turbo.log.2025-09-14 b/.turbo/daemon/a55a0ce1e1048a13-turbo.log.2025-09-14 deleted file mode 100644 index e69de29..0000000 diff --git a/api/src/app.module.ts b/api/src/app.module.ts index c5c179a..378dbb6 100644 --- a/api/src/app.module.ts +++ b/api/src/app.module.ts @@ -30,14 +30,8 @@ import { join } from 'path'; isGlobal: true, load: [configuration] }), - // HealthModule, + HealthModule, LogModule, - PilotModule, - ServeStaticModule.forRoot({ - rootPath: join(__dirname, '../..', 'client', 'dist') - }), - TrackModule, - TypeOrmModule.forRoot(dataSourceOptions), MsGraphModule.registerAsync({ inject: [ConfigService], imports: [ConfigModule], @@ -48,7 +42,13 @@ import { join } from 'path'; tenantId: configService.get('tenantId') } } - }) + }), + PilotModule, + ServeStaticModule.forRoot({ + rootPath: join(__dirname, '../..', 'client', 'dist') + }), + TrackModule, + TypeOrmModule.forRoot(dataSourceOptions) ], providers: [ { diff --git a/api/src/log/log.controller.ts b/api/src/log/log.controller.ts index 702aea1..10cf63c 100644 --- a/api/src/log/log.controller.ts +++ b/api/src/log/log.controller.ts @@ -37,11 +37,10 @@ export class LogController { @Param('id') id: string, ): Promise { try { - console.log(id) return await this.logService.find(id); } catch (error) { const customError = error as CustomError; - console.log(error) + throw new HttpException(customError.message, customError.statusCode); } } @@ -50,11 +49,10 @@ export class LogController { @Public() async findAll(): Promise { try { - console.log('blah') return await this.logService.findAll(); } catch (error) { const customError = error as CustomError; - console.log(error) + throw new HttpException(customError.message, customError.statusCode); } } @@ -67,7 +65,7 @@ export class LogController { return await this.logService.create(logDto); } catch (error) { const customError = error as CustomError; - console.log(error) + throw new HttpException(customError.message, customError.statusCode); } } @@ -79,12 +77,10 @@ export class LogController { @Body() logDto: LogDto ): Promise { try { - console.log(id) - console.log(logDto) return await this.logService.update(id, logDto); } catch (error) { const customError = error as CustomError; - console.log(error) + throw new HttpException(customError.message, customError.statusCode); } } @@ -97,7 +93,6 @@ export class LogController { try { return await this.logService.delete(id); } catch (error) { - console.log(error) const customError = error as CustomError; throw new HttpException(customError.message, customError.statusCode); diff --git a/api/src/pilot/pilot.controller.ts b/api/src/pilot/pilot.controller.ts index 3ecc715..797e0e5 100644 --- a/api/src/pilot/pilot.controller.ts +++ b/api/src/pilot/pilot.controller.ts @@ -43,7 +43,7 @@ export class PilotController { return await this.pilotService.findAll(); } catch (error) { const customError = error as CustomError; - console.log(error) + throw new HttpException(customError.message, customError.statusCode); } } @@ -55,10 +55,9 @@ export class PilotController { return await this.pilotService.create(pilotDto); } catch (error) { - console.log(error) - // const customError = error as CustomError; + const customError = error as CustomError; - // throw new HttpException(customError.message, customError.statusCode); + throw new HttpException(customError.message, customError.statusCode); } } diff --git a/api/src/pilot/pilot.interceptor.ts b/api/src/pilot/pilot.interceptor.ts index 34bf2db..5ef7036 100644 --- a/api/src/pilot/pilot.interceptor.ts +++ b/api/src/pilot/pilot.interceptor.ts @@ -26,7 +26,7 @@ export class PilotInterceptor implements NestInterceptor { }; }) } - console.log(req.headers.authorization) + if (req.headers.authorization) { const authHeader = req.headers.authorization; const token = authHeader && authHeader.split(' ')[1]; diff --git a/client/package.json b/client/package.json index 1ab60e1..a89acef 100644 --- a/client/package.json +++ b/client/package.json @@ -14,12 +14,15 @@ "@fortawesome/fontawesome-svg-core": "^7.1.0", "@fortawesome/free-solid-svg-icons": "^7.1.0", "@fortawesome/react-fontawesome": "^3.1.0", + "@heroui/react": "^2.8.5", "@noahspan/noahspan-components": "^2.0.0-alpha-14", + "@tailwindcss/typography": "^0.5.19", "@tailwindcss/vite": "^4.1.13", "@tanstack/react-table": "^8.21.3", "axios": "^1.7.2", "daisyui": "^5.1.10", "dotenv": "^16.4.7", + "framer-motion": "^12.23.24", "leaflet": "^1.9.4", "oidc-spa": "^7.2.4", "react": "^19.1.1", diff --git a/client/src/App.tsx b/client/src/App.tsx index 9cbb496..8f73ed4 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -5,7 +5,6 @@ import Pilots from './components/pilots/Pilots'; import SiteNav from './components/siteNav/SiteNav'; import { HeroUIProvider } from '@heroui/react'; import { useHref, useNavigate } from 'react-router-dom'; -import './styles.css'; const App = () => { const navigate = useNavigate(); diff --git a/client/src/auth/oidcConfig.ts b/client/src/auth/oidcConfig.ts index 8e08f73..81edc53 100644 --- a/client/src/auth/oidcConfig.ts +++ b/client/src/auth/oidcConfig.ts @@ -2,9 +2,9 @@ import { createReactOidc } from "oidc-spa/react"; export const { OidcProvider, useOidc, getOidc } = createReactOidc(async () => ({ issuerUri: `https://login.microsoftonline.com/${import.meta.env.VITE_TENANT_ID}/v2.0`, - clientId: import.meta.env.VITE_CLIENT_APP_ID, - homeUrl: import.meta.env.BASE_URL, - scopes: ['email', 'openid', 'profile', `api://${import.meta.env.VITE_API_APP_ID}/user_impersonation`], + clientId: import.meta.env.VITE_CLIENT_ID, + homeUrl: import.meta.env.VITE_BASE_URL, + scopes: ['email', 'openid', 'profile', `api://${import.meta.env.VITE_CLIENT_ID}/user_impersonation`], autoLogin: false, postLoginRedirectUrl: '/', noIframe: true diff --git a/client/src/components/flights/Flights.tsx b/client/src/components/flights/Flights.tsx index 691b0f1..e042b8d 100644 --- a/client/src/components/flights/Flights.tsx +++ b/client/src/components/flights/Flights.tsx @@ -12,6 +12,7 @@ const Flights = () => { const { logs, logsLoading } = useLogs(); useEffect(() => { + const flights: LogbookEntry[] | undefined = logs?.filter((log: LogbookEntry) => { if (log.tracks && log.tracks.length > 0) { return log; @@ -25,10 +26,6 @@ const Flights = () => { dispatch({ type: 'SET_ALERT', payload: { severity: 'default', message: 'No flights found' }}) } }, [logs]) - - useEffect(() => { - console.log(logsLoading) - }, [logsLoading]) return (
diff --git a/client/src/components/logbook/Logbook.tsx b/client/src/components/logbook/Logbook.tsx index 321859c..2d4fa83 100644 --- a/client/src/components/logbook/Logbook.tsx +++ b/client/src/components/logbook/Logbook.tsx @@ -508,7 +508,6 @@ const Logbook: React.FC = () => { onPress={() => onOpenCloseDrawer(FormMode.ADD)} startContent={} data-testid="pilot-add-button" - data-theme="lofi" > Add Entry diff --git a/client/src/components/logbookCard/LogbookCard.tsx b/client/src/components/logbookCard/LogbookCard.tsx index 8fdce5d..ac6f3df 100644 --- a/client/src/components/logbookCard/LogbookCard.tsx +++ b/client/src/components/logbookCard/LogbookCard.tsx @@ -6,7 +6,6 @@ const LogbookCard = ({ logs, mode, onDelete, onOpenCloseForm }: LogbookCardProps return (
{logs.map((log) => { - console.log(log) const date = new Date(log.date); const formattedDate: string = `${date.getMonth()}/${date.getDate()}/${date.getFullYear()}`; diff --git a/client/src/components/logbookDrawer/LogbookDrawer.tsx b/client/src/components/logbookDrawer/LogbookDrawer.tsx index ebb3f32..a4a61c6 100644 --- a/client/src/components/logbookDrawer/LogbookDrawer.tsx +++ b/client/src/components/logbookDrawer/LogbookDrawer.tsx @@ -48,7 +48,6 @@ const LogbookDrawer = ({ onOpenClose }: LogbookDrawerProps) => { }; const onSubmit = async (data: unknown) => { - console.log(data) try { logbookContext.dispatch({ type: 'SET_IS_FORM_LOADING', payload: true }); diff --git a/client/src/components/pilots/Pilots.tsx b/client/src/components/pilots/Pilots.tsx index f928c46..03bd22e 100644 --- a/client/src/components/pilots/Pilots.tsx +++ b/client/src/components/pilots/Pilots.tsx @@ -50,7 +50,6 @@ const Pilots: React.FC = () => { }; const onOpenClosePilotForm = async (mode: FormMode, pilotId?: string) => { - console.log(pilotId) switch (mode) { case FormMode.ADD: case FormMode.EDIT: diff --git a/client/src/components/tracksForm/TracksForm.tsx b/client/src/components/tracksForm/TracksForm.tsx index f723a75..ac1b514 100644 --- a/client/src/components/tracksForm/TracksForm.tsx +++ b/client/src/components/tracksForm/TracksForm.tsx @@ -101,16 +101,11 @@ const TracksForm = () => { }, [logbookContext.state.selectedLogId]) useEffect(() => { - console.log(logbookContext.state.formMode) if (logbookContext.state.formMode === FormMode.VIEW) { dispatch({ type: 'SET_IS_DISABLED', payload: true }); } }, [logbookContext.state.formMode]); - useEffect(() => { - console.log(state.isDisabled) - }, [state.isDisabled]) - return (
{state.tracks.length > 0 && diff --git a/client/src/hooks/useBreakpoints/UseBreakpoints.tsx b/client/src/hooks/useBreakpoints/UseBreakpoints.tsx index 1088698..a098cf3 100644 --- a/client/src/hooks/useBreakpoints/UseBreakpoints.tsx +++ b/client/src/hooks/useBreakpoints/UseBreakpoints.tsx @@ -11,7 +11,7 @@ export const useBreakpoints = () => { switch (true) { case width < 640: { size = ScreenSize.SM; - console.log('small') + break; } case width >= 640: { @@ -42,14 +42,10 @@ export const useBreakpoints = () => { const onWindowResize = () => { const width: number = window.innerWidth; const newScreenSize: ScreenSize = getWindowSize(width); - console.log(newScreenSize) + setScreenSize(newScreenSize); } - useEffect(() => { - console.log(windowWidth) - }, []) - useEffect(() => { onWindowResize() diff --git a/client/src/main.tsx b/client/src/main.tsx index 4777a71..0f3fea8 100644 --- a/client/src/main.tsx +++ b/client/src/main.tsx @@ -5,6 +5,7 @@ import AppContextProvider from './context/appContext/AppContextProvider.tsx'; import LogbookContextProvider from './context/logbookContext/LogbookContextProvider.tsx' import { BrowserRouter } from 'react-router-dom'; import { OidcProvider } from './auth/oidcConfig.ts'; +import './styles.css'; ReactDOM.createRoot(document.getElementById('root')!).render( diff --git a/client/src/styles.css b/client/src/styles.css index ce32b3c..a81fa50 100644 --- a/client/src/styles.css +++ b/client/src/styles.css @@ -10,3 +10,6 @@ } + + + diff --git a/client/src/vite-env.d.ts b/client/src/vite-env.d.ts index 46e0e9b..bb14f06 100644 --- a/client/src/vite-env.d.ts +++ b/client/src/vite-env.d.ts @@ -1,10 +1,9 @@ /// interface ImportMetaEnv { - readonly VITE_API_URL: string; + readonly VITE_BASE_URL: string; readonly VITE_CLIENT_ID: string; readonly VITE_TENANT_ID: string; - readonly VITE_REDIRECT_URL: string; } interface ImportMeta { diff --git a/client/vite.config.ts b/client/vite.config.ts index 64d9525..8c89313 100644 --- a/client/vite.config.ts +++ b/client/vite.config.ts @@ -19,7 +19,7 @@ export default defineConfig({ target: 'http://localhost:3000', changeOrigin: true, secure: false, - // rewrite: (path) => path.replace(/^\/api/, '') + rewrite: (path) => path.replace(/^\/api/, '') } } } diff --git a/infrastructure/.terraform.lock.hcl b/infrastructure/.terraform.lock.hcl index c222161..e5e6aff 100644 --- a/infrastructure/.terraform.lock.hcl +++ b/infrastructure/.terraform.lock.hcl @@ -1,6 +1,25 @@ # This file is maintained automatically by "terraform init". # Manual edits may be lost in future updates. +provider "registry.terraform.io/hashicorp/azuread" { + version = "3.7.0" + hashes = [ + "h1:+DHwtiYCOYEhLMot5KQ0hm+zopmUJwPJ/gJiXVfdNOs=", + "zh:01114beb07eb8415a563ca80a513e7fd11fd6f0670bdd960e9092e58464ab2b7", + "zh:1460c790ca28cc11c3efd4abec076fc5cdd4ae1cc654a45c69e10ca064e0a611", + "zh:161b6dd82cf279e7ac7a31c404f2ace491a5a9e7ec382ace91de2fd18f8c190b", + "zh:1c3e89cf19118fc07d7b04257251fc9897e722c16e0a0df7b07fcd261f8c12e7", + "zh:2eff0bea92c48be0221863ebf7752f491232088f4ec3cbe4da2ebf9f478fed1f", + "zh:69a689198fcac054da30fea6a8abce2f12b667f6f327c9bb388f2c307ee782fd", + "zh:6f5acf42d71a2f5157c54e67b2db9b080c4ebb27b812112c0c84241e66d94803", + "zh:8e0a58ff2c21aff372c66c679db48578be48e99f5cf6727f082cf4b629dbda6c", + "zh:9c88cc06ba7ee1f6e6b43af7e223c4d107fb77e5a984f1441fffb00c3693537f", + "zh:e8656e8143baac71029857c72899f8503cede41f2559c89ce29d21c0436c96fc", + "zh:e8e21913956a3f043c0e65cc95278bdc82f62ff33fd75a56b1919bd63fd14f8a", + "zh:f7f213dd61d1c75b8397d97660cf329870a241e88ec6e0dc07c60725d975252e", + ] +} + provider "registry.terraform.io/hashicorp/azurerm" { version = "4.40.0" constraints = "4.40.0" @@ -20,3 +39,22 @@ provider "registry.terraform.io/hashicorp/azurerm" { "zh:f6fd85bfca8516f9f3840acc3f0e5e335f6195b66231c2db05c0fb43dd8aebe1", ] } + +provider "registry.terraform.io/hashicorp/random" { + version = "3.7.2" + hashes = [ + "h1:KG4NuIBl1mRWU0KD/BGfCi1YN/j3F7H4YgeeM7iSdNs=", + "zh:14829603a32e4bc4d05062f059e545a91e27ff033756b48afbae6b3c835f508f", + "zh:1527fb07d9fea400d70e9e6eb4a2b918d5060d604749b6f1c361518e7da546dc", + "zh:1e86bcd7ebec85ba336b423ba1db046aeaa3c0e5f921039b3f1a6fc2f978feab", + "zh:24536dec8bde66753f4b4030b8f3ef43c196d69cccbea1c382d01b222478c7a3", + "zh:29f1786486759fad9b0ce4fdfbbfece9343ad47cd50119045075e05afe49d212", + "zh:4d701e978c2dd8604ba1ce962b047607701e65c078cb22e97171513e9e57491f", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:7b8434212eef0f8c83f5a90c6d76feaf850f6502b61b53c329e85b3b281cba34", + "zh:ac8a23c212258b7976e1621275e3af7099e7e4a3d4478cf8d5d2a27f3bc3e967", + "zh:b516ca74431f3df4c6cf90ddcdb4042c626e026317a33c53f0b445a3d93b720d", + "zh:dc76e4326aec2490c1600d6871a95e78f9050f9ce427c71707ea412a2f2f1a62", + "zh:eac7b63e86c749c7d48f527671c7aee5b4e26c10be6ad7232d6860167f99dbb0", + ] +} diff --git a/infrastructure/config/main.tf b/infrastructure/config/main.tf index 5de107e..207426d 100644 --- a/infrastructure/config/main.tf +++ b/infrastructure/config/main.tf @@ -4,6 +4,16 @@ locals { prod = "flying-prod" } + app_reg_name = { + test = "noahspan-flying-test" + prod = "noahspan-flying-prod" + } + + app_reg_federated_identity_credential_subject = { + test = "repo:noahspannbauer/noahspan-flying:environment:test" + prod = "repo:noahspannbauer/noahspan-flying:environment:prod" + } + container_image = { test = "noahspan/flying-app:v2.0.0-alpha" prod = "noahspan/flying-app:v2.0.0-alpha" diff --git a/infrastructure/config/outputs.tf b/infrastructure/config/outputs.tf index ba91d03..eb3b37c 100644 --- a/infrastructure/config/outputs.tf +++ b/infrastructure/config/outputs.tf @@ -2,6 +2,14 @@ output "app_name" { value = local.app_name[var.environment] } +output "app_reg_name" { + value = local.app_reg_name[var.environment] +} + +output "app_reg_federated_identity_credential_subject" { + value = local.app_reg_federated_identity_credential_subject[var.environment] +} + output "container_image" { value = local.container_image[var.environment] } diff --git a/infrastructure/container_app.tf b/infrastructure/container_app.tf index a67bea5..06d02bd 100644 --- a/infrastructure/container_app.tf +++ b/infrastructure/container_app.tf @@ -1,3 +1,8 @@ +# data "azuread_application" "app_registration" { +# provider = azuread.external_tenant +# display_name = module.environment.app_reg_name +# } + resource "azurerm_container_app" "container_app" { name = module.environment.app_name container_app_environment_id = data.azurerm_container_app_environment.container_app_environment.id @@ -60,7 +65,7 @@ resource "azurerm_container_app" "container_app" { container { cpu = 0.25 - image = "noahspan/flying-app:v2.0.0-alpha" + image = "noahspan/flying:19615036250" memory = "0.5Gi" name = "flying" @@ -71,7 +76,7 @@ resource "azurerm_container_app" "container_app" { env { name = "CLIENT_ID" - secret_name = "client-id" + value = var.CLIENT_ID } env { @@ -81,7 +86,7 @@ resource "azurerm_container_app" "container_app" { env { name = "TENANT_ID" - value = var.TENANT_ID + value = var.EXTERNAL_TENANT_ID } env { @@ -144,11 +149,6 @@ resource "azurerm_container_app" "container_app" { value = azurerm_storage_account.storage_account.primary_connection_string } - secret { - name = "client-id" - value = var.CLIENT_ID - } - secret { name = "client-secret" value = var.CLIENT_SECRET diff --git a/infrastructure/providers.tf b/infrastructure/providers.tf index 615cb43..554f8fd 100644 --- a/infrastructure/providers.tf +++ b/infrastructure/providers.tf @@ -1,3 +1,5 @@ provider "azurerm" { features {} -} \ No newline at end of file +} + +provider "random" {} \ No newline at end of file diff --git a/infrastructure/terraform.tf b/infrastructure/terraform.tf index 7d95aff..41559a5 100644 --- a/infrastructure/terraform.tf +++ b/infrastructure/terraform.tf @@ -6,6 +6,14 @@ terraform { source = "hashicorp/azurerm" version = "4.40.0" } + + azuread = { + source = "hashicorp/azuread" + } + + random = { + source = "hashicorp/random" + } } backend "remote" { diff --git a/infrastructure/variables.tf b/infrastructure/variables.tf index 7f4786a..29c4880 100644 --- a/infrastructure/variables.tf +++ b/infrastructure/variables.tf @@ -21,6 +21,10 @@ variable "RESOURCE_GROUP_NAME" { type = string } +variable "EXTERNAL_TENANT_ID" { + type = string +} + variable "TENANT_ID" { type = string } diff --git a/package-lock.json b/package-lock.json index 93eb6f7..a40032c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,42 +1,31 @@ { "name": "@noahspan/flying", - "version": "2.0.0-alpha", + "version": "2.0.0-alpha-3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@noahspan/flying", - "version": "2.0.0-alpha", + "version": "2.0.0-alpha-3", "workspaces": [ "api", "client", "tests" ], - "dependencies": { - "@heroui/react": "^2.8.5", - "@tanstack/react-table": "^8.21.3", - "daisyui": "^5.1.10", - "framer-motion": "^12.23.24" - }, "devDependencies": { - "@tailwindcss/typography": "^0.5.16", "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", - "concurrently": "^8.2.2", "eslint": "^8.42.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", "husky": "^9.0.11", "lint-staged": "^15.2.2", - "prettier": "3.2.5", - "rimraf": "^6.0.1", - "turbo": "^2.5.6", - "wait-on": "^7.2.0" + "prettier": "3.2.5" } }, "api": { - "version": "2.0.0-alpha", + "version": "2.0.0-alpha-3", "license": "UNLICENSED", "dependencies": { "@azure/storage-blob": "^12.27.0", @@ -91,17 +80,20 @@ } }, "client": { - "version": "2.0.0-alpha", + "version": "2.0.0-alpha-3", "dependencies": { "@fortawesome/fontawesome-svg-core": "^7.1.0", "@fortawesome/free-solid-svg-icons": "^7.1.0", "@fortawesome/react-fontawesome": "^3.1.0", + "@heroui/react": "^2.8.5", "@noahspan/noahspan-components": "^2.0.0-alpha-14", + "@tailwindcss/typography": "^0.5.19", "@tailwindcss/vite": "^4.1.13", "@tanstack/react-table": "^8.21.3", "axios": "^1.7.2", "daisyui": "^5.1.10", "dotenv": "^16.4.7", + "framer-motion": "^12.23.24", "leaflet": "^1.9.4", "oidc-spa": "^7.2.4", "react": "^19.1.1", @@ -2549,23 +2541,6 @@ "node": ">=6" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, "node_modules/@heroui/accordion": { "version": "2.2.24", "resolved": "https://registry.npmjs.org/@heroui/accordion/-/accordion-2.2.24.tgz", @@ -4091,29 +4066,6 @@ "@swc/helpers": "^0.5.0" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -7678,30 +7630,6 @@ "tslib": "^2.1.0" } }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -8262,14 +8190,10 @@ "peer": true }, "node_modules/@tailwindcss/typography": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", - "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==", - "dev": true, + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz", + "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==", "dependencies": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", "postcss-selector-parser": "6.0.10" }, "peerDependencies": { @@ -10737,34 +10661,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/concurrently": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", - "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "date-fns": "^2.30.0", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "spawn-command": "0.0.2", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, - "engines": { - "node": "^14.13.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" - } - }, "node_modules/consola": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", @@ -10934,7 +10830,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, "bin": { "cssesc": "bin/cssesc" }, @@ -10948,31 +10843,6 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "devOptional": true }, - "node_modules/daisyui": { - "version": "5.1.31", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.1.31.tgz", - "integrity": "sha512-p1zRMQ/eEfx1gpExFlyI62NksJ+UxyNC3kH4gYSK0JuL3qFXeo9R5lgkrIvos0V4ukaN+vMKMxGz7Gy6xg1hNg==", - "funding": { - "url": "https://github.com/saadeghi/daisyui?sponsor=1" - } - }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, "node_modules/date-fns-jalali": { "version": "4.1.0-0", "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", @@ -12695,30 +12565,6 @@ "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "license": "MIT" }, - "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -12739,22 +12585,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -13774,22 +13604,6 @@ "node": ">=6" } }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -14623,20 +14437,6 @@ "jiti": "lib/jiti-cli.mjs" } }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, "node_modules/jose": { "version": "4.15.9", "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", @@ -15297,12 +15097,6 @@ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "license": "MIT" }, - "node_modules/lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", - "dev": true - }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -15507,16 +15301,6 @@ "tslib": "^2.0.3" } }, - "node_modules/lru-cache": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.1.tgz", - "integrity": "sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, "node_modules/lru-memoizer": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz", @@ -17037,23 +16821,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "license": "MIT" }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/path-to-regexp": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", @@ -17293,7 +17060,6 @@ "version": "6.0.10", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -18176,26 +17942,6 @@ "dev": true, "license": "MIT" }, - "node_modules/rimraf": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^11.0.0", - "package-json-from-dist": "^1.0.0" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/roarr": { "version": "7.21.1", "resolved": "https://registry.npmjs.org/roarr/-/roarr-7.21.1.tgz", @@ -18565,19 +18311,6 @@ "node": ">=8" } }, - "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -18841,12 +18574,6 @@ "node": ">=0.10.0" } }, - "node_modules/spawn-command": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", - "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", - "dev": true - }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -19917,108 +19644,6 @@ "node": "*" } }, - "node_modules/turbo": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.5.6.tgz", - "integrity": "sha512-gxToHmi9oTBNB05UjUsrWf0OyN5ZXtD0apOarC1KIx232Vp3WimRNy3810QzeNSgyD5rsaIDXlxlbnOzlouo+w==", - "dev": true, - "license": "MIT", - "bin": { - "turbo": "bin/turbo" - }, - "optionalDependencies": { - "turbo-darwin-64": "2.5.6", - "turbo-darwin-arm64": "2.5.6", - "turbo-linux-64": "2.5.6", - "turbo-linux-arm64": "2.5.6", - "turbo-windows-64": "2.5.6", - "turbo-windows-arm64": "2.5.6" - } - }, - "node_modules/turbo-darwin-64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.5.6.tgz", - "integrity": "sha512-3C1xEdo4aFwMJAPvtlPqz1Sw/+cddWIOmsalHFMrsqqydcptwBfu26WW2cDm3u93bUzMbBJ8k3zNKFqxJ9ei2A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/turbo-darwin-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.5.6.tgz", - "integrity": "sha512-LyiG+rD7JhMfYwLqB6k3LZQtYn8CQQUePbpA8mF/hMLPAekXdJo1g0bUPw8RZLwQXUIU/3BU7tXENvhSGz5DPA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/turbo-linux-64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.5.6.tgz", - "integrity": "sha512-GOcUTT0xiT/pSnHL4YD6Yr3HreUhU8pUcGqcI2ksIF9b2/r/kRHwGFcsHgpG3+vtZF/kwsP0MV8FTlTObxsYIA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/turbo-linux-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.5.6.tgz", - "integrity": "sha512-10Tm15bruJEA3m0V7iZcnQBpObGBcOgUcO+sY7/2vk1bweW34LMhkWi8svjV9iDF68+KJDThnYDlYE/bc7/zzQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/turbo-windows-64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.5.6.tgz", - "integrity": "sha512-FyRsVpgaj76It0ludwZsNN40ytHN+17E4PFJyeliBEbxrGTc5BexlXVpufB7XlAaoaZVxbS6KT8RofLfDRyEPg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/turbo-windows-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.5.6.tgz", - "integrity": "sha512-j/tWu8cMeQ7HPpKri6jvKtyXg9K1gRyhdK4tKrrchH8GNHscPX/F71zax58yYtLRWTiK04zNzPcUJuoS0+v/+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -21047,26 +20672,6 @@ "@esbuild/win32-x64": "0.21.5" } }, - "node_modules/wait-on": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", - "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "axios": "^1.6.1", - "joi": "^17.11.0", - "lodash": "^4.17.21", - "minimist": "^1.2.8", - "rxjs": "^7.8.1" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", diff --git a/package.json b/package.json index 749f826..86310e1 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@noahspan/flying", "version": "2.0.0-alpha-3", "scripts": { - "start": "concurrently 'npm run start:azure -w api' 'wait-on tcp:0.0.0.0:7071 && npm run dev -w app'", + "start": "node api/dist/main", "format": "prettier --write \"**/src/**/*.ts\" \"**/test/**/*.ts\"", "lint": "npm run lint -w api && npm run lint -w app", "prepare": "husky || true", @@ -12,20 +12,15 @@ "build": "turbo run build" }, "devDependencies": { - "@tailwindcss/typography": "^0.5.16", "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", - "concurrently": "^8.2.2", "eslint": "^8.42.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", "husky": "^9.0.11", "lint-staged": "^15.2.2", - "prettier": "3.2.5", - "rimraf": "^6.0.1", - "turbo": "^2.5.6", - "wait-on": "^7.2.0" + "prettier": "3.2.5" }, "lint-staged": { "**/*": "prettier --write \"**/src/**/*.ts\" \"**/test/**/*.ts\" --ignore-unknown" @@ -35,10 +30,5 @@ "client", "tests" ], - "dependencies": { - "@heroui/react": "^2.8.5", - "@tanstack/react-table": "^8.21.3", - "daisyui": "^5.1.10", - "framer-motion": "^12.23.24" - } + "packageManager": "npm@9.8.1" }