d35c806d5b
- Added comprehensive comments and JSDoc-style documentation to NotificationProvider, ThemeProvider, UserProvider, and WebsiteThemeProvider for better clarity and maintainability. - Improved type definitions in index.ts for better code understanding and usage. - Introduced Docker support with Dockerfiles for various services including AI server, signaling server, and browser-use service. - Created a docker-compose.yml file to orchestrate multiple services including PostgreSQL, AI, scraper, and frontend. - Added a startup guide (startup.txt) for setting up the CRM environment on Ubuntu with Docker. - Included a .dockerignore file to exclude unnecessary files from Docker builds.
33 lines
1.2 KiB
JavaScript
33 lines
1.2 KiB
JavaScript
// ── Browser Opener ─────────────────────────────────────────────────
|
|
// Opens the splash page in the user's default browser after an 8-second
|
|
// delay. The delay gives all services time to start before the user
|
|
// sees the loading screen.
|
|
// Cross-platform: uses start (Windows), open (Mac), or xdg-open (Linux).
|
|
|
|
import { execSync } from "node:child_process"
|
|
import { platform } from "node:os"
|
|
|
|
const url = process.argv[2] || "http://localhost:3001/splash"
|
|
|
|
/** Promise-based sleep helper for the startup delay. */
|
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms))
|
|
|
|
async function main() {
|
|
// Wait for the AI server, scraper, and frontend to finish booting
|
|
await sleep(8000)
|
|
try {
|
|
// Platform-specific command to open the default browser
|
|
if (platform() === "win32") {
|
|
execSync(`start "" "${url}"`, { stdio: "ignore", timeout: 5000 })
|
|
} else if (platform() === "darwin") {
|
|
execSync(`open "${url}"`, { stdio: "ignore", timeout: 5000 })
|
|
} else {
|
|
execSync(`xdg-open "${url}"`, { stdio: "ignore", timeout: 5000 })
|
|
}
|
|
} catch (e) {
|
|
console.error("Failed to open browser:", e.message)
|
|
}
|
|
}
|
|
|
|
main()
|