Implements the §12 bootstrap from docs/mobile-app-plan.md. Backend (§6): - auth: optional returnToken flag on login returns the JWT in the body (data.authToken) for native Keychain/Keystore + Bearer; web cookie flow unchanged. - main.ts: explicit CORS allowlist (APP_URL + CORS_ALLOWED_ORIGINS env + Capacitor WebView origins), credentials enabled, replaces open enableCors(). - optional OpenAPI/Swagger at /api/docs behind SWAGGER_ENABLED. - env: CORS_ALLOWED_ORIGINS, SWAGGER_ENABLED, CAP_SERVER_URL. PWA: - manifest metadata, hand-rolled service worker (network-first nav, SWR assets, never intercepts /api,/socket.io,/collab), prod-only registration, apple-touch-icon. Capacitor: - capacitor.config.ts (webDir apps/client/dist; iOS via CAP_SERVER_URL to avoid bundling the AGPL client in the .ipa, see plan §9), cap:* scripts, deps, .gitignore for native dirs. - docs/mobile-bootstrap.md documenting what is done and the remaining manual steps (cap add ios/android, APNs/FCM, stores). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
30 lines
1.0 KiB
TypeScript
30 lines
1.0 KiB
TypeScript
import type { CapacitorConfig } from "@capacitor/cli";
|
|
|
|
// Capacitor configuration for the Gitmost mobile shell.
|
|
//
|
|
// AGPL / App Store note (see docs/mobile-app-plan.md section 9): the AGPL web
|
|
// client must NOT be bundled into the iOS .ipa. On iOS, point the shell at a
|
|
// hosted client via CAP_SERVER_URL (server.url) so the AGPL bytes are served
|
|
// from our own server rather than redistributed under Apple's DRM/usage-rules.
|
|
// Android may bundle the local web build (webDir) directly.
|
|
const serverUrl = process.env.CAP_SERVER_URL?.trim();
|
|
|
|
const config: CapacitorConfig = {
|
|
appId: "xyz.vvzvlad.gitmost",
|
|
appName: "Gitmost",
|
|
// Web build output of apps/client (Android bundled mode / local assets).
|
|
// Build it with `pnpm run client:build` before `cap sync`.
|
|
webDir: "apps/client/dist",
|
|
...(serverUrl
|
|
? {
|
|
// iOS / hosted mode: load the client from our server (AGPL-clean).
|
|
server: {
|
|
url: serverUrl,
|
|
cleartext: false,
|
|
},
|
|
}
|
|
: {}),
|
|
};
|
|
|
|
export default config;
|