Skip to 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:8080
  • Full Endpoint: http://localhost:8080/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 ​

javascript
// .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 saveLead = async (leadPayload) => {
  const response = await fetch(
    `https://${baseDomain}/external/apis/v1.0/leads`,
    {
      method: "POST",
      headers: {
        "api-key": apiKey,
        "Content-Type": "application/json",
        language: "en-us",
      },
      body: JSON.stringify(leadPayload),
    },
  );

  return response;
};

Configuration Class ​

javascript
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:8080",
        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:

javascript
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:

javascript
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 ​

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

  test("should save lead successfully", async () => {
    const leadPayload = {
      recordSystemId: "env-test-lead-001",
      data: {
        name: "Test User",
        phoneNumber: "+1234567890",
        project: "Test Project",
        email: "[email protected]",
        leadSource: "Website",
      },
      additionalData: {
        environment,
      },
    };

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

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