Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions apps/api/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@ API_PORT=3000
# API base URL
API_BASE_URL=http://localhost:3000

# App base URL
APP_BASE_URL=plannting://
# Mobile app base URL
MOBILE_APP_BASE_URL=plannting://

# Enforce a minimum required mobile app version
MOBILE_APP_MINIMUM_REQUIRED_VERSION=0.9.0

# Debug logging
# See readme for "Verbose debug logging"
Expand Down
2 changes: 1 addition & 1 deletion apps/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"build": "tsc && npm run copy:assets",
"copy:assets": "mkdir -p dist/assets && cp -r src/assets/* dist/assets/ 2>/dev/null || true",
"start": "node dist/index.js",
"lint": "eslint src --ext .ts",
"lint": "tsc --noEmit",
"test": "jest",
"test:watch": "jest --watch"
},
Expand Down
20 changes: 10 additions & 10 deletions apps/api/src/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,20 @@ export const config: ApiConfig = {
baseUrl: process.env.API_BASE_URL,
port: parseInt(process.env.API_PORT || '3000'),
},
app: {
baseUrl: process.env.APP_BASE_URL,
},
appStoreUrls: {
android: process.env.APP_STORE_URL_ANDROID ?? 'https://play.google.com/store/apps/details?id=com.completecodesolutions.***',
ios: process.env.APP_STORE_URL_IOS ?? 'https://apps.apple.com/us/app/***/***',
},
expo: {
accessToken: process.env.EXPO_ACCESS_TOKEN,
},
jwt: { secret: process.env.JWT_SECRET || '' },
// Used by the mobile app to determine whether it must hard-block the UI until the user updates.
// Default is 0.0.0 so we never block unless explicitly configured.
minimumRequiredMobileAppVersion: (process.env.MINIMUM_REQUIRED_MOBILE_APP_VERSION ?? '0.9.0') as SemVerString,
mobileApp: {
baseUrl: process.env.MOBILE_APP_BASE_URL,
// Used by the mobile app to determine whether it must hard-block the UI until the user updates.
// Default is 0.0.0 so we never block unless explicitly configured.
minimumRequiredVersion: (process.env.MOBILE_APP_MINIMUM_REQUIRED_VERSION ?? '0.9.0') as SemVerString,
storeUrls: {
android: process.env.MOBILE_APP_STORE_URL_ANDROID ?? 'https://play.google.com/store/apps/details?id=com.completecodesolutions.***',
ios: process.env.MOBILE_APP_STORE_URL_IOS ?? 'https://apps.apple.com/us/app/***/***',
},
},
mongo: {
host: process.env.MONGO_HOST,
appName: process.env.MONGO_APP_NAME,
Expand Down
16 changes: 8 additions & 8 deletions apps/api/src/config/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,20 @@ export type ApiConfig = {
baseUrl: string | undefined,
port: number,
},
app: {
baseUrl: string | undefined,
},
appStoreUrls: {
android: string,
ios: string,
},
expo: {
accessToken: string | undefined,
},
jwt: {
secret: string,
},
minimumRequiredMobileAppVersion: SemVerString,
mobileApp: {
baseUrl: string | undefined,
minimumRequiredVersion: SemVerString,
storeUrls: {
android: string,
ios: string,
},
},
mongo: {
host: string | undefined,
appName: string | undefined,
Expand Down
6 changes: 4 additions & 2 deletions apps/api/src/endpoints/trpc/systemSettings/get.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import { publicProcedure } from '../../../procedures/publicProcedure'
export const get = publicProcedure
.query(async () => {
return {
appStoreUrls: config.appStoreUrls,
minimumRequiredMobileAppVersion: config.minimumRequiredMobileAppVersion,
mobileApp: {
minimumRequiredVersion: config.mobileApp.minimumRequiredVersion,
storeUrls: config.mobileApp.storeUrls,
},
}
})

2 changes: 1 addition & 1 deletion apps/mobile/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"android": "expo start --android",
"ios": "expo start --ios",
"web": "expo start --web",
"lint": "tsc --noEmit && eslint src --ext .ts",
"lint": "tsc --noEmit",
"test": "jest",
"test:watch": "jest --watch",
"build:development:add-device": "eas device:create",
Expand Down
4 changes: 2 additions & 2 deletions apps/mobile/src/components/MinimumRequiredVersionGate.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ export function MinimumRequiredVersionGate({ children }: { children: React.React
})

const currentVersion = parseSemVer(config.version)
const minimumRequiredVersion = parseSemVer(data?.minimumRequiredMobileAppVersion)
const minimumRequiredVersion = parseSemVer(data?.mobileApp.minimumRequiredVersion)

const isOutOfDate = !!currentVersion && !!minimumRequiredVersion && (compareSemVer(currentVersion, minimumRequiredVersion) < 0)

if (!isOutOfDate) {
return children
}

const appStoreUrl = (Platform.OS === 'ios' && data?.appStoreUrls.ios.xyz) || (Platform.OS === 'android' && data?.appStoreUrls.android) || undefined
const appStoreUrl = (Platform.OS === 'ios' && data?.mobileApp.storeUrls.ios) || (Platform.OS === 'android' && data?.mobileApp.storeUrls.android) || undefined

const onPressUpdate = () => {
if (!appStoreUrl) {
Expand Down