Files
nutcas3 9f51d6f20e feat: Add analytics, security, and currency SDK modules with comprehensive API endpoints across Elixir and Go SDKs
- Add AnalyticsAPI with churn prediction (predict, metrics, at-risk), market analytics (metrics, competitors, opportunities), predictive maintenance (metrics, assets, alerts, predict), and pricing optimization (metrics, optimize, elasticity) endpoints
- Add SecurityAPI with fraud detection (analyze, alerts, update status, metrics, patterns) and SIM swap protection (verify, history) endpoints
- Add CurrencyAPI with currency conversion (convert, exchange rates, rate
2026-05-03 13:29:44 +03:00
..

Telecom Platform Elixir SDK

Elixir SDK for the Telecom Platform with GenServer-based async access and full pattern matching.

Features

  • Modular Architecture: Separate modules for authentication, HTTP client, and API services
  • GenServer Support: Full GenServer-based async access
  • Pattern Matching: Full Elixir pattern matching
  • Type Safety: Struct-based data structures with typespecs
  • Error Handling: Comprehensive error handling
  • Retry Logic: Built-in retry mechanism with exponential backoff
  • OTP Integration: Full OTP application support

Installation

Add to your mix.exs:

defp deps do
  [
    {:telecom_sdk, path: "../sdk/elixir"}
  ]
end

Or install from source:

cd sdk/elixir
mix deps.get
mix compile

Architecture

The SDK is organized into modular components:

  • auth.ex - Authentication provider handling API keys and JWT tokens
  • http_client.ex - HTTP client with retry logic and authentication
  • subscribers_api.ex - Subscriber management API
  • usage_api.ex - Usage tracking API
  • payments_api.ex - Payment processing API
  • rating_plans_api.ex - Rating plan management API
  • system_api.ex - System monitoring API
  • graphql_api.ex - GraphQL query execution
  • telecom_sdk.ex - Main SDK client integrating all modules

Quick Start

# Start the SDK
{:ok, _pid} = TelecomSDK.start_link(
  api_url: "http://localhost:8000",
  api_key: "your-api-key",
  enable_logging: true
)

# Get subscriber
{:ok, subscriber} = TelecomSDK.get_subscriber(1)
IO.puts("Subscriber: #{subscriber.first_name} #{subscriber.last_name}")

# List subscribers
{:ok, list} = TelecomSDK.list_subscribers(1, 50, "active")
IO.puts("Total subscribers: #{list.total}")

API Reference

Configuration

config = %TelecomSDK.Config{
  api_url: "http://localhost:8000",
  api_key: "your-api-key",
  jwt_secret: "your-jwt-secret",
  timeout: 30_000,
  max_retries: 3,
  retry_delay: 1_000,
  enable_logging: false
}

Subscriber Management

# Get subscriber
{:ok, subscriber} = TelecomSDK.get_subscriber(1)

# List subscribers
{:ok, list} = TelecomSDK.list_subscribers(1, 50, "active")

# Create subscriber
{:ok, subscriber} = TelecomSDK.create_subscriber(%{
  imsi: "208930000000001",
  msisdn: "+1234567890",
  first_name: "John",
  last_name: "Doe",
  email: "[email protected]",
  plan_id: 1
})

# Update subscriber
{:ok, subscriber} = TelecomSDK.update_subscriber(1, %{
  first_name: "Jane"
})

# Delete subscriber
{:ok, success} = TelecomSDK.delete_subscriber(1)

# Suspend subscriber
{:ok, subscriber} = TelecomSDK.suspend_subscriber(1)

# Activate subscriber
{:ok, subscriber} = TelecomSDK.activate_subscriber(1)

Usage Management

# Get usage stats
start_date = DateTime.add(DateTime.utc_now(), -30, :day)
end_date = DateTime.utc_now()
{:ok, stats} = TelecomSDK.get_usage_stats(1, start_date, end_date)

# List usage events
{:ok, events} = TelecomSDK.list_usage_events(%{
  subscriber_id: 1,
  usage_type: "data",
  page: 1,
  page_size: 50
})

# Get real-time usage
{:ok, realtime} = TelecomSDK.get_real_time_usage(1)

Payment Management

# Create payment transaction
{:ok, transaction} = TelecomSDK.create_payment_transaction(%{
  subscriber_id: "1",
  amount: 25.00,
  currency: "USD",
  gateway: "stripe",
  metadata: %{description: "Monthly plan"}
})

# Get transaction
{:ok, transaction} = TelecomSDK.get_payment_transaction("txn-123")

# List transactions
{:ok, transactions} = TelecomSDK.list_payment_transactions(%{
  subscriber_id: 1,
  status: "completed",
  page: 1,
  page_size: 50
})

Rating Plans

# List rating plans
{:ok, plans} = TelecomSDK.list_rating_plans()

# Get specific plan
{:ok, plan} = TelecomSDK.get_rating_plan("plan-123")

System Management

# Get system stats
{:ok, stats} = TelecomSDK.get_system_stats()

# Get health status
{:ok, health} = TelecomSDK.get_health_status()

GraphQL

# Execute GraphQL query
query = """
query GetSubscribers($first: Int) {
  subscribers(first: $first) {
    id
    firstName
    lastName
  }
}
"""

variables = %{first: 10}
{:ok, result} = TelecomSDK.execute_graphql_query(query, variables)

Authentication

JWT Token Generation

# Generate JWT token
{:ok, token} = TelecomSDK.generate_jwt_token("user-123", 24, %{custom_claim: "value"})

# Validate JWT token
{:ok, claims} = TelecomSDK.validate_jwt_token(token)

Error Handling

case TelecomSDK.get_subscriber(1) do
  {:ok, subscriber} ->
    IO.puts("Subscriber: #{subscriber.first_name}")
  {:error, :authentication_error} ->
    IO.puts("Authentication failed")
  {:error, :api_error} ->
    IO.puts("API error")
  {:error, :network_error} ->
    IO.puts("Network error")
  {:error, reason} ->
    IO.puts("Error: #{inspect(reason)}")
end

Development

Running Tests

mix test

Code Style

mix format
mix compile --warnings-as-errors

Building

mix compile

Requirements

  • Elixir 1.13+
  • OTP 26+

License

This SDK is licensed under the MIT License.