applivery-esim-manager
Image:
raulcnadal/applivery-esim-manager| Stack: Next.js 16 ยท Prisma 7 ยท PostgreSQL ยท Docker (AMD64/ARM64)
Applivery eSIM Manager is a full-stack UEM companion app bridging Appliveryโ mobile device management with EMNifyโ eSIM connectivity.
Next.js 16 (Server Pages / Actions / API Routes) โโโบ Prisma 7 ORM โโโบ PostgreSQL 15+
โโโ Server-side Outbound Only โโโบ Applivery API v1 (api.applivery.io)
โโโ Server-side Outbound Only โโโบ EMNify API v1 (cdn.emnify.net)
| Requirement | Min. Version | Notes |
|---|---|---|
| Docker / PostgreSQL | Docker 24+ / Postgres 15+ | Multi-platform builds require BuildKit |
| Applivery Account | Enterprise / Partner | Requires regular console credentials (email/password) |
| EMNify Account | โ | Optional; required only for EMNify integration |
DATABASE_URL=postgresql://user:password@host:5432/esim_manager
SESSION_SECRET=change_me_to_a_long_random_secret
# Optional Configuration
APPLIVERY_TOKEN=optional_fallback_service_account_token # Used only for SSR passes without active session
EMNIFY_APP_TOKEN=your_emnify_application_token # Can also be configured inside Settings UI
โน๏ธ Authentication Note:
DATABASE_URLandSESSION_SECRETare the only core requirements at startup. Day-to-day Applivery operations leverage a human session token generated dynamically when an admin logs in via the UI with their Applivery console credentials.
docker run -d --name applivery-esim-manager --restart unless-stopped -p 3000:3000 \
-e DATABASE_URL="postgresql://user:pass@host:5432/esim_manager" \
-e SESSION_SECRET="your_long_random_secret" \
raulcnadal/applivery-esim-manager:latest
Note: Prisma migrations execute automatically on initial container startup.
version: '3.9'
services:
esim-manager:
image: raulcnadal/applivery-esim-manager:latest
restart: unless-stopped
ports: ["3000:3000"]
environment:
DATABASE_URL: postgresql://esim:esim_pass@db:5432/esim_manager
SESSION_SECRET: ${SESSION_SECRET}
depends_on:
db: { condition: service_healthy }
networks: [esim-net]
db:
image: postgres:15-alpine
restart: unless-stopped
environment:
POSTGRES_DB: esim_manager
POSTGRES_USER: esim
POSTGRES_PASSWORD: esim_pass
volumes: [postgres_data:/var/lib/postgresql/data]
healthcheck:
test: ["CMD-SHELL", "pg_isready -U esim -d esim_manager"]
interval: 10s; timeout: 5s; retries: 5
networks: [esim-net]
volumes: { postgres_data: }
networks: { esim-net: }
Health Check Endpoint: GET /api/auth/session-check (Returns 200 OK with { authenticated: true/false }).
http://localhost:3000 and use your standard Applivery Console credentials. Local cookie sessions expire after a 60-minute idle timeout. Multi-workspace selectors populate in the top right.FAILED or CANCELLED response from the Applivery MDM pipeline.[Import/Add] โโโบ Available โโโบ [Assign to Device / Bind EID] โโโบ Assigned โโโบ [MDM Payload Pushed]
โฒ โ
โโโโโโโโโโ [Release Action Executed] โโโโโโโโโโโดโโบ (If MDM Fails) โโโบ Failed
RefreshCellularPlans MDM command. The device handles cryptographic profile negotiation dynamically using its EID against the target SM-DP+ server address.mdmAgent).EuiccManager).Configured via Settings โ Integrations โ EMNify. Tracks credentials inside the local database instead of transient environment properties.
AVAILABLE.ASSIGNED (Preserved if currently marked FAILED to prevent metadata overwrites).AVAILABLE or ASSIGNED labeled with "EMNify: Suspended".PATCH /api/v1/sim/{id} { status: { id: 1 } }. (Endpoint status configuration id:0 functions as a silent API no-op; activating the underlying SIM resolves endpoint state natively).PATCH /api/v1/endpoint/{id} { status: { id: 1 } }.POST [https://cdn.emnify.net/api/v1/sim/operation](https://cdn.emnify.net/api/v1/sim/operation) with data structure:{ "action": { "id": 1 }, "target": [{ "sim": { "id": <simId> }, "eid": "<deviceEid>" }] }
id: 3. Critical Rule: The target profile must be in a GSMA "Released" state (physically deleted from the user handset and reported to the SM-DP+ server) or the API command will fail.POST /api/v1/authenticateGET /api/v1/sim?per_page=2500 | PATCH /api/v1/sim/{id}GET /api/v1/endpoint?per_page=2500 | POST /api/v1/endpoint | PATCH /api/v1/endpoint/{id}PATCH /endpoint/{id} { sim: null } returns a false positive HTTP 204 while leaving the SIM attached on EMNify's network backend. Workaround: Administrators should use the Release (local only) feature flag within the database UI, clear assignments manually in the EMNify platform, and run a fresh sync profile command.FbToken not found if the application instance has not established target presence on the local device.| Symptom | Probable Cause | Action |
|---|---|---|
PrismaClientKnownRequestError: ETIMEDOUT | Connectivity Failure | Validate that the container environment can resolve the specified DATABASE_URL string. |
DYNAMIC_SERVER_USAGE Logs | Next.js Server Rendering | Informational only. This reflects standard runtime behavior during initialization passes. |
| EID Unlink API Failures | GSMA State Lockout | Ensure the profile has been manually wiped via device system menus (Settings โ Cellular โ Delete eSIM) and wait 1โ5 minutes for server propagation before re-executing. |
| Policy Operations Return 404 | Schema/Permission Mismatch | Verify the Target Policy ID exists inside the Applivery system, and confirm the current account holds explicit policy management permissions. |
HTTPS paths to api.applivery.io and cdn.emnify.net. No exposed inbound ingress tunnels are necessary.HTTP-only, SameSite=Lax cookie architecture named applivery_esim_session. Rotating the value of SESSION_SECRET instantly flushes and invalidates all active admin sessions globally.Content type
Image
Digest
sha256:1a0b3351dโฆ
Size
346 MB
Last updated
about 19 hours ago
docker pull raulcnadal/applivery-esim-manager:e556b200b87025c50518d218bc0448ea62f16804