Skip to main content

Environment Configuration

Learn about different environments and how to configure your integration for each one.

Available Environments

Sakneen provides multiple environments for different stages of development and deployment:

Production

  • Base URL: https://your-domain
  • Full Endpoint: https://your-domain/external/apis/v1.0/
  • Usage: Live applications and production workloads
  • Rate Limits: Standard production limits apply

Staging

  • Base URL: https://your-staging-domain
  • Full Endpoint: https://your-staging-domain/external/apis/v1.0/
  • Usage: Testing and staging environments
  • Rate Limits: Relaxed limits for testing

Development (Local)

  • Base URL: http://localhost:8081
  • Full Endpoint: http://localhost:8081/external/apis/v1.0/
  • Usage: Local development and testing
  • Note: Only available when running Sakneen locally

Important: Contact Sakneen support to get your specific domain names for production and staging environments.

Environment-Specific Configuration

Using Environment Variables

// .env file
SAKNEEN_API_KEY=your-api-key-here
SAKNEEN_DOMAIN=your-domain
NODE_ENV=production

// application code
const baseDomain = process.env.SAKNEEN_DOMAIN || 'your-domain';
const apiKey = process.env.SAKNEEN_API_KEY;

const createLead = async (leadData) => {
const response = await fetch(`https://${baseDomain}/external/apis/v1.0/leads`, {
method: 'POST',
headers: {
'api-key': apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify(leadData)
});

return response;
};

Configuration Class

class SakneenApiConfig {
constructor(environment = 'production') {
this.environment = environment;
this.config = this.getConfig(environment);
}

getConfig(environment) {
const configs = {
production: {
domain: process.env.SAKNEEN_DOMAIN || 'your-domain',
timeout: 30000,
retries: 3
},
staging: {
domain: process.env.SAKNEEN_STAGING_DOMAIN || 'your-staging-domain',
timeout: 60000,
retries: 5
},
development: {
domain: 'localhost:8081',
protocol: 'http',
timeout: 10000,
retries: 1
}
};

return configs[environment] || configs.production;
}

getEndpoint(path) {
const protocol = this.config.protocol || 'https';
return `${protocol}://${this.config.domain}/external/apis/v1.0${path}`;
}
}

// Usage
const config = new SakneenApiConfig(process.env.NODE_ENV);
const leadEndpoint = config.getEndpoint('/leads');

Best Practices

1. Environment Detection

Always detect the environment automatically when possible:

const getEnvironment = () => {
if (process.env.NODE_ENV === 'production') return 'production';
if (process.env.NODE_ENV === 'staging') return 'staging';
return 'development';
};

2. API Key Management

  • Use different API keys for each environment
  • Store keys securely using environment variables
  • Never commit API keys to version control

3. Error Handling

Different environments may have different error handling requirements:

const handleError = (error, environment) => {
if (environment === 'development') {
console.error('Detailed error:', error);
} else {
// Log to monitoring service in production
logger.error('API Error', { message: error.message });
}
};

4. Rate Limiting

Be aware of different rate limits per environment and implement appropriate retry logic.

Testing Across Environments

Environment-Specific Tests

describe('Sakneen API Integration', () => {
const environment = process.env.TEST_ENVIRONMENT || 'staging';
const config = new SakneenApiConfig(environment);

test('should create lead successfully', async () => {
const leadData = {
name: 'Test User',
phoneNumber: '+1234567890',
project: 'Test Project',
email: '[email protected]'
};

const response = await fetch(config.getEndpoint('/leads'), {
method: 'POST',
headers: {
'api-key': process.env.SAKNEEN_API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify(leadData)
});

expect(response.status).toBe(201);
});
});