diff --git a/apps/bun-server/package.json b/apps/bun-server/package.json index c807205fe..5c1d79fca 100644 --- a/apps/bun-server/package.json +++ b/apps/bun-server/package.json @@ -7,7 +7,7 @@ "build": "tsc" }, "devDependencies": { - "typescript": "^5.3.3" + "typescript": "^5.5.3" }, "dependencies": { "@elysiajs/html": "^0.7.3", diff --git a/apps/expo/app.json b/apps/expo/app.json index 1cf034965..76051c316 100644 --- a/apps/expo/app.json +++ b/apps/expo/app.json @@ -2,7 +2,7 @@ "expo": { "name": "packrat", "slug": "packrat", - "version": "1.0.0", + "version": "1.1.0", "orientation": "portrait", "icon": "./assets/packrat-app-icon.png", "userInterfaceStyle": "automatic", @@ -46,7 +46,11 @@ "buildToolsVersion": "34.0.0" }, "ios": { - "deploymentTarget": "13.4" + "deploymentTarget": "13.4", + "buildNumber": "3", + "infoPlist": { + "ITSAppUsesNonExemptEncryption": false + } } } ] diff --git a/apps/expo/eas.json b/apps/expo/eas.json index 65c1e0cf0..a3b2fe236 100644 --- a/apps/expo/eas.json +++ b/apps/expo/eas.json @@ -1,6 +1,7 @@ { "cli": { - "version": ">= 3.8.1" + "version": ">= 3.8.1", + "appVersionSource": "remote" }, "build": { "development": { @@ -21,6 +22,7 @@ } }, "production": { + "autoIncrement": true, "ios": { "resourceClass": "m-medium" } diff --git a/apps/expo/package.json b/apps/expo/package.json index 9814f5137..4c4fb0619 100644 --- a/apps/expo/package.json +++ b/apps/expo/package.json @@ -42,7 +42,7 @@ "@fortawesome/free-solid-svg-icons": "^6.3.0", "@fortawesome/react-fontawesome": "^0.2.0", "@hookform/resolvers": "^3.3.4", - "@react-native-async-storage/async-storage": "1.21.0", + "@react-native-async-storage/async-storage": "^1.23.1", "@react-native-community/geolocation": "^3.0.6", "@react-native-community/netinfo": "11.1.0", "@react-native-google-signin/google-signin": "^9.0.2", @@ -54,7 +54,7 @@ "@reduxjs/toolkit": "^1.9.3", "@rneui/base": "^4.0.0-rc.8", "@rneui/themed": "^4.0.0-rc.8", - "@rnmapbox/maps": "^10.1.21", + "@rnmapbox/maps": "^10.1.29", "@tamagui/animations-react-native": "1.96.0", "@tamagui/babel-plugin": "1.96.0", "@tamagui/config": "1.96.0", @@ -84,17 +84,18 @@ "env": "^0.0.2", "eslint-plugin-react-native": "^4.0.0", "expo": "^50.0.14", - "expo-application": "~5.8.3", + "expo-application": "~5.8.4", "expo-auth-session": "~5.4.0", "expo-blur": "~12.9.2", "expo-build-properties": "~0.11.1", "expo-checkbox": "~2.7.0", "expo-clipboard": "~5.0.1", - "expo-constants": "~15.4.5", + "expo-constants": "~15.4.6", "expo-crypto": "~12.8.1", "expo-dev-client": "~3.3.11", - "expo-document-picker": "~11.10.1", - "expo-file-system": "~16.0.8", + "expo-device": "~5.9.4", + "expo-document-picker": "^12.0.2", + "expo-file-system": "~16.0.9", "expo-font": "~11.10.3", "expo-haptics": "~12.8.1", "expo-image-picker": "~14.7.1", @@ -174,7 +175,7 @@ "eslint-plugin-promise": "^6.1.1", "eslint-plugin-react": "^7.33.2", "prettier": "^3.2.5", - "typescript": "^5.3.3" + "typescript": "^5.5.3" }, "overrides": { "metro": "0.73.7", diff --git a/apps/tauri/package.json b/apps/tauri/package.json index 4d8dd47eb..599aeff0b 100644 --- a/apps/tauri/package.json +++ b/apps/tauri/package.json @@ -50,7 +50,7 @@ "rollup-plugin-polyfill-node": "^0.13.0", "rollup-plugin-typescript2": "^0.36.0", "tslib": "^2.6.2", - "typescript": "^5.2.2", + "typescript": "^5.5.3", "vite": "^5.3.1", "vite-plugin-node-polyfills": "^0.21.0" } diff --git a/apps/tauri/src/routeTree.gen.ts b/apps/tauri/src/routeTree.gen.ts index ef5c834bf..681586714 100644 --- a/apps/tauri/src/routeTree.gen.ts +++ b/apps/tauri/src/routeTree.gen.ts @@ -162,86 +162,149 @@ const ProfileSettingsIndexLazyRoute = ProfileSettingsIndexLazyImport.update({ declare module '@tanstack/react-router' { interface FileRoutesByPath { '/': { + id: '/' + path: '/' + fullPath: '/' preLoaderRoute: typeof IndexImport parentRoute: typeof rootRoute } '/destination/query': { + id: '/destination/query' + path: '/destination/query' + fullPath: '/destination/query' preLoaderRoute: typeof DestinationQueryLazyImport parentRoute: typeof rootRoute } '/pack/$id': { + id: '/pack/$id' + path: '/pack/$id' + fullPath: '/pack/$id' preLoaderRoute: typeof PackIdLazyImport parentRoute: typeof rootRoute } '/pack/create': { + id: '/pack/create' + path: '/pack/create' + fullPath: '/pack/create' preLoaderRoute: typeof PackCreateLazyImport parentRoute: typeof rootRoute } '/profile/$id': { + id: '/profile/$id' + path: '/profile/$id' + fullPath: '/profile/$id' preLoaderRoute: typeof ProfileIdLazyImport parentRoute: typeof rootRoute } '/trip/$tripId': { + id: '/trip/$tripId' + path: '/trip/$tripId' + fullPath: '/trip/$tripId' preLoaderRoute: typeof TripTripIdLazyImport parentRoute: typeof rootRoute } '/trip/create': { + id: '/trip/create' + path: '/trip/create' + fullPath: '/trip/create' preLoaderRoute: typeof TripCreateLazyImport parentRoute: typeof rootRoute } '/about/': { + id: '/about/' + path: '/about' + fullPath: '/about' preLoaderRoute: typeof AboutIndexLazyImport parentRoute: typeof rootRoute } '/appearance/': { + id: '/appearance/' + path: '/appearance' + fullPath: '/appearance' preLoaderRoute: typeof AppearanceIndexLazyImport parentRoute: typeof rootRoute } '/dashboard/': { + id: '/dashboard/' + path: '/dashboard' + fullPath: '/dashboard' preLoaderRoute: typeof DashboardIndexLazyImport parentRoute: typeof rootRoute } '/feed/': { + id: '/feed/' + path: '/feed' + fullPath: '/feed' preLoaderRoute: typeof FeedIndexLazyImport parentRoute: typeof rootRoute } '/items/': { + id: '/items/' + path: '/items' + fullPath: '/items' preLoaderRoute: typeof ItemsIndexLazyImport parentRoute: typeof rootRoute } '/map/': { + id: '/map/' + path: '/map' + fullPath: '/map' preLoaderRoute: typeof MapIndexLazyImport parentRoute: typeof rootRoute } '/maps/': { + id: '/maps/' + path: '/maps' + fullPath: '/maps' preLoaderRoute: typeof MapsIndexLazyImport parentRoute: typeof rootRoute } '/packs/': { + id: '/packs/' + path: '/packs' + fullPath: '/packs' preLoaderRoute: typeof PacksIndexLazyImport parentRoute: typeof rootRoute } '/password-reset/': { + id: '/password-reset/' + path: '/password-reset' + fullPath: '/password-reset' preLoaderRoute: typeof PasswordResetIndexLazyImport parentRoute: typeof rootRoute } '/profile/': { + id: '/profile/' + path: '/profile' + fullPath: '/profile' preLoaderRoute: typeof ProfileIndexLazyImport parentRoute: typeof rootRoute } '/register/': { + id: '/register/' + path: '/register' + fullPath: '/register' preLoaderRoute: typeof RegisterIndexLazyImport parentRoute: typeof rootRoute } '/sign-in/': { + id: '/sign-in/' + path: '/sign-in' + fullPath: '/sign-in' preLoaderRoute: typeof SignInIndexLazyImport parentRoute: typeof rootRoute } '/trips/': { + id: '/trips/' + path: '/trips' + fullPath: '/trips' preLoaderRoute: typeof TripsIndexLazyImport parentRoute: typeof rootRoute } '/profile/settings/': { + id: '/profile/settings/' + path: '/profile/settings' + fullPath: '/profile/settings' preLoaderRoute: typeof ProfileSettingsIndexLazyImport parentRoute: typeof rootRoute } @@ -250,7 +313,7 @@ declare module '@tanstack/react-router' { // Create and export the route tree -export const routeTree = rootRoute.addChildren([ +export const routeTree = rootRoute.addChildren({ IndexRoute, DestinationQueryLazyRoute, PackIdLazyRoute, @@ -272,6 +335,102 @@ export const routeTree = rootRoute.addChildren([ SignInIndexLazyRoute, TripsIndexLazyRoute, ProfileSettingsIndexLazyRoute, -]) +}) /* prettier-ignore-end */ + +/* ROUTE_MANIFEST_START +{ + "routes": { + "__root__": { + "filePath": "__root.tsx", + "children": [ + "/", + "/destination/query", + "/pack/$id", + "/pack/create", + "/profile/$id", + "/trip/$tripId", + "/trip/create", + "/about/", + "/appearance/", + "/dashboard/", + "/feed/", + "/items/", + "/map/", + "/maps/", + "/packs/", + "/password-reset/", + "/profile/", + "/register/", + "/sign-in/", + "/trips/", + "/profile/settings/" + ] + }, + "/": { + "filePath": "index.tsx" + }, + "/destination/query": { + "filePath": "destination/query.lazy.tsx" + }, + "/pack/$id": { + "filePath": "pack/$id.lazy.tsx" + }, + "/pack/create": { + "filePath": "pack/create.lazy.tsx" + }, + "/profile/$id": { + "filePath": "profile/$id.lazy.tsx" + }, + "/trip/$tripId": { + "filePath": "trip/$tripId.lazy.tsx" + }, + "/trip/create": { + "filePath": "trip/create.lazy.tsx" + }, + "/about/": { + "filePath": "about/index.lazy.tsx" + }, + "/appearance/": { + "filePath": "appearance/index.lazy.tsx" + }, + "/dashboard/": { + "filePath": "dashboard/index.lazy.tsx" + }, + "/feed/": { + "filePath": "feed/index.lazy.tsx" + }, + "/items/": { + "filePath": "items/index.lazy.tsx" + }, + "/map/": { + "filePath": "map/index.lazy.tsx" + }, + "/maps/": { + "filePath": "maps/index.lazy.tsx" + }, + "/packs/": { + "filePath": "packs/index.lazy.tsx" + }, + "/password-reset/": { + "filePath": "password-reset/index.lazy.tsx" + }, + "/profile/": { + "filePath": "profile/index.lazy.tsx" + }, + "/register/": { + "filePath": "register/index.lazy.tsx" + }, + "/sign-in/": { + "filePath": "sign-in/index.lazy.tsx" + }, + "/trips/": { + "filePath": "trips/index.lazy.tsx" + }, + "/profile/settings/": { + "filePath": "profile/settings/index.lazy.tsx" + } + } +} +ROUTE_MANIFEST_END */ diff --git a/apps/vite/package.json b/apps/vite/package.json index 154a7d3ff..2c7e85138 100644 --- a/apps/vite/package.json +++ b/apps/vite/package.json @@ -41,8 +41,8 @@ "rollup-plugin-polyfill-node": "^0.13.0", "rollup-plugin-typescript2": "^0.36.0", "tslib": "^2.6.2", - "typescript": "^5.3.3", - "vite": "^5.1.0", + "typescript": "^5.5.3", + "vite": "^5.3.1", "vite-plugin-node-polyfills": "^0.21.0" } } diff --git a/apps/vite/src/routeTree.gen.ts b/apps/vite/src/routeTree.gen.ts index 8e9dfcd1e..968fb50c5 100644 --- a/apps/vite/src/routeTree.gen.ts +++ b/apps/vite/src/routeTree.gen.ts @@ -174,163 +174,94 @@ const ProfileSettingsIndexLazyRoute = ProfileSettingsIndexLazyImport.update({ declare module '@tanstack/react-router' { interface FileRoutesByPath { '/': { - id: '/' - path: '/' - fullPath: '/' preLoaderRoute: typeof IndexImport parentRoute: typeof rootRoute } '/destination/query': { - id: '/destination/query' - path: '/destination/query' - fullPath: '/destination/query' preLoaderRoute: typeof DestinationQueryLazyImport parentRoute: typeof rootRoute } '/item/$itemId': { - id: '/item/$itemId' - path: '/item/$itemId' - fullPath: '/item/$itemId' preLoaderRoute: typeof ItemItemIdLazyImport parentRoute: typeof rootRoute } '/pack/$id': { - id: '/pack/$id' - path: '/pack/$id' - fullPath: '/pack/$id' preLoaderRoute: typeof PackIdLazyImport parentRoute: typeof rootRoute } '/pack/create': { - id: '/pack/create' - path: '/pack/create' - fullPath: '/pack/create' preLoaderRoute: typeof PackCreateLazyImport parentRoute: typeof rootRoute } '/profile/$id': { - id: '/profile/$id' - path: '/profile/$id' - fullPath: '/profile/$id' preLoaderRoute: typeof ProfileIdLazyImport parentRoute: typeof rootRoute } '/trip/$tripId': { - id: '/trip/$tripId' - path: '/trip/$tripId' - fullPath: '/trip/$tripId' preLoaderRoute: typeof TripTripIdLazyImport parentRoute: typeof rootRoute } '/trip/create': { - id: '/trip/create' - path: '/trip/create' - fullPath: '/trip/create' preLoaderRoute: typeof TripCreateLazyImport parentRoute: typeof rootRoute } '/about/': { - id: '/about/' - path: '/about' - fullPath: '/about' preLoaderRoute: typeof AboutIndexLazyImport parentRoute: typeof rootRoute } '/appearance/': { - id: '/appearance/' - path: '/appearance' - fullPath: '/appearance' preLoaderRoute: typeof AppearanceIndexLazyImport parentRoute: typeof rootRoute } '/dashboard/': { - id: '/dashboard/' - path: '/dashboard' - fullPath: '/dashboard' preLoaderRoute: typeof DashboardIndexLazyImport parentRoute: typeof rootRoute } '/feed/': { - id: '/feed/' - path: '/feed' - fullPath: '/feed' preLoaderRoute: typeof FeedIndexLazyImport parentRoute: typeof rootRoute } '/items/': { - id: '/items/' - path: '/items' - fullPath: '/items' preLoaderRoute: typeof ItemsIndexLazyImport parentRoute: typeof rootRoute } '/map/': { - id: '/map/' - path: '/map' - fullPath: '/map' preLoaderRoute: typeof MapIndexLazyImport parentRoute: typeof rootRoute } '/maps/': { - id: '/maps/' - path: '/maps' - fullPath: '/maps' preLoaderRoute: typeof MapsIndexLazyImport parentRoute: typeof rootRoute } '/packs/': { - id: '/packs/' - path: '/packs' - fullPath: '/packs' preLoaderRoute: typeof PacksIndexLazyImport parentRoute: typeof rootRoute } '/password-reset/': { - id: '/password-reset/' - path: '/password-reset' - fullPath: '/password-reset' preLoaderRoute: typeof PasswordResetIndexLazyImport parentRoute: typeof rootRoute } '/privacy/': { - id: '/privacy/' - path: '/privacy' - fullPath: '/privacy' preLoaderRoute: typeof PrivacyIndexLazyImport parentRoute: typeof rootRoute } '/profile/': { - id: '/profile/' - path: '/profile' - fullPath: '/profile' preLoaderRoute: typeof ProfileIndexLazyImport parentRoute: typeof rootRoute } '/register/': { - id: '/register/' - path: '/register' - fullPath: '/register' preLoaderRoute: typeof RegisterIndexLazyImport parentRoute: typeof rootRoute } '/sign-in/': { - id: '/sign-in/' - path: '/sign-in' - fullPath: '/sign-in' preLoaderRoute: typeof SignInIndexLazyImport parentRoute: typeof rootRoute } '/trips/': { - id: '/trips/' - path: '/trips' - fullPath: '/trips' preLoaderRoute: typeof TripsIndexLazyImport parentRoute: typeof rootRoute } '/profile/settings/': { - id: '/profile/settings/' - path: '/profile/settings' - fullPath: '/profile/settings' preLoaderRoute: typeof ProfileSettingsIndexLazyImport parentRoute: typeof rootRoute } @@ -339,7 +270,7 @@ declare module '@tanstack/react-router' { // Create and export the route tree -export const routeTree = rootRoute.addChildren({ +export const routeTree = rootRoute.addChildren([ IndexRoute, DestinationQueryLazyRoute, ItemItemIdLazyRoute, @@ -363,110 +294,6 @@ export const routeTree = rootRoute.addChildren({ SignInIndexLazyRoute, TripsIndexLazyRoute, ProfileSettingsIndexLazyRoute, -}) +]) /* prettier-ignore-end */ - -/* ROUTE_MANIFEST_START -{ - "routes": { - "__root__": { - "filePath": "__root.tsx", - "children": [ - "/", - "/destination/query", - "/item/$itemId", - "/pack/$id", - "/pack/create", - "/profile/$id", - "/trip/$tripId", - "/trip/create", - "/about/", - "/appearance/", - "/dashboard/", - "/feed/", - "/items/", - "/map/", - "/maps/", - "/packs/", - "/password-reset/", - "/privacy/", - "/profile/", - "/register/", - "/sign-in/", - "/trips/", - "/profile/settings/" - ] - }, - "/": { - "filePath": "index.tsx" - }, - "/destination/query": { - "filePath": "destination/query.lazy.tsx" - }, - "/item/$itemId": { - "filePath": "item/$itemId.lazy.tsx" - }, - "/pack/$id": { - "filePath": "pack/$id.lazy.tsx" - }, - "/pack/create": { - "filePath": "pack/create.lazy.tsx" - }, - "/profile/$id": { - "filePath": "profile/$id.lazy.tsx" - }, - "/trip/$tripId": { - "filePath": "trip/$tripId.lazy.tsx" - }, - "/trip/create": { - "filePath": "trip/create.lazy.tsx" - }, - "/about/": { - "filePath": "about/index.lazy.tsx" - }, - "/appearance/": { - "filePath": "appearance/index.lazy.tsx" - }, - "/dashboard/": { - "filePath": "dashboard/index.lazy.tsx" - }, - "/feed/": { - "filePath": "feed/index.lazy.tsx" - }, - "/items/": { - "filePath": "items/index.lazy.tsx" - }, - "/map/": { - "filePath": "map/index.lazy.tsx" - }, - "/maps/": { - "filePath": "maps/index.lazy.tsx" - }, - "/packs/": { - "filePath": "packs/index.lazy.tsx" - }, - "/password-reset/": { - "filePath": "password-reset/index.lazy.tsx" - }, - "/privacy/": { - "filePath": "privacy/index.lazy.tsx" - }, - "/profile/": { - "filePath": "profile/index.lazy.tsx" - }, - "/register/": { - "filePath": "register/index.lazy.tsx" - }, - "/sign-in/": { - "filePath": "sign-in/index.lazy.tsx" - }, - "/trips/": { - "filePath": "trips/index.lazy.tsx" - }, - "/profile/settings/": { - "filePath": "profile/settings/index.lazy.tsx" - } - } -} -ROUTE_MANIFEST_END */ diff --git a/package.json b/package.json index b611a85e5..76fe22201 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "patch-package": "^8.0.0", "postinstall-postinstall": "^2.1.0", "prettier": "^3.2.5", - "typescript": "^5.3.3" + "typescript": "^5.5.3" }, "lint-staged": { "server/**/*.{js,ts}": [ diff --git a/packages/app/modules/item/components/ImportItemGlobal.tsx b/packages/app/modules/item/components/ImportItemGlobal.tsx index e08292db6..935e3eabf 100644 --- a/packages/app/modules/item/components/ImportItemGlobal.tsx +++ b/packages/app/modules/item/components/ImportItemGlobal.tsx @@ -8,7 +8,7 @@ export const ImportItemGlobal = () => { const ownerId = authUser?.id; if (!authUser) { - return null; // or some fallback + return null; } const { setIsModalOpen } = useModal(); diff --git a/packages/app/modules/item/hooks/useImportFromBucket.ts b/packages/app/modules/item/hooks/useImportFromBucket.ts new file mode 100644 index 000000000..72297b582 --- /dev/null +++ b/packages/app/modules/item/hooks/useImportFromBucket.ts @@ -0,0 +1,65 @@ +import { useCallback } from 'react'; +import { queryTrpc } from 'app/trpc'; +import { useOfflineQueue } from 'app/hooks/offline'; +import { useItemsUpdater } from './useItemsUpdater'; + +interface State { + items?: Array<{ id: string }>; +} + +export const useImportFromBucket = () => { + const utils = queryTrpc.useContext(); + const { mutateAsync } = queryTrpc.importFromBucket.useMutation(); + const { isConnected, addOfflineRequest } = useOfflineQueue(); + const updateItems = useItemsUpdater(); + + const handleImportFromBucket = useCallback( + async ({ directory, ownerId }, onSuccess) => { + if (isConnected) { + try { + const data = await mutateAsync({ directory, ownerId }); + const newItems = Array.isArray(data) ? data : []; + updateItems((prevState: State = {}) => { + const prevItems = Array.isArray(prevState.items) + ? prevState.items + : []; + return { + ...prevState, + items: [...newItems, ...prevItems], + }; + }); + + utils.getItemsGlobally.invalidate(); + utils.getItemsGlobally.refetch(); + onSuccess(); + } catch (error) { + console.error('Error fetching items:', error); + } + } else { + addOfflineRequest('importFromBucket', { directory, ownerId }); + + updateItems((prevState: State = {}) => { + onSuccess(); + const prevItems = Array.isArray(prevState.items) + ? prevState.items + : []; + + return { + ...prevState, + items: [ + { + directory, + ownerId, + global: true, + }, + ...prevItems, + ], + }; + }); + } + }, + [updateItems, isConnected, mutateAsync, utils, addOfflineRequest], + ); + + return { handleImportFromBucket }; +}; diff --git a/packages/app/modules/item/hooks/useImportItem.ts b/packages/app/modules/item/hooks/useImportItem.ts index 91fbcbbc1..f673aa7d8 100644 --- a/packages/app/modules/item/hooks/useImportItem.ts +++ b/packages/app/modules/item/hooks/useImportItem.ts @@ -14,27 +14,33 @@ export const useImportItem = () => { const updateItems = useItemsUpdater(); const handleImportNewItems = useCallback( - (newItem) => { + (newItem, onSuccess) => { if (isConnected) { return mutate(newItem, { onSuccess: () => { + updateItems((prevState: State = {}) => { + const prevItems = Array.isArray(prevState.items) + ? prevState.items + : []; + return { + ...prevState, + items: [newItem, ...prevItems], // Use the data returned from the server + }; + }); utils.getItemsGlobally.invalidate(); + onSuccess(); + }, + onError: (error) => { + console.error('Error adding item:', error); }, }); } addOfflineRequest('addItemGlobal', newItem); - updateItems((prevState: State = {}) => { - const prevItems = Array.isArray(prevState.items) ? prevState.items : []; - - return { - ...prevState, - items: [newItem, ...prevItems], - }; - }); + // Optionally, handle offline case here if needed }, - [updateItems], + [updateItems, isConnected, mutate, utils, addOfflineRequest], ); return { handleImportNewItems }; diff --git a/packages/app/modules/pack/hooks/useImportPackItem.ts b/packages/app/modules/pack/hooks/useImportPackItem.ts index 400d19964..b7afa3f14 100644 --- a/packages/app/modules/pack/hooks/useImportPackItem.ts +++ b/packages/app/modules/pack/hooks/useImportPackItem.ts @@ -7,7 +7,8 @@ export const useImportPackItem = () => { if (!newItem) { throw new Error('Item data is not available.'); } - + }, + onSuccess: (data, newItem, context) => { const previousPack = utils.getPackById.getData({ packId: newItem.packId, }); @@ -32,14 +33,12 @@ export const useImportPackItem = () => { newQueryData as any, ); - return { - previousPack, - }; - }, - onSuccess: () => { utils.getPackById.invalidate(); utils.getPacks.invalidate(); }, + onError: (error, newItem, context) => { + console.error('Error adding item:', error); + }, }); return { diff --git a/packages/app/package.json b/packages/app/package.json index b83799044..4e1b34761 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -34,7 +34,7 @@ "@packrat/crosspath": "*", "@packrat/ui": "*", "@packrat/validations": "*", - "@react-native-async-storage/async-storage": "1.21.0", + "@react-native-async-storage/async-storage": "^1.23.1", "@react-native-community/geolocation": "^3.0.6", "@react-native-community/netinfo": "11.1.0", "@react-native-google-signin/google-signin": "^9.0.2", @@ -45,7 +45,7 @@ "@rehookify/datepicker": "^6.6.1", "@rneui/base": "^4.0.0-rc.8", "@rneui/themed": "^4.0.0-rc.8", - "@rnmapbox/maps": "^10.1.21", + "@rnmapbox/maps": "^10.1.29", "@tamagui/animations-react-native": "1.96.0", "@tamagui/babel-plugin": "1.96.0", "@tamagui/config": "1.96.0", @@ -75,13 +75,13 @@ "dotenv": "^16.0.3", "eslint-plugin-react-native": "^4.0.0", "expo": "^50.0.14", - "expo-application": "~5.8.3", + "expo-application": "~5.8.4", "expo-auth-session": "~5.4.0", "expo-checkbox": "~2.7.0", - "expo-constants": "~15.4.5", + "expo-constants": "~15.4.6", "expo-crypto": "~12.8.1", "expo-document-picker": "^12.0.2", - "expo-file-system": "~16.0.8", + "expo-file-system": "~16.0.9", "expo-font": "~11.10.3", "expo-image-picker": "~14.7.1", "expo-linking": "~6.2.2", @@ -164,7 +164,7 @@ "eslint-plugin-promise": "^6.1.1", "eslint-plugin-react": "^7.33.2", "prettier": "^3.2.5", - "typescript": "^5.3.3" + "typescript": "^5.5.3" }, "overrides": { "metro": "0.73.7", diff --git a/packages/crosspath/package.json b/packages/crosspath/package.json index 4b8698c78..35d735bc0 100644 --- a/packages/crosspath/package.json +++ b/packages/crosspath/package.json @@ -32,6 +32,6 @@ }, "devDependencies": { "@tamagui/build": "1.96.0", - "typescript": "^5.3.3" + "typescript": "^5.5.3" } } diff --git a/packages/ui/package.json b/packages/ui/package.json index edd7e1eb3..ffcdc59e8 100755 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -45,7 +45,7 @@ "@ts-react/form": "^1.8.3", "awesome-phonenumber": "^6.4.0", "esbuild": "^0.19.5", - "expo-document-picker": "~11.10.1", + "expo-document-picker": "^12.0.2", "expo-image-picker": "~14.7.1", "foxact": "^0.2.33", "jotai": "^2.6.4", diff --git a/packages/ui/src/CascadedDropdown.tsx b/packages/ui/src/CascadedDropdown.tsx new file mode 100644 index 000000000..76a7c56bd --- /dev/null +++ b/packages/ui/src/CascadedDropdown.tsx @@ -0,0 +1,41 @@ +import { RSelect } from '@packrat/ui'; +import React from 'react'; +import { View, Platform } from 'react-native'; + +interface DropdownComponentProps { + width?: string | number; + style?: any; + placeholder?: any; + native?: boolean; + // zeego?: boolean; + [x: string]: any; // for the rest of the props +} + +export const CascadedDropdownComponent: React.FC = ({ + width, + style = {}, + placeholder, + // zeego = false, + ...props +}) => { + const isWeb = Platform.OS === 'web'; + + return ( + + + + ); +}; + +export default CascadedDropdownComponent; diff --git a/packages/ui/src/index.tsx b/packages/ui/src/index.tsx index f7d319802..3d15e888b 100644 --- a/packages/ui/src/index.tsx +++ b/packages/ui/src/index.tsx @@ -33,6 +33,7 @@ export { Container } from './Container'; export { MainContentWeb } from './MainContentWeb'; export { ContextMenu, RContextMenu } from './RContextMenu'; export { DropdownComponent } from './Dropdown'; +export { CascadedDropdownComponent } from './CascadedDropdown'; // export { DropdownMenu, ExampleDropdown } from './RDropdown/DropdownBase'; export { RSkeleton } from './RSkeleton'; diff --git a/packages/validations/package.json b/packages/validations/package.json index 6087041bb..4c446cd07 100644 --- a/packages/validations/package.json +++ b/packages/validations/package.json @@ -20,7 +20,7 @@ "@types/express": "^4.17.17", "@types/node": "^20.14.2", "express": "^4.19.2", - "typescript": "^5.3.3", + "typescript": "^5.5.3", "zod": "^3.22.4" } } diff --git a/server/package.json b/server/package.json index 8cdd1b874..c1d8a8da6 100644 --- a/server/package.json +++ b/server/package.json @@ -69,6 +69,7 @@ "celebrate": "^15.0.1", "compression": "^1.7.4", "cors": "^2.8.5", + "crypto-js": "^4.2.0", "csurf": "^1.11.0", "dotenv": "^16.0.3", "drizzle-orm": "^0.30.10", @@ -98,11 +99,13 @@ "openai": "4.25.0", "osmtogeojson": "^3.0.0-beta.5", "p-queue": "^8.0.1", + "papaparse": "^5.4.1", "passport": "^0.6.0", "passport-google-oauth20": "^2.0.0", "passport-local": "^1.0.0", "piscina": "^4.0.0", "prisma": "^5.7.0", + "querystring": "^0.2.1", "radash": "^12.1.0", "superjson": "^2.0.0", "swagger-jsdoc": "^6.2.8", @@ -112,6 +115,7 @@ "trpc-playground": "^1.0.4", "uuid": "^9.0.0", "validator": "^13.9.0", + "xml2js": "^0.6.2", "zod": "^3.22.4" }, "devDependencies": { @@ -120,7 +124,10 @@ "@cloudflare/workers-types": "4.20240419.0", "@faker-js/faker": "^8.4.1", "@openapitools/openapi-generator-cli": "^2.7.0", + "@types/crypto-js": "^4", "@types/jest": "^29.5.11", + "@types/papaparse": "^5", + "@types/xml2js": "^0", "@typescript-eslint/eslint-plugin": "^6.21.0", "@vitest/ui": "^1.6.0", "cross-env": "^7.0.3", @@ -143,7 +150,7 @@ "ts-jest": "^29.1.1", "ts-node": "^10.9.1", "tsx": "^4.7.0", - "typescript": "^5.3.3", + "typescript": "^5.5.3", "vitest": "1.3.0", "wrangler": "^3.51.2" }, diff --git a/server/src/controllers/item/importFromBucket.ts b/server/src/controllers/item/importFromBucket.ts new file mode 100644 index 000000000..30a4a9a33 --- /dev/null +++ b/server/src/controllers/item/importFromBucket.ts @@ -0,0 +1,121 @@ +import { protectedProcedure } from '../../trpc'; +import { + bulkAddItemsGlobalService, + parseCSVData, + listBucketContents, + fetchFromS3, +} from '../../services/item/item.service'; +import { z } from 'zod'; + +export const importFromBucket = async (c) => { + const { directory, ownerId } = await c.req.query(); + + const endpoint = c.env.BUCKET_ENDPOINT; + const bucket = c.env.BUCKET_NAME; + const method = 'GET'; + const region = c.env.BUCKET_REGION; + const service = c.env.BUCKET_SERVICE; + const accessKeyId = c.env.BUCKET_ACCESS_KEY_ID; + const secretKey = c.env.BUCKET_SECRET_KEY; + const sessionToken = c.env.BUCKET_SESSION_TOKEN; + const algorithm = c.env.AWS_SIGN_ALGORITHM; + const x_amz_token = c.env.X_AMZ_SECURITY_TOKEN; + + try { + const latestFileName = await listBucketContents( + endpoint, + bucket, + directory, + method, + service, + region, + accessKeyId, + secretKey, + sessionToken, + algorithm, + x_amz_token, + ); + + if (!latestFileName) { + throw new Error('No files found in the backcountry directory'); + } + + const fileData = await fetchFromS3( + `${endpoint}/${bucket}/${latestFileName}`, + method, + service, + region, + accessKeyId, + secretKey, + sessionToken, + algorithm, + x_amz_token, + ); + + const itemsToInsert = await parseCSVData(fileData, ownerId); + const insertedItems = await bulkAddItemsGlobalService( + itemsToInsert, + c.executionCtx, + ); + + return c.json({ + message: 'Items inserted successfully', + data: insertedItems, + }); + } catch (err) { + console.error('Error:', err); + return c.json({ error: 'An error occurred' }); + } +}; + +export function importFromBucketRoute() { + return protectedProcedure + .input(z.object({ directory: z.string(), ownerId: z.string() })) + .mutation(async (opts) => { + const { directory, ownerId } = opts.input; + const { env, executionCtx }: any = opts.ctx; + + try { + const latestFileName = await listBucketContents( + env.BUCKET_ENDPOINT, + env.BUCKET_NAME, + directory, + 'GET', + env.BUCKET_SERVICE, + env.BUCKET_REGION, + env.BUCKET_ACCESS_KEY_ID, + env.BUCKET_SECRET_KEY, + env.BUCKET_SESSION_TOKEN, + env.AWS_SIGN_ALGORITHM, + env.X_AMZ_SECURITY_TOKEN, + ); + + if (!latestFileName) { + throw new Error('No files found in the directory'); + } + + const fileData = await fetchFromS3( + `${env.BUCKET_ENDPOINT}/${env.BUCKET_NAME}/${latestFileName}`, + 'GET', + env.BUCKET_SERVICE, + env.BUCKET_REGION, + env.BUCKET_ACCESS_KEY_ID, + env.BUCKET_SECRET_KEY, + env.BUCKET_SESSION_TOKEN, + env.AWS_SIGN_ALGORITHM, + env.X_AMZ_SECURITY_TOKEN, + ); + + const itemsToInsert = await parseCSVData(fileData, ownerId); + const insertedItems = await bulkAddItemsGlobalService( + itemsToInsert, + executionCtx, + ); + + return insertedItems; + } catch (err) { + console.error('Error:', err); + throw new Error(`An error occurred: ${err.message}`); + } + }); +} diff --git a/server/src/controllers/item/index.ts b/server/src/controllers/item/index.ts index 143545048..440562579 100644 --- a/server/src/controllers/item/index.ts +++ b/server/src/controllers/item/index.ts @@ -12,3 +12,4 @@ export * from './editGlobalItemAsDuplicate'; export * from './getItemsGlobally'; export * from './searchItemsByName'; export * from './getSimilarItems'; +export * from './importFromBucket'; diff --git a/server/src/drizzle/methods/Item.ts b/server/src/drizzle/methods/Item.ts index b7218b38d..41d3dd80c 100644 --- a/server/src/drizzle/methods/Item.ts +++ b/server/src/drizzle/methods/Item.ts @@ -16,6 +16,23 @@ export class Item { } } + async createBulk(data: InsertItem[]) { + try { + const insertedItems = []; + for (const itemData of data) { + const item = await DbClient.instance + .insert(ItemTable) + .values(itemData) + .returning() + .get(); + insertedItems.push(item); + } + return insertedItems; + } catch (error) { + throw new Error(`Failed to create items: ${error.message}`); + } + } + async update( id: string, data: Partial, diff --git a/server/src/routes/index.ts b/server/src/routes/index.ts index 38944ac30..5d59d5f53 100644 --- a/server/src/routes/index.ts +++ b/server/src/routes/index.ts @@ -1,5 +1,3 @@ -// import path from 'path'; -// import csrf from 'csurf'; import packRoutes from './packRoutes'; import itemRoutes from './itemRoutes'; import tripRoutes from './tripRoutes'; @@ -13,37 +11,15 @@ import openAiRoutes from './openAiRoutes'; import templateRoutes from './templateRoutes'; import favoriteRouters from './favoriteRoutes'; import userRoutes from './userRoutes'; +import testRoutes from './testRoutes'; import mapPreviewRouter from './mapPreviewRouter'; import healthRoutes from './healthRoutes'; import { Hono } from 'hono'; const router = new Hono(); -// Create a CSRF middleware -// const csrfProtection = csrf({ cookie: true }); - -// /** -// * Logs the incoming request method and path, and logs the finished request method, path, status code, and request body. -// * -// * @param {Request} req - The incoming request object. -// * @param {Response} res - The response object. -// * @param {NextFunction} next - The next function to call in the middleware chain. -// */ -// const logger = (req: Request, res: Response, next: express.NextFunction) => { -// console.log(`Incoming ${req.method} ${req.path}`); -// res.on('finish', () => { -// console.log(`Finished ${req.method} ${req.path} ${res.statusCode}`); -// console.log(`Body ${req.body}`); -// }); -// next(); -// }; - -// // use logger middleware in development -// if (process.env.NODE_ENV !== 'production') { -// router.use(logger); -// } - // use routes +router.route('/testapi', testRoutes); router.route('/user', userRoutes); router.route('/pack', packRoutes); router.route('/item', itemRoutes); @@ -60,13 +36,8 @@ router.route('/favorite', favoriteRouters); router.route('/mapPreview', mapPreviewRouter); router.route('/health', healthRoutes); -const helloRouter = new Hono(); -helloRouter.get('/', (c) => { - return c.text('Hello, world!'); -}); -router.route('/hello', helloRouter); - // Also listen to /api for backwards compatibility +router.route('/api/testapi', testRoutes); router.route('/api/user', userRoutes); router.route('/api/pack', packRoutes); router.route('/api/item', itemRoutes); @@ -83,38 +54,4 @@ router.route('/api/favorite', favoriteRouters); router.route('/api/openai', openAiRoutes); router.route('/api/mapPreview', mapPreviewRouter); -// // Static routes for serving the React Native Web app -// if (process.env.NODE_ENV === 'production') { -// const __dirname = path.resolve(); -// const serverType = process.env.REACT_APP_SERVER_TYPE || 'vite'; - -// // Serve the client's index.html file at the root route -// router.get('/', (req, res) => { -// // Attach the CSRF token cookie to the response -// // res.cookie("XSRF-TOKEN", req.csrfToken()); - -// const basePath = serverType === 'next' ? '../apps/next/out' : '../apps/vite/dist'; -// res.sendFile(path.resolve(__dirname, basePath, 'index.html')); -// }); - -// // Serve the static assets -// const staticPath = serverType === 'next' ? '../apps/next/out' : '../apps/vite/dist'; -// router.use(express.static(path.join(__dirname, staticPath))); - -// // Serve the client's index.html file at all other routes NOT starting with /api -// router.get(/^(?!\/?api).*/, (req, res) => { -// // res.cookie("XSRF-TOKEN", req.csrfToken()); -// const basePath = serverType === 'next' ? '../apps/next/out' : '../apps/vite/dist'; -// res.sendFile(path.resolve(__dirname, basePath, 'index.html')); -// }); -// } - -// // Attach the CSRF token to a specific route in development -// if (process.env.NODE_ENV !== 'production') { -// router.get('/api/csrf/restore', (req, res) => { -// // res.cookie("XSRF-TOKEN", req.csrfToken()); -// res.status(201).json({}); -// }); -// } - export default router; diff --git a/server/src/routes/itemRoutes.ts b/server/src/routes/itemRoutes.ts index bf458dc3a..94253f700 100644 --- a/server/src/routes/itemRoutes.ts +++ b/server/src/routes/itemRoutes.ts @@ -14,6 +14,7 @@ import { importItems, importItemsGlobal, getSimilarItems, + importFromBucket, } from '../controllers/item/index'; import * as validator from '@packrat/validations'; import { tryCatchWrapper } from '../helpers/tryCatchWrapper'; @@ -37,6 +38,13 @@ router.get( tryCatchWrapper(getSimilarItems), ); +router.get( + '/importFromBucket', + authTokenMiddleware, + // zodParser(validator.importFromBucket, 'query'), + tryCatchWrapper(importFromBucket), +); + router.get( '/i/:id', authTokenMiddleware, diff --git a/server/src/routes/testRoutes.ts b/server/src/routes/testRoutes.ts new file mode 100644 index 000000000..9a073ba7b --- /dev/null +++ b/server/src/routes/testRoutes.ts @@ -0,0 +1,52 @@ +import { Hono } from 'hono'; +import querystring from 'querystring'; + +const router = new Hono(); + +router.get('/', async (c) => { + const params = c.req.query(); + console.log('Received data:', params); + + return c.json({ message: 'Data received successfully!', data: params }); +}); + +router.get('/test', async (c) => { + try { + const postData = querystring.stringify({ + project: 'PackRat', + spider: 'backcountry', + }); + + const response = await fetch('http://localhost:6800/schedule.json', { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: postData, + }); + + const responseData = await response.json(); + + if (responseData.status === 'ok') { + console.log('Scraping initiated', responseData); + return c.json({ + message: 'Scraping initiated successfully!', + response: responseData, + }); + } else { + console.error('Error from Scrapyd:', responseData); + return c.json({ + message: 'Failed to initiate scraping', + error: responseData, + }); + } + } catch (error) { + console.error('Error initiating scraping:', error); + return c.json({ + message: 'Failed to initiate scraping', + error: error.toString(), + }); + } +}); + +export default router; diff --git a/server/src/routes/trpcRouter.ts b/server/src/routes/trpcRouter.ts index 78c13c45b..e399ec51c 100644 --- a/server/src/routes/trpcRouter.ts +++ b/server/src/routes/trpcRouter.ts @@ -71,6 +71,7 @@ import { getItemsRoute, searchItemsByNameRoute, getSimilarItemsRoute, + importFromBucketRoute, } from '../controllers/item'; import { getTrailsRoute } from '../controllers/getTrail'; import { getParksRoute } from '../controllers/getParks'; @@ -161,6 +162,7 @@ export const appRouter = trpcRouter({ editGlobalItemAsDuplicate: editGlobalItemAsDuplicateRoute(), // Not Implemented deleteGlobalItem: deleteGlobalItemRoute(), // Done, getSimilarItems: getSimilarItemsRoute(), + importFromBucket: importFromBucketRoute(), // trails routes getTrails: getTrailsRoute(), // // parks route diff --git a/server/src/services/item/bulkAddGlobalItemService.ts b/server/src/services/item/bulkAddGlobalItemService.ts new file mode 100644 index 000000000..b7733d724 --- /dev/null +++ b/server/src/services/item/bulkAddGlobalItemService.ts @@ -0,0 +1,56 @@ +import { type ExecutionContext } from 'hono'; +import { type InsertItemCategory } from '../../db/schema'; +import { ItemCategory } from '../../drizzle/methods/itemcategory'; +import { DbClient } from 'src/db/client'; +import { item as ItemTable } from '../../db/schema'; + +export const bulkAddItemsGlobalService = async ( + items: Array<{ + name: string; + weight: number; + quantity: number; + unit: string; + type: 'Food' | 'Water' | 'Essentials'; + ownerId: string; + }>, + executionCtx: ExecutionContext, +) => { + const categories = ['Food', 'Water', 'Essentials']; + + const itemCategoryClass = new ItemCategory(); + const insertedItems = []; + + for (const itemData of items) { + const { name, weight, quantity, unit, type, ownerId } = itemData; + if (!categories.includes(type)) { + throw new Error(`Category must be one of: ${categories.join(', ')}`); + } + + let category: InsertItemCategory | null; + category = + (await itemCategoryClass.findItemCategory({ name: type })) || null; + if (!category) { + category = await itemCategoryClass.create({ name: type }); + } + + const newItem = { + name, + weight, + quantity, + unit, + categoryId: category.id, + global: true, + ownerId, + }; + + const item = await DbClient.instance + .insert(ItemTable) + .values(newItem) + .returning() + .get(); + + insertedItems.push(item); + } + + return insertedItems; +}; diff --git a/server/src/services/item/importFromBucketService.ts b/server/src/services/item/importFromBucketService.ts new file mode 100644 index 000000000..7468b47aa --- /dev/null +++ b/server/src/services/item/importFromBucketService.ts @@ -0,0 +1,186 @@ +import * as CryptoJS from 'crypto-js'; +import { parseStringPromise } from 'xml2js'; +import Papa from 'papaparse'; + +interface CSVType { + name: string; + weight: number; + quantity: number; + unit: string; + type: 'Essentials' | 'Food' | 'Water'; + ownerId: string; +} + +function getSignatureKey( + key: string, + dateStamp: string, + regionName: string, + serviceName: string, +) { + const kDate = CryptoJS.HmacSHA256(dateStamp, 'AWS4' + key); + const kRegion = CryptoJS.HmacSHA256(regionName, kDate); + const kService = CryptoJS.HmacSHA256(serviceName, kRegion); + const kSigning = CryptoJS.HmacSHA256('aws4_request', kService); + return kSigning; +} + +function generateAWSHeaders( + url: string, + method: string, + service: string, + region: string, + accessKey: string, + secretKey: string, + sessionToken: string, + algorithm: string, + x_amz_token: string, +) { + const amzDate = new Date() + .toISOString() + .replace(/[:-]/g, '') + .replace(/\.\d{3}/, ''); + const dateStamp = amzDate.slice(0, 8); + const canonicalUri = new URL(url).pathname; + const canonicalQueryString = ''; + const payloadHash = CryptoJS.SHA256('').toString(CryptoJS.enc.Hex); + const canonicalHeaders = + `host:${new URL(url).hostname}\nx-amz-date:${amzDate}\n` + + (sessionToken ? `x-amz-security-token:${sessionToken}\n` : ''); + const signedHeaders = + 'host;x-amz-date' + (sessionToken ? `;${x_amz_token}` : ''); + const canonicalRequest = `${method}\n${canonicalUri}\n${canonicalQueryString}\n${canonicalHeaders}\n${signedHeaders}\n${payloadHash}`; + + const credentialScope = `${dateStamp}/${region}/${service}/aws4_request`; + const stringToSign = `${algorithm}\n${amzDate}\n${credentialScope}\n${CryptoJS.SHA256(canonicalRequest).toString(CryptoJS.enc.Hex)}`; + + const signingKey = getSignatureKey(secretKey, dateStamp, region, service); + const signature = CryptoJS.HmacSHA256(stringToSign, signingKey).toString( + CryptoJS.enc.Hex, + ); + const authorizationHeader = `${algorithm} Credential=${accessKey}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`; + + return { + host: new URL(url).hostname, + 'x-amz-date': amzDate, + 'x-amz-content-sha256': payloadHash, + Authorization: authorizationHeader, + ...(sessionToken && { 'x-amz-security-token': sessionToken }), + }; +} + +export async function fetchFromS3( + url: string, + method: string, + service: string, + region: string, + accessKey: string, + secretKey: string, + sessionToken: string, + algorithm: string, + x_amz_token: string, +) { + const headers = generateAWSHeaders( + url, + method, + service, + region, + accessKey, + secretKey, + sessionToken, + algorithm, + x_amz_token, + ); + + const response = await fetch(url, { + method, + headers, + }); + + if (!response.ok) { + throw new Error(`Failed to fetch from S3: ${response.statusText}`); + } + + const data = await response.text(); + return data; +} + +export async function listBucketContents( + endpoint: string, + bucket: string, + directory: string, + method: string, + service: string, + region: string, + accessKey: string, + secretKey: string, + sessionToken: string, + algorithm: string, + x_amz_token: string, +) { + const listData = await fetchFromS3( + `${endpoint}/${bucket}`, + method, + service, + region, + accessKey, + secretKey, + sessionToken, + algorithm, + x_amz_token, + ); + + const bucketOptions = [ + { label: 'bucket 1', value: 'rei' }, + { label: 'bucket 2', value: 'sierra' }, + { label: 'bucket 3', value: 'cabelas' }, + { label: 'bucket 4', value: 'moosejaw' }, + { label: 'bucket 5', value: 'backcountry' }, + ]; + + directory = + bucketOptions.find((item) => item.label === directory)?.value || ''; + + const parsedListData = await parseStringPromise(listData); + const contents = parsedListData.ListBucketResult.Contents; + + const fileNames = contents + .filter((item) => item.Key[0].startsWith(`${directory}/`)) + .map((item) => item.Key[0]); + + return fileNames.sort().reverse()[0]; // Get the latest file name +} + +export async function parseCSVData(fileData: string, ownerId: string) { + return new Promise((resolve, reject) => { + const itemsToInsert = []; + + Papa.parse(fileData, { + header: true, + complete: (results) => { + try { + for (const [index, item] of results.data.entries()) { + if ( + index === results.data.length - 1 && + Object.values(item).every((value) => value === '') + ) { + continue; + } + + itemsToInsert.push({ + name: item.name, + weight: item.claimed_weight || 0, + quantity: item.quantity || 1, + unit: item.claimed_weight_unit || 'g', + type: 'Essentials', + ownerId, + }); + } + resolve(itemsToInsert); + } catch (error) { + reject(error); + } + }, + error: (error) => reject(error), + }); + }); +} diff --git a/server/src/services/item/item.service.ts b/server/src/services/item/item.service.ts index 1ca7d6af7..fb24b7bc3 100644 --- a/server/src/services/item/item.service.ts +++ b/server/src/services/item/item.service.ts @@ -9,3 +9,5 @@ export * from './getItemByIdService'; export * from './getItemsGloballyService'; export * from './searchItemsByNameService'; export * from './getItemsService'; +export * from './bulkAddGlobalItemService'; +export * from './importFromBucketService'; diff --git a/server/vitest.config.d.ts b/server/vitest.config.d.ts index 06c214f2f..85bcff909 100644 --- a/server/vitest.config.d.ts +++ b/server/vitest.config.d.ts @@ -1,4 +1,2 @@ -declare const _default: import('@cloudflare/vitest-pool-workers/config').AnyConfigExport< - import('@cloudflare/vitest-pool-workers/config').WorkersProjectConfigExport ->; +declare const _default: import("@cloudflare/vitest-pool-workers/config").AnyConfigExport; export default _default; diff --git a/yarn.lock b/yarn.lock index c03aaf819..d748bbabb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -117,10 +117,10 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/compat-data@npm:7.25.2" - checksum: 10/fd61de9303db3177fc98173571f81f3f551eac5c9f839c05ad02818b11fe77a74daa632abebf7f423fbb4a29976ae9141e0d2bd7517746a0ff3d74cb659ad33a +"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2, @babel/compat-data@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/compat-data@npm:7.25.4" + checksum: 10/d37a8936cc355a9ca3050102e03d179bdae26bd2e5c99a977637376c192b23637a039795f153c849437a086727628c9860e2c6af92d7151396e2362c09176337 languageName: node linkType: hard @@ -147,15 +147,15 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.20.0, @babel/generator@npm:^7.20.5, @babel/generator@npm:^7.22.7, @babel/generator@npm:^7.23.3, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.7.2": - version: 7.25.0 - resolution: "@babel/generator@npm:7.25.0" +"@babel/generator@npm:^7.20.0, @babel/generator@npm:^7.20.5, @babel/generator@npm:^7.22.7, @babel/generator@npm:^7.23.3, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.4, @babel/generator@npm:^7.7.2": + version: 7.25.4 + resolution: "@babel/generator@npm:7.25.4" dependencies: - "@babel/types": "npm:^7.25.0" + "@babel/types": "npm:^7.25.4" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^2.5.1" - checksum: 10/de3ce2ae7aa0c9585260556ca5a81ce2ce6b8269e3260d7bb4e47a74661af715184ca6343e9906c22e4dd3eed5ce39977dfaf6cded4d2d8968fa096c7cf66697 + checksum: 10/35b05e1f230649469c64971e034b5101079c37d23f8cc658323f1209e39daf58d29ec4ce6de1d6d31dacddd39ffbf6b7e9a2b124d4f6b360a5f7046ae10fbaf4 languageName: node linkType: hard @@ -191,24 +191,24 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.7, @babel/helper-create-class-features-plugin@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-create-class-features-plugin@npm:7.25.0" +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.7, @babel/helper-create-class-features-plugin@npm:^7.25.0, @babel/helper-create-class-features-plugin@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.4" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.24.7" "@babel/helper-member-expression-to-functions": "npm:^7.24.8" "@babel/helper-optimise-call-expression": "npm:^7.24.7" "@babel/helper-replace-supers": "npm:^7.25.0" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.4" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/d0f6b63bd3f6da5204200ab7bb43ccc04fe75256aacf53e5dd60d5f56f5cb1bc7c8b315ecbbc4edca53aa71021ac9322376d7a4b2ee57166b8660488766d2784 + checksum: 10/47218da9fd964af30d41f0635d9e33eed7518e03aa8f10c3eb8a563bb2c14f52be3e3199db5912ae0e26058c23bb511c811e565c55ecec09427b04b867ed13c2 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7, @babel/helper-create-regexp-features-plugin@npm:^7.25.0": +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7, @babel/helper-create-regexp-features-plugin@npm:^7.25.0, @babel/helper-create-regexp-features-plugin@npm:^7.25.2": version: 7.25.2 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.2" dependencies: @@ -395,14 +395,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.1.6, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.0, @babel/parser@npm:^7.20.15, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.3, @babel/parser@npm:^7.23.6, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.3": - version: 7.25.3 - resolution: "@babel/parser@npm:7.25.3" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.1.6, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.0, @babel/parser@npm:^7.20.15, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.3, @babel/parser@npm:^7.23.6, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/parser@npm:7.25.4" dependencies: - "@babel/types": "npm:^7.25.2" + "@babel/types": "npm:^7.25.4" bin: parser: ./bin/babel-parser.js - checksum: 10/7bd57e89110bdc9cffe0ef2f2286f1cfb9bbb3aa1d9208c287e0bf6a1eb4cfe6ab33958876ebc59aafcbe3e2381c4449240fc7cc2ff32b79bc9db89cd52fc779 + checksum: 10/343b8a76c43549e370fe96f4f6d564382a6cdff60e9c3b8a594c51e4cefd58ec9945e82e8c4dfbf15ac865a04e4b29806531440760748e28568e6aec21bc9cb5 languageName: node linkType: hard @@ -858,13 +858,13 @@ __metadata: linkType: hard "@babel/plugin-syntax-typescript@npm:^7.21.4, @babel/plugin-syntax-typescript@npm:^7.24.7, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.24.7 - resolution: "@babel/plugin-syntax-typescript@npm:7.24.7" + version: 7.25.4 + resolution: "@babel/plugin-syntax-typescript@npm:7.25.4" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.8" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/2518cc06323f5673c93142935879c112fea0ee836dfa9a9ec744fc972fdeaf22a06fe631c23817562aaaddadf64626a4fbba98c300b3e2c828f48f0f1cca0ce0 + checksum: 10/0771b45a35fd536cd3b3a48e5eda0f53e2d4f4a0ca07377cc247efa39eaf6002ed1c478106aad2650e54aefaebcb4f34f3284c4ae9252695dbd944bf66addfb0 languageName: node linkType: hard @@ -891,17 +891,17 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.0" +"@babel/plugin-transform-async-generator-functions@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.4" dependencies: "@babel/helper-plugin-utils": "npm:^7.24.8" "@babel/helper-remap-async-to-generator": "npm:^7.25.0" "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/traverse": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/c65757490005234719a9614dbaf5004ca815612eff251edf95d4149fb74f42ebf91ff079f6b3594b6aa93eec6f4b6d2cda9f2c924f6217bb0422896be58ed0fe + checksum: 10/0004d910bbec3ef916acf5c7cf8b11671e65d2dd425a82f1101838b9b6243bfdf9578335584d9dedd20acc162796b687930e127c6042484e05b758af695e6cb8 languageName: node linkType: hard @@ -940,15 +940,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-class-properties@npm:7.24.7" +"@babel/plugin-transform-class-properties@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-class-properties@npm:7.25.4" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.4" + "@babel/helper-plugin-utils": "npm:^7.24.8" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/1c6f645dd3889257028f27bfbb04526ac7676763a923fc8203aa79aa5232820e0201cb858c73b684b1922327af10304121ac013c7b756876d54560a9c1a7bc79 + checksum: 10/203a21384303d66fb5d841b77cba8b8994623ff4d26d208e3d05b36858c4919626a8d74871fa4b9195310c2e7883bf180359c4f5a76481ea55190c224d9746f4 languageName: node linkType: hard @@ -965,19 +965,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-classes@npm:7.25.0" +"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-classes@npm:7.25.4" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-compilation-targets": "npm:^7.24.8" + "@babel/helper-compilation-targets": "npm:^7.25.2" "@babel/helper-plugin-utils": "npm:^7.24.8" "@babel/helper-replace-supers": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.4" globals: "npm:^11.1.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/59aeb33b91e462a9b01cc9691c6a27e6601c5b76d83e3e4f95fef4086c6561e3557597847fe5243006542723fe4288d8fa6824544b1d94bb3104438f4fd96ebc + checksum: 10/17db5889803529bec366c6f0602687fdd605c2fec8cb6fe918261cb55cd89e9d8c9aa2aa6f3fd64d36492ce02d7d0752b09a284b0f833c1185f7dad9b9506310 languageName: node linkType: hard @@ -1329,15 +1329,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.22.5, @babel/plugin-transform-private-methods@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-private-methods@npm:7.24.7" +"@babel/plugin-transform-private-methods@npm:^7.22.5, @babel/plugin-transform-private-methods@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.4" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.4" + "@babel/helper-plugin-utils": "npm:^7.24.8" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/5338df2aae53c43e6a7ea0c44f20a1100709778769c7e42d4901a61945c3200ba0e7fca83832f48932423a68528219fbea233cb5b8741a2501fdecbacdc08292 + checksum: 10/d5c29ba121d6ce40e8055a632c32e69006c513607145a29701f93b416a8c53a60e53565df417218e2d8b7f1ba73adb837601e8e9d0a3215da50e4c9507f9f1fa languageName: node linkType: hard @@ -1461,18 +1461,18 @@ __metadata: linkType: hard "@babel/plugin-transform-runtime@npm:^7.0.0": - version: 7.24.7 - resolution: "@babel/plugin-transform-runtime@npm:7.24.7" + version: 7.25.4 + resolution: "@babel/plugin-transform-runtime@npm:7.25.4" dependencies: "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.8" babel-plugin-polyfill-corejs2: "npm:^0.4.10" - babel-plugin-polyfill-corejs3: "npm:^0.10.1" + babel-plugin-polyfill-corejs3: "npm:^0.10.6" babel-plugin-polyfill-regenerator: "npm:^0.6.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/6f82f2104394d6efef3ba5b38474018f1072d524087eb223776dd55cf8ec8885e813a73004c95218f37de7c0dbaa1a136d2e359cee8cf9ffb3f2e130a3aeb99a + checksum: 10/081dcc4fb8ae86d80b6b261e7fe55d4876995aa28011813331a14de5b9ecd845c938b6bd688d95febacd72b3f446e1439582e81cee67447c73b78c514849ddde languageName: node linkType: hard @@ -1582,23 +1582,23 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.7" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.4" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.2" + "@babel/helper-plugin-utils": "npm:^7.24.8" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/183b72d5987dc93f9971667ce3f26d28b0e1058e71b129733dd9d5282aecba4c062b67c9567526780d2defd2bfbf950ca58d8306dc90b2761fd1e960d867ddb7 + checksum: 10/d5d07d17932656fa4d62fd67ecaa1a5e4c2e92365a924f1a2a8cf8108762f137a30cd55eb3a7d0504258f27a19ad0decca6b62a5c37a5aada709cbb46c4a871f languageName: node linkType: hard "@babel/preset-env@npm:^7.20.0": - version: 7.25.3 - resolution: "@babel/preset-env@npm:7.25.3" + version: 7.25.4 + resolution: "@babel/preset-env@npm:7.25.4" dependencies: - "@babel/compat-data": "npm:^7.25.2" + "@babel/compat-data": "npm:^7.25.4" "@babel/helper-compilation-targets": "npm:^7.25.2" "@babel/helper-plugin-utils": "npm:^7.24.8" "@babel/helper-validator-option": "npm:^7.24.8" @@ -1627,13 +1627,13 @@ __metadata: "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" "@babel/plugin-transform-arrow-functions": "npm:^7.24.7" - "@babel/plugin-transform-async-generator-functions": "npm:^7.25.0" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.4" "@babel/plugin-transform-async-to-generator": "npm:^7.24.7" "@babel/plugin-transform-block-scoped-functions": "npm:^7.24.7" "@babel/plugin-transform-block-scoping": "npm:^7.25.0" - "@babel/plugin-transform-class-properties": "npm:^7.24.7" + "@babel/plugin-transform-class-properties": "npm:^7.25.4" "@babel/plugin-transform-class-static-block": "npm:^7.24.7" - "@babel/plugin-transform-classes": "npm:^7.25.0" + "@babel/plugin-transform-classes": "npm:^7.25.4" "@babel/plugin-transform-computed-properties": "npm:^7.24.7" "@babel/plugin-transform-destructuring": "npm:^7.24.8" "@babel/plugin-transform-dotall-regex": "npm:^7.24.7" @@ -1661,7 +1661,7 @@ __metadata: "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.7" "@babel/plugin-transform-optional-chaining": "npm:^7.24.8" "@babel/plugin-transform-parameters": "npm:^7.24.7" - "@babel/plugin-transform-private-methods": "npm:^7.24.7" + "@babel/plugin-transform-private-methods": "npm:^7.25.4" "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7" "@babel/plugin-transform-property-literals": "npm:^7.24.7" "@babel/plugin-transform-regenerator": "npm:^7.24.7" @@ -1674,16 +1674,16 @@ __metadata: "@babel/plugin-transform-unicode-escapes": "npm:^7.24.7" "@babel/plugin-transform-unicode-property-regex": "npm:^7.24.7" "@babel/plugin-transform-unicode-regex": "npm:^7.24.7" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.24.7" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.4" "@babel/preset-modules": "npm:0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2: "npm:^0.4.10" - babel-plugin-polyfill-corejs3: "npm:^0.10.4" + babel-plugin-polyfill-corejs3: "npm:^0.10.6" babel-plugin-polyfill-regenerator: "npm:^0.6.1" core-js-compat: "npm:^3.37.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/293c32dee33f138d22cea0c0e163b6d79ef3860ac269921a438edb4adbfa53976ce2cd3f7a79408c8e52c852b5feda45abdbc986a54e9d9aa0b6680d7a371a58 + checksum: 10/45ca65bdc7fa11ca51167804052460eda32bf2e6620c7ba998e2d95bc867595913532ee7d748e97e808eabcc66aabe796bd75c59014d996ec8183fa5a7245862 languageName: node linkType: hard @@ -1795,29 +1795,29 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.20.0, @babel/traverse@npm:^7.23.3, @babel/traverse@npm:^7.23.7, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3": - version: 7.25.3 - resolution: "@babel/traverse@npm:7.25.3" +"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.20.0, @babel/traverse@npm:^7.23.3, @babel/traverse@npm:^7.23.7, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/traverse@npm:7.25.4" dependencies: "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.25.0" - "@babel/parser": "npm:^7.25.3" + "@babel/generator": "npm:^7.25.4" + "@babel/parser": "npm:^7.25.4" "@babel/template": "npm:^7.25.0" - "@babel/types": "npm:^7.25.2" + "@babel/types": "npm:^7.25.4" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10/fba34f323e17fa83372fc290bc12413a50e2f780a86c7d8b1875c594b6be2857867804de5d52ab10a78a9cae29e1b09ea15d85ad63671ce97d79c40650282bb9 + checksum: 10/a85c16047ab8e454e2e758c75c31994cec328bd6d8b4b22e915fa7393a03b3ab96d1218f43dc7ef77c957cc488dc38100bdf504d08a80a131e89b2e49cfa2be5 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.1.6, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.23.3, @babel/types@npm:^7.23.6, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": - version: 7.25.2 - resolution: "@babel/types@npm:7.25.2" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.1.6, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.23.3, @babel/types@npm:^7.23.6, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.4, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": + version: 7.25.4 + resolution: "@babel/types@npm:7.25.4" dependencies: "@babel/helper-string-parser": "npm:^7.24.8" "@babel/helper-validator-identifier": "npm:^7.24.7" to-fast-properties: "npm:^2.0.0" - checksum: 10/ccf5399db1dcd6dd87b84a6f7bc8dd241e04a326f4f038c973c26ccb69cd360c8f2276603f584c58fd94da95229313060b27baceb0d9b18a435742d3f616afd1 + checksum: 10/d4a1194612d0a2a6ce9a0be325578b43d74e5f5278c67409468ba0a924341f0ad349ef0245ee8a36da3766efe5cc59cd6bb52547674150f97d8dc4c8cfa5d6b8 languageName: node linkType: hard @@ -2168,9 +2168,9 @@ __metadata: languageName: node linkType: hard -"@cloudflare/workerd-darwin-64@npm:1.20240806.0": - version: 1.20240806.0 - resolution: "@cloudflare/workerd-darwin-64@npm:1.20240806.0" +"@cloudflare/workerd-darwin-64@npm:1.20240821.1": + version: 1.20240821.1 + resolution: "@cloudflare/workerd-darwin-64@npm:1.20240821.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -2182,9 +2182,9 @@ __metadata: languageName: node linkType: hard -"@cloudflare/workerd-darwin-arm64@npm:1.20240806.0": - version: 1.20240806.0 - resolution: "@cloudflare/workerd-darwin-arm64@npm:1.20240806.0" +"@cloudflare/workerd-darwin-arm64@npm:1.20240821.1": + version: 1.20240821.1 + resolution: "@cloudflare/workerd-darwin-arm64@npm:1.20240821.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -2196,9 +2196,9 @@ __metadata: languageName: node linkType: hard -"@cloudflare/workerd-linux-64@npm:1.20240806.0": - version: 1.20240806.0 - resolution: "@cloudflare/workerd-linux-64@npm:1.20240806.0" +"@cloudflare/workerd-linux-64@npm:1.20240821.1": + version: 1.20240821.1 + resolution: "@cloudflare/workerd-linux-64@npm:1.20240821.1" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -2210,9 +2210,9 @@ __metadata: languageName: node linkType: hard -"@cloudflare/workerd-linux-arm64@npm:1.20240806.0": - version: 1.20240806.0 - resolution: "@cloudflare/workerd-linux-arm64@npm:1.20240806.0" +"@cloudflare/workerd-linux-arm64@npm:1.20240821.1": + version: 1.20240821.1 + resolution: "@cloudflare/workerd-linux-arm64@npm:1.20240821.1" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -2224,17 +2224,17 @@ __metadata: languageName: node linkType: hard -"@cloudflare/workerd-windows-64@npm:1.20240806.0": - version: 1.20240806.0 - resolution: "@cloudflare/workerd-windows-64@npm:1.20240806.0" +"@cloudflare/workerd-windows-64@npm:1.20240821.1": + version: 1.20240821.1 + resolution: "@cloudflare/workerd-windows-64@npm:1.20240821.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@cloudflare/workers-shared@npm:0.2.0": - version: 0.2.0 - resolution: "@cloudflare/workers-shared@npm:0.2.0" - checksum: 10/5950232b5b67394a23c2badc743d229197b31c6c3f58499a59ab2ff813e32e20840c21c9a137f61f16dee0089644dbdf5adb46bf5edaf91197dd8b5acc60bc10 +"@cloudflare/workers-shared@npm:0.3.0": + version: 0.3.0 + resolution: "@cloudflare/workers-shared@npm:0.3.0" + checksum: 10/1466e03bfea2b13306432b3a109fb1119e71dcc4d03921af7ccf724badbfca299c5dce7f80a854c085de016021328e79eef9185b63a140f2e9482cd92e68e19e languageName: node linkType: hard @@ -6072,7 +6072,7 @@ __metadata: resolution: "@packrat/crosspath@workspace:packages/crosspath" dependencies: "@tamagui/build": "npm:1.96.0" - typescript: "npm:^5.3.3" + typescript: "npm:^5.5.3" peerDependencies: "@tanstack/react-query": ^4.36.1 react: ^18.2.0 @@ -6130,7 +6130,7 @@ __metadata: "@ts-react/form": "npm:^1.8.3" awesome-phonenumber: "npm:^6.4.0" esbuild: "npm:^0.19.5" - expo-document-picker: "npm:~11.10.1" + expo-document-picker: "npm:^12.0.2" expo-image-picker: "npm:~14.7.1" foxact: "npm:^0.2.33" jotai: "npm:^2.6.4" @@ -6159,7 +6159,7 @@ __metadata: "@types/express": "npm:^4.17.17" "@types/node": "npm:^20.14.2" express: "npm:^4.19.2" - typescript: "npm:^5.3.3" + typescript: "npm:^5.5.3" zod: "npm:^3.22.4" languageName: unknown linkType: soft @@ -7400,17 +7400,6 @@ __metadata: languageName: node linkType: hard -"@react-native-async-storage/async-storage@npm:1.21.0": - version: 1.21.0 - resolution: "@react-native-async-storage/async-storage@npm:1.21.0" - dependencies: - merge-options: "npm:^3.0.4" - peerDependencies: - react-native: ^0.0.0-0 || >=0.60 <1.0 - checksum: 10/7860faaa0ddb849ba4019f48fba90cffea686fb8a29813379ff38af8d635d4d8e7841735c2ba53b7788fb54312f157338e5630a768e9b2339dc33c4f5b316ca7 - languageName: node - linkType: hard - "@react-native-async-storage/async-storage@npm:^1.23.1": version: 1.24.0 resolution: "@react-native-async-storage/async-storage@npm:1.24.0" @@ -8588,7 +8577,7 @@ __metadata: languageName: node linkType: hard -"@rnmapbox/maps@npm:^10.1.21": +"@rnmapbox/maps@npm:^10.1.29": version: 10.1.29 resolution: "@rnmapbox/maps@npm:10.1.29" dependencies: @@ -10842,8 +10831,8 @@ __metadata: linkType: hard "@tanstack/react-router@npm:^1.16.5": - version: 1.49.1 - resolution: "@tanstack/react-router@npm:1.49.1" + version: 1.49.2 + resolution: "@tanstack/react-router@npm:1.49.2" dependencies: "@tanstack/history": "npm:1.49.0" "@tanstack/react-store": "npm:^0.5.5" @@ -10852,7 +10841,7 @@ __metadata: peerDependencies: react: ">=18" react-dom: ">=18" - checksum: 10/41557085a05a0b855e0c5293308eae0a2e358de234fb797778c3f96804d5d11c65c98f962a0fe05fdbd56d599ad8fca61548ea7c9629baecae66b61a708fc639 + checksum: 10/47f737b1d6ca549ef8e9ae10989daf88192f5b61d9a23ed5fb31c2959a623c47f639feb7fd3b4c8ed231a14f129520f32c0869664b9c240f4823fcb4e2298dca languageName: node linkType: hard @@ -10893,32 +10882,32 @@ __metadata: linkType: hard "@tanstack/router-devtools@npm:^1.16.5": - version: 1.49.1 - resolution: "@tanstack/router-devtools@npm:1.49.1" + version: 1.49.2 + resolution: "@tanstack/router-devtools@npm:1.49.2" dependencies: clsx: "npm:^2.1.1" goober: "npm:^2.1.14" peerDependencies: - "@tanstack/react-router": ^1.49.1 + "@tanstack/react-router": ^1.49.2 react: ">=18" react-dom: ">=18" - checksum: 10/05b48bf6edfc51afe8757888e90a6af04eefa68791cf9eb00a6f4080377ebbada18e2be64694dddf4a96ad72cacccc5349cd34f31a90971d4240650435cb22db + checksum: 10/fcb19fc8ab1192625a8f8efa01f5fdfb4e3779c11c30c171392d56a2e15610e51b278f7331c5be03e4bcffaa205d1825efe948f6d90552f5c03882e40db6ac0f languageName: node linkType: hard -"@tanstack/router-generator@npm:^1.48.3": - version: 1.48.3 - resolution: "@tanstack/router-generator@npm:1.48.3" +"@tanstack/router-generator@npm:^1.49.3": + version: 1.49.3 + resolution: "@tanstack/router-generator@npm:1.49.3" dependencies: prettier: "npm:^3.3.3" zod: "npm:^3.23.8" - checksum: 10/cf9ff20b206a25b1307ca0dc851fe1bdbc827778a75ce80afc99cd04907062d0a0cf789044fbe1800521002ec4902abd53a22d3d4dd0c68e9e29ce0730b516d9 + checksum: 10/bccf002284b28346eed02ab6a378176b28d6d4df42d35becaede3f88c3645ebad8a1c5e9d68411aca919e50f05146b7a7de70874163ebaac8d2d9c76fe8e317e languageName: node linkType: hard -"@tanstack/router-plugin@npm:^1.48.6": - version: 1.48.6 - resolution: "@tanstack/router-plugin@npm:1.48.6" +"@tanstack/router-plugin@npm:^1.49.3": + version: 1.49.3 + resolution: "@tanstack/router-plugin@npm:1.49.3" dependencies: "@babel/core": "npm:^7.25.2" "@babel/generator": "npm:^7.25.0" @@ -10928,7 +10917,7 @@ __metadata: "@babel/template": "npm:^7.25.0" "@babel/traverse": "npm:^7.25.3" "@babel/types": "npm:^7.25.2" - "@tanstack/router-generator": "npm:^1.48.3" + "@tanstack/router-generator": "npm:^1.49.3" "@types/babel__core": "npm:^7.20.5" "@types/babel__generator": "npm:^7.6.8" "@types/babel__template": "npm:^7.4.4" @@ -10948,16 +10937,16 @@ __metadata: optional: true webpack: optional: true - checksum: 10/e4acb91a14da8b061071ffc8b7022a17f2e4ac133a96816b702660c4e8afefffaf1d7600be3e805deb032b9503e73c77dab7599fa03c05ed832f71ca9b0856c2 + checksum: 10/379185317f6ad176c9db0a81b248d37305b6373c288a5314d028a1253d5ecad340beb66b400137cc64a32e9fa317f03588dfb210d84a12cafe2bc73a8405c266 languageName: node linkType: hard "@tanstack/router-vite-plugin@npm:^1.16.5": - version: 1.48.6 - resolution: "@tanstack/router-vite-plugin@npm:1.48.6" + version: 1.49.3 + resolution: "@tanstack/router-vite-plugin@npm:1.49.3" dependencies: - "@tanstack/router-plugin": "npm:^1.48.6" - checksum: 10/b759730827f37085c802085d090b650dd7fc426dc0342a0eff2839ea8cca4f10779cae202795fa16de580d62a5d2c6805761d493ffe0730638b55e9846f778ed + "@tanstack/router-plugin": "npm:^1.49.3" + checksum: 10/e2367504898134b517368e717c8eb99a97021238dbd45628b0b44697b06807fb79b7c609422d2a0696d3e14035e39a5880349c00ff5309a1556bdd46b4a8812b languageName: node linkType: hard @@ -11505,6 +11494,13 @@ __metadata: languageName: node linkType: hard +"@types/crypto-js@npm:^4": + version: 4.2.2 + resolution: "@types/crypto-js@npm:4.2.2" + checksum: 10/a40fc5a9219fd33f54ba3e094c5e5ab2904d3106681a76f1029bb038976591e9c8959099963bf4474fde21c2d8d00c1f896445206a3a58f85588f9cb1bd96a9a + languageName: node + linkType: hard + "@types/csurf@npm:*, @types/csurf@npm:^1.11.2": version: 1.11.5 resolution: "@types/csurf@npm:1.11.5" @@ -11514,26 +11510,6 @@ __metadata: languageName: node linkType: hard -"@types/eslint-scope@npm:^3.7.3": - version: 3.7.7 - resolution: "@types/eslint-scope@npm:3.7.7" - dependencies: - "@types/eslint": "npm:*" - "@types/estree": "npm:*" - checksum: 10/e2889a124aaab0b89af1bab5959847c5bec09809209255de0e63b9f54c629a94781daa04adb66bffcdd742f5e25a17614fb933965093c0eea64aacda4309380e - languageName: node - linkType: hard - -"@types/eslint@npm:*": - version: 9.6.0 - resolution: "@types/eslint@npm:9.6.0" - dependencies: - "@types/estree": "npm:*" - "@types/json-schema": "npm:*" - checksum: 10/39fc797c671ec9c9184802b4974748cf45ee1b11d7aaaaede44426abcafd07ec7c18eb090e8f5b3387b51637ce3fdf54499472d8dd58a928f0d005cbacb573b4 - languageName: node - linkType: hard - "@types/estree-jsx@npm:^1.0.0": version: 1.0.5 resolution: "@types/estree-jsx@npm:1.0.5" @@ -11732,7 +11708,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10/1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 @@ -11827,11 +11803,11 @@ __metadata: linkType: hard "@types/node@npm:*, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0": - version: 22.4.2 - resolution: "@types/node@npm:22.4.2" + version: 22.5.0 + resolution: "@types/node@npm:22.5.0" dependencies: undici-types: "npm:~6.19.2" - checksum: 10/b166dbf77da448c61e800d5adb3e6b1f6df0677edc5d0f686f7a17cf6a2500eb4966a23112cb37378be3344ce3156aec8cf4918fc49dc8cd401724aaeec74cc0 + checksum: 10/89af3bd217b1559b645a9ed16d4ae3add75749814cbd8eefddd1b96003d1973afb1c8a2b23d69f3a8cc6c532e3aa185eaf5cc29a6e7c42c311a2aad4c99430ae languageName: node linkType: hard @@ -12145,6 +12121,15 @@ __metadata: languageName: node linkType: hard +"@types/xml2js@npm:^0": + version: 0.4.14 + resolution: "@types/xml2js@npm:0.4.14" + dependencies: + "@types/node": "npm:*" + checksum: 10/d76338b8d6ce8540c7af6a32aacf96c38f6de48254568f58f6e5ac2af3f88e6bd1490e5346d3bb336990f91267d23c5cc09e8bf7e80840a63c7855dbf174ecbb + languageName: node + linkType: hard + "@types/yargs-parser@npm:*": version: 21.0.3 resolution: "@types/yargs-parser@npm:21.0.3" @@ -12555,15 +12540,15 @@ __metadata: languageName: node linkType: hard -"@vercel/remix-builder@npm:2.2.5": - version: 2.2.5 - resolution: "@vercel/remix-builder@npm:2.2.5" +"@vercel/remix-builder@npm:2.2.6": + version: 2.2.6 + resolution: "@vercel/remix-builder@npm:2.2.6" dependencies: "@vercel/error-utils": "npm:2.0.2" "@vercel/nft": "npm:0.27.3" "@vercel/static-config": "npm:3.0.0" ts-morph: "npm:12.0.0" - checksum: 10/0de76440c9dc2e74fd28a506d51126a2152cb52d4d585b1463b92c22a3603bf6fbd6b4a7f3c371dd2a4f59f4d921b5d9ed8a518046450eb85e38db34351c26da + checksum: 10/e598ab1c20c6b1833fde087230616d8e7128cfeb0b07434af9f7c5e030f9c484c09650d981965227b32cc13e5a57a798e3d6ea820dc3b4d6aee30e17af2ed634 languageName: node linkType: hard @@ -12886,35 +12871,35 @@ __metadata: languageName: node linkType: hard -"@whatwg-node/fetch@npm:^0.9.20, @whatwg-node/fetch@npm:^0.9.7": - version: 0.9.20 - resolution: "@whatwg-node/fetch@npm:0.9.20" +"@whatwg-node/fetch@npm:^0.9.21, @whatwg-node/fetch@npm:^0.9.7": + version: 0.9.21 + resolution: "@whatwg-node/fetch@npm:0.9.21" dependencies: - "@whatwg-node/node-fetch": "npm:^0.5.22" + "@whatwg-node/node-fetch": "npm:^0.5.23" urlpattern-polyfill: "npm:^10.0.0" - checksum: 10/29613c26678030a938ab84ba1b60196fdad4dc902535ce9455984a2f6961d9fb29da460525089f9ec3620670bed327cf8987eac26ca4f3538b090784b171d113 + checksum: 10/fa42ba0df98513d3f4d64ff85befd0dccf9d526ea9eff31f0739f2fb48bccf7d54dcc2286e8b9fca8eab51d3e2d60befdd386df872eb6ec73f2e284ebbdff3d1 languageName: node linkType: hard -"@whatwg-node/node-fetch@npm:^0.5.22": - version: 0.5.22 - resolution: "@whatwg-node/node-fetch@npm:0.5.22" +"@whatwg-node/node-fetch@npm:^0.5.23": + version: 0.5.25 + resolution: "@whatwg-node/node-fetch@npm:0.5.25" dependencies: "@kamilkisiela/fast-url-parser": "npm:^1.1.4" busboy: "npm:^1.6.0" fast-querystring: "npm:^1.1.1" tslib: "npm:^2.6.3" - checksum: 10/2b420147b9c7ee6ee7decc794d275b415bad6d3dad8d32b2fe9b64938848e66351c3a4cfe4b8d46f98bfbda8e1739e750670e21ffc794b577071aab38195a1da + checksum: 10/fd0a8623e7292d0a025c6412bc96388eda598672119abb0f53a0bc183bfefe659e5d4d2576d31202855b3f9e28ad83e7a9f8291fd828e4c22afaff2cd2ee0c1c languageName: node linkType: hard "@whatwg-node/server@npm:^0.9.1": - version: 0.9.47 - resolution: "@whatwg-node/server@npm:0.9.47" + version: 0.9.49 + resolution: "@whatwg-node/server@npm:0.9.49" dependencies: - "@whatwg-node/fetch": "npm:^0.9.20" + "@whatwg-node/fetch": "npm:^0.9.21" tslib: "npm:^2.6.3" - checksum: 10/708d4dbd7d841e891336a2ba3390aba45ad8929e0c20840de1594c3acf674d6ba151219f4acfcedad6ba0b9a2111915f953f4ca78caaaa4a4ed473f015f2f659 + checksum: 10/1258d1bf66441a9df36b7b02dee181be733d5446e3319dded80e3d25900cb473f4ad81708b364b22c3a84a009a1cfd275011d5a39affce6b774f35c007c932d9 languageName: node linkType: hard @@ -13393,7 +13378,7 @@ __metadata: "@packrat/crosspath": "npm:*" "@packrat/ui": "npm:*" "@packrat/validations": "npm:*" - "@react-native-async-storage/async-storage": "npm:1.21.0" + "@react-native-async-storage/async-storage": "npm:^1.23.1" "@react-native-community/geolocation": "npm:^3.0.6" "@react-native-community/netinfo": "npm:11.1.0" "@react-native-google-signin/google-signin": "npm:^9.0.2" @@ -13404,7 +13389,7 @@ __metadata: "@rehookify/datepicker": "npm:^6.6.1" "@rneui/base": "npm:^4.0.0-rc.8" "@rneui/themed": "npm:^4.0.0-rc.8" - "@rnmapbox/maps": "npm:^10.1.21" + "@rnmapbox/maps": "npm:^10.1.29" "@tamagui/animations-react-native": "npm:1.96.0" "@tamagui/babel-plugin": "npm:1.96.0" "@tamagui/config": "npm:1.96.0" @@ -13453,13 +13438,13 @@ __metadata: eslint-plugin-react: "npm:^7.33.2" eslint-plugin-react-native: "npm:^4.0.0" expo: "npm:^50.0.14" - expo-application: "npm:~5.8.3" + expo-application: "npm:~5.8.4" expo-auth-session: "npm:~5.4.0" expo-checkbox: "npm:~2.7.0" - expo-constants: "npm:~15.4.5" + expo-constants: "npm:~15.4.6" expo-crypto: "npm:~12.8.1" expo-document-picker: "npm:^12.0.2" - expo-file-system: "npm:~16.0.8" + expo-file-system: "npm:~16.0.9" expo-font: "npm:~11.10.3" expo-image-picker: "npm:~14.7.1" expo-linking: "npm:~6.2.2" @@ -13517,7 +13502,7 @@ __metadata: superjson: "npm:^2.0.0" tamagui: "npm:1.96.0" togpx: "npm:^0.5.4" - typescript: "npm:^5.3.3" + typescript: "npm:^5.5.3" uuid: "npm:3.4.0" xmldom: "npm:^0.6.0" languageName: unknown @@ -13940,8 +13925,8 @@ __metadata: linkType: hard "aws-sdk@npm:^2.1494.0": - version: 2.1679.0 - resolution: "aws-sdk@npm:2.1679.0" + version: 2.1681.0 + resolution: "aws-sdk@npm:2.1681.0" dependencies: buffer: "npm:4.9.2" events: "npm:1.1.1" @@ -13953,7 +13938,7 @@ __metadata: util: "npm:^0.12.4" uuid: "npm:8.0.0" xml2js: "npm:0.6.2" - checksum: 10/1bb5e14917a1eecfb57d8b5a44a52eb051a5eeb516a0833b6d9e9a6d0f666a7f97e7507bacd05c608a51b2be9bbab77a59b3a92d47663759d28dd844e27c0db9 + checksum: 10/b55aec53468138c7d03adbf1bda2253cb9c0f4230f0e0f642b35b4cf43173723121b23d3d54db65a8f090072802127f9242ffca095a5f18a41322bc644a84712 languageName: node linkType: hard @@ -14273,7 +14258,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.10.1, babel-plugin-polyfill-corejs3@npm:^0.10.4": +"babel-plugin-polyfill-corejs3@npm:^0.10.6": version: 0.10.6 resolution: "babel-plugin-polyfill-corejs3@npm:0.10.6" dependencies: @@ -15397,7 +15382,7 @@ __metadata: hono: "npm:^4.2.7" server: "npm:*" trpc-panel: "npm:^1.3.4" - typescript: "npm:^5.3.3" + typescript: "npm:^5.5.3" languageName: unknown linkType: soft @@ -16944,6 +16929,13 @@ __metadata: languageName: node linkType: hard +"crypto-js@npm:^4.2.0": + version: 4.2.0 + resolution: "crypto-js@npm:4.2.0" + checksum: 10/c7bcc56a6e01c3c397e95aa4a74e4241321f04677f9a618a8f48a63b5781617248afb9adb0629824792e7ec20ca0d4241a49b6b2938ae6f973ec4efc5c53c924 + languageName: node + linkType: hard + "crypto-random-string@npm:^1.0.0": version: 1.0.0 resolution: "crypto-random-string@npm:1.0.0" @@ -18289,7 +18281,7 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.17.0": +"enhanced-resolve@npm:^5.17.1": version: 5.17.1 resolution: "enhanced-resolve@npm:5.17.1" dependencies: @@ -20042,11 +20034,11 @@ __metadata: linkType: hard "eslint-plugin-react-refresh@npm:^0.4.5": - version: 0.4.10 - resolution: "eslint-plugin-react-refresh@npm:0.4.10" + version: 0.4.11 + resolution: "eslint-plugin-react-refresh@npm:0.4.11" peerDependencies: eslint: ">=7" - checksum: 10/a31bbec7421b19aec948e3ebc481706ea722356442ee94bb0ff1836ca14a4db140b097c13751531dffeb7c06c45beb4afa306dc8f6fcd0a525223630e97dceb1 + checksum: 10/876c1b972d962748a5c6f79ec2ed5add3a17d769c319eb5e67a98aa810fafe7591cf9767e155cd16cd5a5f9ba454ec06c52b6d216d9e469378da165eacf025be languageName: node linkType: hard @@ -20465,7 +20457,7 @@ __metadata: "@fortawesome/free-solid-svg-icons": "npm:^6.3.0" "@fortawesome/react-fontawesome": "npm:^0.2.0" "@hookform/resolvers": "npm:^3.3.4" - "@react-native-async-storage/async-storage": "npm:1.21.0" + "@react-native-async-storage/async-storage": "npm:^1.23.1" "@react-native-community/geolocation": "npm:^3.0.6" "@react-native-community/netinfo": "npm:11.1.0" "@react-native-google-signin/google-signin": "npm:^9.0.2" @@ -20477,7 +20469,7 @@ __metadata: "@reduxjs/toolkit": "npm:^1.9.3" "@rneui/base": "npm:^4.0.0-rc.8" "@rneui/themed": "npm:^4.0.0-rc.8" - "@rnmapbox/maps": "npm:^10.1.21" + "@rnmapbox/maps": "npm:^10.1.29" "@tamagui/animations-react-native": "npm:1.96.0" "@tamagui/babel-plugin": "npm:1.96.0" "@tamagui/config": "npm:1.96.0" @@ -20525,17 +20517,18 @@ __metadata: eslint-plugin-react: "npm:^7.33.2" eslint-plugin-react-native: "npm:^4.0.0" expo: "npm:^50.0.14" - expo-application: "npm:~5.8.3" + expo-application: "npm:~5.8.4" expo-auth-session: "npm:~5.4.0" expo-blur: "npm:~12.9.2" expo-build-properties: "npm:~0.11.1" expo-checkbox: "npm:~2.7.0" expo-clipboard: "npm:~5.0.1" - expo-constants: "npm:~15.4.5" + expo-constants: "npm:~15.4.6" expo-crypto: "npm:~12.8.1" expo-dev-client: "npm:~3.3.11" - expo-document-picker: "npm:~11.10.1" - expo-file-system: "npm:~16.0.8" + expo-device: "npm:~5.9.4" + expo-document-picker: "npm:^12.0.2" + expo-file-system: "npm:~16.0.9" expo-font: "npm:~11.10.3" expo-haptics: "npm:~12.8.1" expo-image-picker: "npm:~14.7.1" @@ -20590,14 +20583,14 @@ __metadata: superjson: "npm:^2.0.0" tamagui: "npm:1.96.0" togpx: "npm:^0.5.4" - typescript: "npm:^5.3.3" + typescript: "npm:^5.5.3" uuid: "npm:3.4.0" xmldom: "npm:^0.6.0" zeego: "npm:^1.7.2" languageName: unknown linkType: soft -"expo-application@npm:~5.8.0, expo-application@npm:~5.8.3": +"expo-application@npm:~5.8.0, expo-application@npm:~5.8.4": version: 5.8.4 resolution: "expo-application@npm:5.8.4" peerDependencies: @@ -20671,7 +20664,7 @@ __metadata: languageName: node linkType: hard -"expo-constants@npm:~15.4.0, expo-constants@npm:~15.4.3, expo-constants@npm:~15.4.5": +"expo-constants@npm:~15.4.0, expo-constants@npm:~15.4.3, expo-constants@npm:~15.4.6": version: 15.4.6 resolution: "expo-constants@npm:15.4.6" dependencies: @@ -20744,25 +20737,27 @@ __metadata: languageName: node linkType: hard -"expo-document-picker@npm:^12.0.2": - version: 12.0.2 - resolution: "expo-document-picker@npm:12.0.2" +"expo-device@npm:~5.9.4": + version: 5.9.4 + resolution: "expo-device@npm:5.9.4" + dependencies: + ua-parser-js: "npm:^0.7.33" peerDependencies: expo: "*" - checksum: 10/4eb929c6751ed6f82f2f521a4c8a9e10fdfe6f3e9fd44c4f18c6103db09a84697fb923993d3d658b6560ba20ffac276a166d59822575d70d4706057c0d0a291f + checksum: 10/2b163985f1d3bfb81ef5c0c566a586f107ca747e20ad52f6e42349bca7f96daf7f3903e9b6c92084eb9291671515b59438c5db2cdc783b161d20c6c7edeb95ac languageName: node linkType: hard -"expo-document-picker@npm:~11.10.1": - version: 11.10.1 - resolution: "expo-document-picker@npm:11.10.1" +"expo-document-picker@npm:^12.0.2": + version: 12.0.2 + resolution: "expo-document-picker@npm:12.0.2" peerDependencies: expo: "*" - checksum: 10/0ecb48424df27838ecdb42e9ffea5ded8c65983ff6ff7a4b6d4a962278bffc8ea617f0257be0e5041a597242d14c00ef38557997d83adada4c55b5dc03362c69 + checksum: 10/4eb929c6751ed6f82f2f521a4c8a9e10fdfe6f3e9fd44c4f18c6103db09a84697fb923993d3d658b6560ba20ffac276a166d59822575d70d4706057c0d0a291f languageName: node linkType: hard -"expo-file-system@npm:~16.0.0, expo-file-system@npm:~16.0.8, expo-file-system@npm:~16.0.9": +"expo-file-system@npm:~16.0.0, expo-file-system@npm:~16.0.9": version: 16.0.9 resolution: "expo-file-system@npm:16.0.9" peerDependencies: @@ -21838,8 +21833,8 @@ __metadata: linkType: hard "foxact@npm:^0.2.33": - version: 0.2.36 - resolution: "foxact@npm:0.2.36" + version: 0.2.37 + resolution: "foxact@npm:0.2.37" dependencies: client-only: "npm:^0.0.1" server-only: "npm:^0.0.1" @@ -21848,7 +21843,7 @@ __metadata: peerDependenciesMeta: react: optional: true - checksum: 10/5c0c21e624fed5e45a256e54f15d513418a5a3bc1cf4d22a23349c34991d8bc9ca0bee9eb88fe01851a686a44609333eafa6d81d915ec32f93f65e09e9e1b8c3 + checksum: 10/69e22b12dce93f41d239f98bd174b1ddfba6e442c55a6cc4d42a2186b6ecedc821e62caee74fa07e3647f3f6d18b3ee9efd2b8cdcac1acd23b2c167b12adeef2 languageName: node linkType: hard @@ -23060,9 +23055,9 @@ __metadata: linkType: hard "hono@npm:^4.1.4, hono@npm:^4.2.7": - version: 4.5.7 - resolution: "hono@npm:4.5.7" - checksum: 10/e7cc63e1a35963eba3802108cfd8daf2fe097667d075ab924b9383b1f43251260772a84bf71ea95e22986fc3e2d09200f1f69d286e2038e47fda5d23ad07794a + version: 4.5.8 + resolution: "hono@npm:4.5.8" + checksum: 10/1d071a827fb9562a008955dd24bdde8cd6575890120b8cf7276cdda2a58735487666807927a99f57d0e43304202c2c493daefb5eaf4683fcb3eed9d4190a0ccc languageName: node linkType: hard @@ -23855,11 +23850,11 @@ __metadata: linkType: hard "is-core-module@npm:^2.12.1, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": - version: 2.15.0 - resolution: "is-core-module@npm:2.15.0" + version: 2.15.1 + resolution: "is-core-module@npm:2.15.1" dependencies: hasown: "npm:^2.0.2" - checksum: 10/70e962543e5d3a97c07cb29144a86792d545a21f28e67da5401d85878a0193d46fbab8d97bc3ca680e2778705dca66e7b6ca840c493497a27ca0e8c5f3ac3d1d + checksum: 10/77316d5891d5743854bcef2cd2f24c5458fb69fbc9705c12ca17d54a2017a67d0693bbf1ba8c77af376c0eef6bf6d1b27a4ab08e4db4e69914c3789bdf2ceec5 languageName: node linkType: hard @@ -27518,9 +27513,9 @@ __metadata: languageName: node linkType: hard -"miniflare@npm:3.20240806.1, miniflare@npm:^3.20231218.1": - version: 3.20240806.1 - resolution: "miniflare@npm:3.20240806.1" +"miniflare@npm:3.20240821.0, miniflare@npm:^3.20231218.1": + version: 3.20240821.0 + resolution: "miniflare@npm:3.20240821.0" dependencies: "@cspotcode/source-map-support": "npm:0.8.1" acorn: "npm:^8.8.0" @@ -27530,13 +27525,13 @@ __metadata: glob-to-regexp: "npm:^0.4.1" stoppable: "npm:^1.1.0" undici: "npm:^5.28.4" - workerd: "npm:1.20240806.0" + workerd: "npm:1.20240821.1" ws: "npm:^8.17.1" youch: "npm:^3.2.2" zod: "npm:^3.22.3" bin: miniflare: bootstrap.js - checksum: 10/dea7dc51085cb2b3c6d5dd236da6c0971821384de4075f719570856cc30dc489a9988f7dda5dda94b1bda3bbf42ee90c3ce86a8754e14e3b75689c4e06796084 + checksum: 10/2238fcadcad427b7bdf6e7e05f43983bfc3598ce4946cb880082e60ed8a1fe5a724b94e6ebc6d9ef4846ef9f14ac65f65c9d2d63396e463755b35d2967dbad98 languageName: node linkType: hard @@ -29654,7 +29649,7 @@ __metadata: patch-package: "npm:^8.0.0" postinstall-postinstall: "npm:^2.1.0" prettier: "npm:^3.2.5" - typescript: "npm:^5.3.3" + typescript: "npm:^5.5.3" languageName: unknown linkType: soft @@ -30252,13 +30247,13 @@ __metadata: linkType: hard "pkg-types@npm:^1.0.3, pkg-types@npm:^1.1.1": - version: 1.1.3 - resolution: "pkg-types@npm:1.1.3" + version: 1.2.0 + resolution: "pkg-types@npm:1.2.0" dependencies: confbox: "npm:^0.1.7" mlly: "npm:^1.7.1" pathe: "npm:^1.1.2" - checksum: 10/06c03ca679ea8e3a1ea7cb74e92af1a486a6081401aac35f6aa51fb6f0855cd86bbfc713f9bfdaaa730815b5ae147b4d6a838710b550c1c4b3f54a6653ff04a3 + checksum: 10/ed732842b86260395b82e31afc0dd8316e74642a78754ad148a5500ca5537565c6dfbd6c80c2dc92077afc1beb471b05a85a9572089cc8a1bba82248c331bf45 languageName: node linkType: hard @@ -31060,8 +31055,8 @@ __metadata: linkType: hard "protobufjs@npm:^7.0.0, protobufjs@npm:^7.2.5": - version: 7.3.2 - resolution: "protobufjs@npm:7.3.2" + version: 7.4.0 + resolution: "protobufjs@npm:7.4.0" dependencies: "@protobufjs/aspromise": "npm:^1.1.2" "@protobufjs/base64": "npm:^1.1.2" @@ -31075,7 +31070,7 @@ __metadata: "@protobufjs/utf8": "npm:^1.1.0" "@types/node": "npm:>=13.7.0" long: "npm:^5.0.0" - checksum: 10/816604aa0649a93fd5d3ef2858ef038f482d18eebcfb4201fe85c0d3bcccc12410f9e3e73262f1219e6b5bed4f27b28c3bf7c931c409dfb1fd563a304d541d89 + checksum: 10/408423506610f70858d7593632f4a6aa4f05796c90fd632be9b9252457c795acc71aa6d3b54bb7f48a890141728fee4ca3906723ccea6c202ad71f21b3879b8b languageName: node linkType: hard @@ -31261,6 +31256,13 @@ __metadata: languageName: node linkType: hard +"querystring@npm:^0.2.1": + version: 0.2.1 + resolution: "querystring@npm:0.2.1" + checksum: 10/5ae2eeb8c6d70263a3d13ffaf234ce9593ae0e95ad8ea04aa540e14ff66679347420817aeb4fe6fdfa2aaa7fac86e311b6f1d3da2187f433082ad9125c808c14 + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -33416,12 +33418,15 @@ __metadata: "@trpc/server": "npm:^10.45.1" "@types/bcrypt": "npm:^5.0.0" "@types/cors": "npm:^2.8.13" + "@types/crypto-js": "npm:^4" "@types/csurf": "npm:^1.11.2" "@types/jest": "npm:^29.5.11" "@types/node": "npm:^20.14.2" + "@types/papaparse": "npm:^5" "@types/swagger-jsdoc": "npm:^6.0.1" "@types/swagger-ui-express": "npm:^4.1.3" "@types/validator": "npm:^13.11.1" + "@types/xml2js": "npm:^0" "@typescript-eslint/eslint-plugin": "npm:^6.21.0" "@typescript-eslint/parser": "npm:^6.21.0" "@vitest/ui": "npm:^1.6.0" @@ -33434,6 +33439,7 @@ __metadata: compression: "npm:^1.7.4" cors: "npm:^2.8.5" cross-env: "npm:^7.0.3" + crypto-js: "npm:^4.2.0" csurf: "npm:^1.11.0" dotenv: "npm:^16.0.3" drizzle-kit: "npm:^0.20.17" @@ -33477,12 +33483,14 @@ __metadata: openapi-generator: "npm:^0.1.39" osmtogeojson: "npm:^3.0.0-beta.5" p-queue: "npm:^8.0.1" + papaparse: "npm:^5.4.1" passport: "npm:^0.6.0" passport-google-oauth20: "npm:^2.0.0" passport-local: "npm:^1.0.0" piscina: "npm:^4.0.0" prettier: "npm:^3.2.5" prisma: "npm:^5.7.0" + querystring: "npm:^0.2.1" radash: "npm:^12.1.0" superjson: "npm:^2.0.0" swagger-jsdoc: "npm:^6.2.8" @@ -33493,11 +33501,12 @@ __metadata: ts-jest: "npm:^29.1.1" ts-node: "npm:^10.9.1" tsx: "npm:^4.7.0" - typescript: "npm:^5.3.3" + typescript: "npm:^5.5.3" uuid: "npm:^9.0.0" validator: "npm:^13.9.0" vitest: "npm:1.3.0" wrangler: "npm:^3.51.2" + xml2js: "npm:^0.6.2" zod: "npm:^3.22.4" languageName: unknown linkType: soft @@ -35134,7 +35143,7 @@ __metadata: rollup-plugin-polyfill-node: "npm:^0.13.0" rollup-plugin-typescript2: "npm:^0.36.0" tslib: "npm:^2.6.2" - typescript: "npm:^5.2.2" + typescript: "npm:^5.5.3" vite: "npm:^5.3.1" vite-plugin-node-polyfills: "npm:^0.21.0" languageName: unknown @@ -36101,7 +36110,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.0.4, typescript@npm:^5.2.2, typescript@npm:^5.3.3, typescript@npm:^5.5.3": +"typescript@npm:^5.0.4, typescript@npm:^5.3.3, typescript@npm:^5.5.3": version: 5.5.4 resolution: "typescript@npm:5.5.4" bin: @@ -36131,7 +36140,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.0.4#optional!builtin, typescript@patch:typescript@npm%3A^5.2.2#optional!builtin, typescript@patch:typescript@npm%3A^5.3.3#optional!builtin, typescript@patch:typescript@npm%3A^5.5.3#optional!builtin": +"typescript@patch:typescript@npm%3A^5.0.4#optional!builtin, typescript@patch:typescript@npm%3A^5.3.3#optional!builtin, typescript@patch:typescript@npm%3A^5.5.3#optional!builtin": version: 5.5.4 resolution: "typescript@patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=5adc0c" bin: @@ -36151,6 +36160,13 @@ __metadata: languageName: node linkType: hard +"ua-parser-js@npm:^0.7.33": + version: 0.7.38 + resolution: "ua-parser-js@npm:0.7.38" + checksum: 10/011609d0176952abc60b7a20e0af266a899b34f4c49a6f5097d6af763da27eacaa3752b710ae4d930d7b99508bb8c0b34ebe8042e1d9fdc4056d051b209b0842 + languageName: node + linkType: hard + "ua-parser-js@npm:^1.0.35": version: 1.0.38 resolution: "ua-parser-js@npm:1.0.38" @@ -36776,8 +36792,8 @@ __metadata: linkType: hard "vercel@npm:latest": - version: 36.0.0 - resolution: "vercel@npm:36.0.0" + version: 37.1.0 + resolution: "vercel@npm:37.1.0" dependencies: "@vercel/build-utils": "npm:8.3.6" "@vercel/fun": "npm:1.1.0" @@ -36787,14 +36803,14 @@ __metadata: "@vercel/node": "npm:3.2.8" "@vercel/python": "npm:4.3.1" "@vercel/redwood": "npm:2.1.3" - "@vercel/remix-builder": "npm:2.2.5" + "@vercel/remix-builder": "npm:2.2.6" "@vercel/ruby": "npm:2.1.0" "@vercel/static-build": "npm:2.5.18" chokidar: "npm:3.3.1" bin: vc: dist/index.js vercel: dist/index.js - checksum: 10/382d058625cebf67b8ba14d8bd35147fd5b222ed2f57b59796e2447b8f40f90c3068de0ca99e855afc113a502df1ab5ca5d4d9aff639d5db2b818b8a958a67da + checksum: 10/960c36fcaa455b5ef784a8329caf46dbe6af33b790f55c76b192d97249f207a1d3f0b2dcc9df27f8d28a383a27ed18b587f116858c73e861bd319f45f3b1d554 languageName: node linkType: hard @@ -36840,8 +36856,8 @@ __metadata: rollup-plugin-polyfill-node: "npm:^0.13.0" rollup-plugin-typescript2: "npm:^0.36.0" tslib: "npm:^2.6.2" - typescript: "npm:^5.3.3" - vite: "npm:^5.1.0" + typescript: "npm:^5.5.3" + vite: "npm:^5.3.1" vite-plugin-node-polyfills: "npm:^0.21.0" languageName: unknown linkType: soft @@ -36941,7 +36957,7 @@ __metadata: languageName: node linkType: hard -"vite@npm:^5.0.0, vite@npm:^5.1.0, vite@npm:^5.2.6, vite@npm:^5.3.1": +"vite@npm:^5.0.0, vite@npm:^5.2.6, vite@npm:^5.3.1": version: 5.4.2 resolution: "vite@npm:5.4.2" dependencies: @@ -37291,10 +37307,9 @@ __metadata: linkType: hard "webpack@npm:^5.64.4": - version: 5.93.0 - resolution: "webpack@npm:5.93.0" + version: 5.94.0 + resolution: "webpack@npm:5.94.0" dependencies: - "@types/eslint-scope": "npm:^3.7.3" "@types/estree": "npm:^1.0.5" "@webassemblyjs/ast": "npm:^1.12.1" "@webassemblyjs/wasm-edit": "npm:^1.12.1" @@ -37303,7 +37318,7 @@ __metadata: acorn-import-attributes: "npm:^1.9.5" browserslist: "npm:^4.21.10" chrome-trace-event: "npm:^1.0.2" - enhanced-resolve: "npm:^5.17.0" + enhanced-resolve: "npm:^5.17.1" es-module-lexer: "npm:^1.2.1" eslint-scope: "npm:5.1.1" events: "npm:^3.2.0" @@ -37323,7 +37338,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: 10/a48bef7a511d826db7f9ebee2c84317214923ac40cb2aabe6a649546c54a76a55fc3b91ff03c05fed22a13a176891c47bbff7fcc644c53bcbe5091555863641b + checksum: 10/648449c5fbbb0839814116e3b2b044ac6c75a7ba272435155ddeb1e64dfaa2f8079be3adfbb691f648b69900756ce0f6fb73beab0ced3cf5e0fd46868b4593a6 languageName: node linkType: hard @@ -37582,15 +37597,15 @@ __metadata: languageName: node linkType: hard -"workerd@npm:1.20240806.0": - version: 1.20240806.0 - resolution: "workerd@npm:1.20240806.0" +"workerd@npm:1.20240821.1": + version: 1.20240821.1 + resolution: "workerd@npm:1.20240821.1" dependencies: - "@cloudflare/workerd-darwin-64": "npm:1.20240806.0" - "@cloudflare/workerd-darwin-arm64": "npm:1.20240806.0" - "@cloudflare/workerd-linux-64": "npm:1.20240806.0" - "@cloudflare/workerd-linux-arm64": "npm:1.20240806.0" - "@cloudflare/workerd-windows-64": "npm:1.20240806.0" + "@cloudflare/workerd-darwin-64": "npm:1.20240821.1" + "@cloudflare/workerd-darwin-arm64": "npm:1.20240821.1" + "@cloudflare/workerd-linux-64": "npm:1.20240821.1" + "@cloudflare/workerd-linux-arm64": "npm:1.20240821.1" + "@cloudflare/workerd-windows-64": "npm:1.20240821.1" dependenciesMeta: "@cloudflare/workerd-darwin-64": optional: true @@ -37604,7 +37619,7 @@ __metadata: optional: true bin: workerd: bin/workerd - checksum: 10/920a77e7a548ba5c8840eb57df50d83796d4777ecdaf3b934b30c50475c73c362808d484273b4b3eeee1db1553fb8ef12c476484111f1e5dae4357d07d5fd01e + checksum: 10/4784019f2cd638efd505bd895766c76bf21f56333e93f4f1665c97e8c8877f9ef46ef2ce1682127706aa607902e8ea4dcfec852427858e78454a0d6181de38ce languageName: node linkType: hard @@ -37651,11 +37666,11 @@ __metadata: linkType: hard "wrangler@npm:^3.51.2": - version: 3.72.1 - resolution: "wrangler@npm:3.72.1" + version: 3.72.2 + resolution: "wrangler@npm:3.72.2" dependencies: "@cloudflare/kv-asset-handler": "npm:0.3.4" - "@cloudflare/workers-shared": "npm:0.2.0" + "@cloudflare/workers-shared": "npm:0.3.0" "@esbuild-plugins/node-globals-polyfill": "npm:^0.2.3" "@esbuild-plugins/node-modules-polyfill": "npm:^0.2.2" blake3-wasm: "npm:^2.1.5" @@ -37663,7 +37678,7 @@ __metadata: date-fns: "npm:^3.6.0" esbuild: "npm:0.17.19" fsevents: "npm:~2.3.2" - miniflare: "npm:3.20240806.1" + miniflare: "npm:3.20240821.0" nanoid: "npm:^3.3.3" path-to-regexp: "npm:^6.2.0" resolve: "npm:^1.22.8" @@ -37671,10 +37686,10 @@ __metadata: selfsigned: "npm:^2.0.1" source-map: "npm:^0.6.1" unenv: "npm:unenv-nightly@1.10.0-1717606461.a117952" - workerd: "npm:1.20240806.0" + workerd: "npm:1.20240821.1" xxhash-wasm: "npm:^1.0.1" peerDependencies: - "@cloudflare/workers-types": ^4.20240806.0 + "@cloudflare/workers-types": ^4.20240821.1 dependenciesMeta: fsevents: optional: true @@ -37684,7 +37699,7 @@ __metadata: bin: wrangler: bin/wrangler.js wrangler2: bin/wrangler.js - checksum: 10/7f74977e6f03e5898e5d99286b55d70b82d8162dc2c0edd93851c4633a9e6ac9f204e0d79193586beee1fd857213aa1894dd2ae53b1b413044ebb24923b0c23d + checksum: 10/7aa4f35d4e8061c21bad2355ca6e92760b8f2630fbc12665e95141177634af870d5cc25261f6eee7505954570a0bad176dcad46d0db2c3217dfe4a684fec491c languageName: node linkType: hard @@ -37843,7 +37858,7 @@ __metadata: languageName: node linkType: hard -"xml2js@npm:0.6.2": +"xml2js@npm:0.6.2, xml2js@npm:^0.6.2": version: 0.6.2 resolution: "xml2js@npm:0.6.2" dependencies: