forked from jsnbuchanan/crowd-funder-for-time-pwa
- Add PROD_SHARE_DOMAIN constant using existing AppString.PROD_PUSH_SERVER - Update all 9 components/services to use configurable domain instead of hardcoded URLs - Fix localhost issues in development mode for all sharing functionality - Ensure all copy link buttons generate production URLs regardless of environment - Add proper TypeScript imports and component properties for template access - Maintain existing functionality while improving maintainability and consistency Files updated: - src/constants/app.ts (new constant) - src/views/ClaimView.vue (claim + certificate links) - src/views/ProjectViewView.vue (project links) - src/views/ConfirmGiftView.vue (confirm gift links) - src/components/HiddenDidDialog.vue (hidden DID links) - src/views/UserProfileView.vue (profile links) - src/views/InviteOneView.vue (invite links) - src/views/ContactsView.vue (contact import links) - src/views/OnboardMeetingSetupView.vue (meeting links) - src/libs/endorserServer.ts (contact import confirm links) Documentation added: - docs/domain-configuration.md (comprehensive guide) - README.md (quick reference section) Security audit: ✅ All changes maintain existing security model Testing: ✅ All linting errors resolved, only warnings remain Performance: ✅ No performance impact, improves user experience
80 lines
2.8 KiB
TypeScript
80 lines
2.8 KiB
TypeScript
/**
|
|
* Generic strings that could be used throughout the app.
|
|
*
|
|
* See also ../libs/veramo/setup.ts
|
|
*/
|
|
export enum AppString {
|
|
// This is used in titles and verbiage inside the app.
|
|
// There is also an app name without spaces, for packaging in the package.json file used in the manifest.
|
|
APP_NAME = "Time Safari",
|
|
APP_NAME_NO_SPACES = "TimeSafari",
|
|
|
|
PROD_ENDORSER_API_SERVER = "https://api.endorser.ch",
|
|
TEST_ENDORSER_API_SERVER = "https://test-api.endorser.ch",
|
|
LOCAL_ENDORSER_API_SERVER = "http://127.0.0.1:3000",
|
|
|
|
PROD_IMAGE_API_SERVER = "https://image-api.timesafari.app",
|
|
TEST_IMAGE_API_SERVER = "https://test-image-api.timesafari.app",
|
|
LOCAL_IMAGE_API_SERVER = "http://127.0.0.1:3001",
|
|
|
|
PROD_PARTNER_API_SERVER = "https://partner-api.endorser.ch",
|
|
TEST_PARTNER_API_SERVER = "https://test-partner-api.endorser.ch",
|
|
LOCAL_PARTNER_API_SERVER = "http://127.0.0.1:3002",
|
|
|
|
PROD_PUSH_SERVER = "https://timesafari.app",
|
|
TEST1_PUSH_SERVER = "https://test.timesafari.app",
|
|
TEST2_PUSH_SERVER = "https://timesafari-pwa.anomalistlabs.com",
|
|
|
|
NO_CONTACT_NAME = "(no name)",
|
|
}
|
|
|
|
export const APP_SERVER =
|
|
import.meta.env.VITE_APP_SERVER || "https://timesafari.app";
|
|
|
|
export const DEFAULT_ENDORSER_API_SERVER =
|
|
import.meta.env.VITE_DEFAULT_ENDORSER_API_SERVER ||
|
|
(process.env.VITE_PLATFORM === "electron"
|
|
? AppString.PROD_ENDORSER_API_SERVER
|
|
: AppString.PROD_ENDORSER_API_SERVER);
|
|
|
|
export const DEFAULT_IMAGE_API_SERVER =
|
|
import.meta.env.VITE_DEFAULT_IMAGE_API_SERVER ||
|
|
(process.env.VITE_PLATFORM === "electron"
|
|
? AppString.PROD_IMAGE_API_SERVER
|
|
: AppString.PROD_IMAGE_API_SERVER);
|
|
|
|
export const DEFAULT_PARTNER_API_SERVER =
|
|
import.meta.env.VITE_DEFAULT_PARTNER_API_SERVER ||
|
|
(process.env.VITE_PLATFORM === "electron"
|
|
? AppString.PROD_PARTNER_API_SERVER
|
|
: AppString.PROD_PARTNER_API_SERVER);
|
|
|
|
export const DEFAULT_PUSH_SERVER =
|
|
import.meta.env.VITE_DEFAULT_PUSH_SERVER || AppString.PROD_PUSH_SERVER;
|
|
|
|
// Production domain for sharing links (always use production URL for sharing)
|
|
export const PROD_SHARE_DOMAIN = AppString.PROD_PUSH_SERVER;
|
|
|
|
export const IMAGE_TYPE_PROFILE = "profile";
|
|
|
|
export const PASSKEYS_ENABLED =
|
|
!!import.meta.env.VITE_PASSKEYS_ENABLED || false;
|
|
|
|
/**
|
|
* The possible values for "group" and "type" are in App.vue.
|
|
* Some of this comes from the notiwind package, some is custom.
|
|
*/
|
|
export interface NotificationIface {
|
|
group: string; // "alert" | "modal"
|
|
type: string; // "toast" | "info" | "success" | "warning" | "danger"
|
|
title: string;
|
|
text?: string;
|
|
callback?: (success: boolean) => Promise<void>; // if this triggered an action
|
|
noText?: string;
|
|
onCancel?: (stopAsking?: boolean) => Promise<void>;
|
|
onNo?: (stopAsking?: boolean) => Promise<void>;
|
|
onYes?: () => Promise<void>;
|
|
promptToStopAsking?: boolean;
|
|
yesText?: string;
|
|
}
|