2025-07-10 10:56:52 -06:00

98 lines
2.9 KiB
JavaScript

const path = require('path');
require('dotenv').config();
// Helper function to parse NocoDB URLs
function parseNocoDBUrl(url) {
if (!url) return { projectId: null, tableId: null };
const patterns = [
/#\/nc\/([^\/]+)\/([^\/\?#]+)/,
/\/nc\/([^\/]+)\/([^\/\?#]+)/,
/project\/([^\/]+)\/table\/([^\/\?#]+)/,
];
for (const pattern of patterns) {
const match = url.match(pattern);
if (match) {
return {
projectId: match[1],
tableId: match[2]
};
}
}
return { projectId: null, tableId: null };
}
// Auto-parse IDs from URLs
let parsedIds = { projectId: null, tableId: null };
if (process.env.NOCODB_VIEW_URL && (!process.env.NOCODB_PROJECT_ID || !process.env.NOCODB_TABLE_ID)) {
parsedIds = parseNocoDBUrl(process.env.NOCODB_VIEW_URL);
}
// Parse login sheet ID
let loginSheetId = null;
if (process.env.NOCODB_LOGIN_SHEET) {
if (process.env.NOCODB_LOGIN_SHEET.startsWith('http')) {
const { tableId } = parseNocoDBUrl(process.env.NOCODB_LOGIN_SHEET);
loginSheetId = tableId;
} else {
loginSheetId = process.env.NOCODB_LOGIN_SHEET;
}
}
// Parse settings sheet ID
let settingsSheetId = null;
if (process.env.NOCODB_SETTINGS_SHEET) {
if (process.env.NOCODB_SETTINGS_SHEET.startsWith('http')) {
const { tableId } = parseNocoDBUrl(process.env.NOCODB_SETTINGS_SHEET);
settingsSheetId = tableId;
} else {
settingsSheetId = process.env.NOCODB_SETTINGS_SHEET;
}
}
module.exports = {
// Server config
port: process.env.PORT || 3000,
nodeEnv: process.env.NODE_ENV || 'development',
isProduction: process.env.NODE_ENV === 'production',
// NocoDB config
nocodb: {
apiUrl: process.env.NOCODB_API_URL,
apiToken: process.env.NOCODB_API_TOKEN,
projectId: process.env.NOCODB_PROJECT_ID || parsedIds.projectId,
tableId: process.env.NOCODB_TABLE_ID || parsedIds.tableId,
loginSheetId,
settingsSheetId,
viewUrl: process.env.NOCODB_VIEW_URL
},
// Session config
session: {
secret: process.env.SESSION_SECRET || 'your-secret-key-change-in-production',
cookieDomain: process.env.COOKIE_DOMAIN
},
// CORS config
cors: {
allowedOrigins: process.env.ALLOWED_ORIGINS?.split(',') || []
},
// Map defaults
map: {
defaultLat: parseFloat(process.env.DEFAULT_LAT) || 53.5461,
defaultLng: parseFloat(process.env.DEFAULT_LNG) || -113.4938,
defaultZoom: parseInt(process.env.DEFAULT_ZOOM) || 11,
bounds: process.env.BOUND_NORTH ? {
north: parseFloat(process.env.BOUND_NORTH),
south: parseFloat(process.env.BOUND_SOUTH),
east: parseFloat(process.env.BOUND_EAST),
west: parseFloat(process.env.BOUND_WEST)
} : null
},
// Utility functions
parseNocoDBUrl
};