WellNuo/wellnuoSheme/01_ENV_Credentials and existing API.json
Sergei 3c8a9fc336 Add Node.js backend with Stripe integration and admin panel
Backend features:
- Express.js API server
- Supabase database integration
- Stripe Checkout for payments ($249 kit + $9.99/mo premium)
- Stripe webhooks for payment events
- Admin panel with order management
- Auth middleware with JWT
- Email service via Brevo

API endpoints:
- /api/stripe/* - Payment processing
- /api/webhook/stripe - Stripe webhooks
- /api/admin/* - Admin operations
- /function/well-api/api - Legacy API proxy

Database migrations:
- orders, subscriptions, push_tokens tables

Schemes updated:
- Removed updatedAt from all schemes
- Updated credentials section with live values
- Added Stripe configuration details

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-19 09:49:24 -08:00

914 lines
31 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"_meta": {
"name": "ENV and existing API",
},
"elements": [
{
"id": "env_header",
"type": "card",
"title": "WellNuo API Documentation",
"borderColor": "purple",
"tags": [
"overview"
],
"description": "Backend API for WellNuo Elderly Monitoring System\n\nBase URL: https://eluxnetworks.net/function/well-api/api\nMethod: POST (most endpoints), GET (some)\nContent-Type: application/x-www-form-urlencoded\n\nAPI VERIFIED: Working as of Dec 15, 2025",
"x": 140,
"y": 77.5
},
{
"id": "web_dashboard",
"type": "card",
"title": "Web Dashboard",
"borderColor": "blue",
"tags": [
"frontend",
"verified"
],
"description": "React Web Application\n\nURL: https://react.eluxnetworks.net/dashboard\nStack: React + TailwindCSS\nAuth: JWT tokens stored in localStorage (auth2)\n\nNote: For embedding in mobile app via WebView",
"x": 140,
"y": 192.5
},
{
"id": "api_auth",
"type": "card",
"title": "credentials (Auth) ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"description": "function=credentials\nMethod: POST\n\nRequest:\n- user_name: string\n- ps: string (password)\n- clientId: string (e.g. \"001\")\n- nonce: string (random)\n\nResponse:\n{\n \"access_token\": \"eyJhbG...\",\n \"privileges\": \"21,45,29\",\n \"user_id\": 59,\n \"max_role\": 2,\n \"status\": \"200 OK\"\n}\n\nTESTED: Dec 15, 2025 - WORKING",
"x": 426,
"y": 68
},
{
"id": "test_credentials",
"type": "card",
"title": "Test Credentials ✓",
"borderColor": "green",
"tags": [
"credentials",
"verified"
],
"description": "PRIMARY Test Account:\n\nUsername: slunginovic\nPassword: sale2025\nClientId: 001\nNonce: 111\n\nUser ID: 59\nPrivileges: 21,45,29\nMax Role: 2\n\nSECONDARY Account:\nUsername: anandk\nPassword: anandk_8\n\nTESTED: Dec 15, 2025",
"x": 667,
"y": -92
},
{
"id": "api_deployments_list",
"type": "card",
"title": "deployments_list ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"description": "function=deployments_list\nMethod: POST\n\nRequest:\n- user_name: string\n- token: string (JWT)\n- first: number (pagination start, e.g. 0)\n- last: number (pagination end, e.g. 1000)\n\nResponse:\n{\n \"result_list\": [\n {\n \"deployment_id\": 21,\n \"email\": \"user@example.com\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\"\n }\n ],\n \"status\": \"200 OK\"\n}\n\nTESTED: Dec 15, 2025 - WORKING",
"x": 700,
"y": 68
},
{
"id": "api_dashboard_single",
"type": "card",
"title": "dashboard_single ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"description": "function=dashboard_single\nMethod: POST\n\nRequest:\n- user_name: string\n- token: string (JWT)\n- deployment_id: number\n- date: string (YYYY-MM-DD)\n- nonce: string (optional)\n\nResponse: Wellness data, location, temperature, sleep hours, etc.\n\nUsed for: Main patient monitoring dashboard",
"x": 351,
"y": 264
},
{
"id": "api_dashboard_list",
"type": "card",
"title": "dashboard_list ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=dashboard_list\nMethod: POST\n\nRequest:\n- user_name: string\n- token: string\n- user_id: number (optional)\n- date: string (YYYY-MM-DD)\n\nReturns: List of dashboards for user",
"x": 351,
"y": 380
},
{
"id": "api_voice_ask",
"type": "card",
"title": "voice_ask (AI Chat) ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"description": "function=voice_ask\nMethod: POST\n\nRequest:\n- clientId: string (e.g. \"MA_001\")\n- user_name: string\n- token: string\n- question: string (keyword-based!)\n- deployment_id: number\n\nWORKING KEYWORDS:\n- \"how is dad/mom\" - full status\n- \"bathroom\" - restroom usage\n- \"kitchen\" - cooking activity\n- \"sleep/night\" - sleep hours\n- \"temperature\" - room temp\n- \"last seen\" - online status",
"x": 416,
"y": 500
},
{
"id": "api_beneficiaries_list",
"type": "card",
"title": "beneficiaries_list ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=beneficiaries_list\nMethod: POST\n\nRequest:\n- token: string\n- user_name: string\n- first: number (0)\n- last: number (1000)\n\nReturns: List of all beneficiaries (elderly persons)",
"x": 980,
"y": 68
},
{
"id": "api_beneficiary_form",
"type": "card",
"title": "beneficiary_form ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=beneficiary_form\nMethod: POST\n\nCreate/Edit beneficiary:\n- new_user_name: string\n- editing_user_id: number (for edit)\n- role_ids: string (e.g. \"1,2\")\n- email, first_name, last_name\n- address_street, address_city\n- address_zip, address_state\n- address_country\n- phone_number, picture",
"x": 980,
"y": 180
},
{
"id": "api_get_beneficiary",
"type": "card",
"title": "get_beneficiary ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=get_beneficiary\nMethod: POST\n\nRequest:\n- token: string\n- user_name: string\n- user_id: number\n\nReturns: Detailed beneficiary info",
"x": 980,
"y": 290
},
{
"id": "api_caretakers_list",
"type": "card",
"title": "caretakers_list ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=caretakers_list\nMethod: POST\n\nRequest:\n- token: string\n- user_name: string\n- first: number (0)\n- last: number (1000)\n\nReturns: List of all caretakers",
"x": 1200,
"y": 68
},
{
"id": "api_caretaker_form",
"type": "card",
"title": "caretaker_form ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=caretaker_form\nMethod: POST\n\nCreate/Edit caretaker:\n- new_user_name: string\n- user_id, editing_user_id: number\n- key: string (password)\n- role_ids, access_to: string\n- email, first_name, last_name\n- address_*, phone_number, picture",
"x": 1200,
"y": 180
},
{
"id": "api_get_caretaker",
"type": "card",
"title": "get_caretaker ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=get_caretaker\nMethod: POST\n\nRequest:\n- token: string\n- user_name: string\n- user_id: number\n\nReturns: Detailed caretaker info",
"x": 1200,
"y": 290
},
{
"id": "api_deployment_form",
"type": "card",
"title": "deployment_form ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=deployment_form\nMethod: POST\n\nCreate/Edit deployment:\n- editing_deployment_id: number\n- beneficiary_id, caretaker_id\n- owner_id, installer_id: number\n- address_*: string\n- persons, gender, race: number\n- born: number (year)\n- pets: number\n- lat, lng: number (coords)\n- devices: JSON array of MACs\n- time_zone_s: string",
"x": 700,
"y": 180
},
{
"id": "api_deployment_edit",
"type": "card",
"title": "deployment_edit ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "name=deployment_edit\nMethod: GET\n\nQuery params:\n- user_name: string\n- token: string\n- deployment_id: number\n\nReturns: Deployment data for editing",
"x": 700,
"y": 290
},
{
"id": "api_deployment_delete",
"type": "card",
"title": "deployment_delete ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=deployment_delete\nMethod: POST\n\nRequest:\n- user_name: string\n- token: string\n- editing_deployment_id: number\n- user_id: number\n- priviledges: string\n\nCAUTION: Destructive operation!",
"x": 700,
"y": 400
},
{
"id": "api_get_deployment",
"type": "card",
"title": "get_deployment ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=get_deployment\nMethod: POST\n\nRequest:\n- user_name: string\n- token: string\n- deployment_id: number\n- date: string (optional)\n\nReturns: Full deployment details",
"x": 550,
"y": 400
},
{
"id": "api_find_deployments",
"type": "card",
"title": "find_deployments ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=find_deployments\nMethod: POST\n\nRequest:\n- user_name: string\n- token: string\n- well_ids: string (comma-separated)\n\nReturns: Deployments matching well IDs",
"x": 550,
"y": 510
},
{
"id": "api_device_list",
"type": "card",
"title": "device_list ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=device_list\nMethod: POST\n\nRequest:\n- user_name: string\n- token: string\n- first: number (0)\n- last: number (1000)\n\nReturns: List of all devices (sensors)",
"x": 1420,
"y": 68
},
{
"id": "api_device_list_by_deployment",
"type": "card",
"title": "device_list_by_deployment ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=device_list_by_deployment\nMethod: POST\n\nRequest:\n- user_name, token: string\n- deployment_id: number\n- first, last: number\n\nReturns: Devices for specific deployment",
"x": 1420,
"y": 180
},
{
"id": "api_device_form",
"type": "card",
"title": "device_form ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=device_form\nMethod: POST\n\nCreate/Edit device:\n- well_id: number\n- device_mac: string\n- description: string\n- location: number\n- close_to: string\n- radar_threshold: number\n- temperature_calib: string\n- humidity_calib: string\n- group: number",
"x": 1420,
"y": 290
},
{
"id": "api_get_device",
"type": "card",
"title": "get_device ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=get_device\nMethod: POST\n\nRequest:\n- user_name, token: string\n- device_id: number\n- mac: string (optional)\n\nReturns: Device details and status",
"x": 1420,
"y": 400
},
{
"id": "api_device_reboot",
"type": "card",
"title": "device_reboot ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=device_reboot\nMethod: POST\n\nRequest:\n- user_name, token: string\n- device_id: number (optional)\n- mac: string\n\nAction: Reboots the device remotely",
"x": 1560,
"y": 68
},
{
"id": "api_device_get_live",
"type": "card",
"title": "device_get_live ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=device_get_live\nMethod: POST\n\nRequest:\n- user_name, token: string\n- device_id: number\n\nReturns: Live sensor data from device",
"x": 1560,
"y": 180
},
{
"id": "api_device_set_group",
"type": "card",
"title": "device_set_group ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=device_set_group\nMethod: POST\n\nRequest:\n- user_name, token: string\n- device_id: number\n- group_id: number\n\nAction: Assigns device to a group",
"x": 1560,
"y": 290
},
{
"id": "api_device_set_well_id",
"type": "card",
"title": "device_set_well_id ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=device_set_well_id\nMethod: POST\n\nRequest:\n- user_name, token: string\n- device_id: number\n- well_id: number\n- mac: string\n\nAction: Sets device well_id",
"x": 1560,
"y": 400
},
{
"id": "api_alarm_on_off",
"type": "card",
"title": "alarm_on_off ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=alarm_on_off\nMethod: POST\n\nRequest:\n- user_name, token: string\n- deployment_id: number\n- alarm_on: number (1=on, 0=off)\n\nAction: Toggle alarm state",
"x": 140,
"y": 320
},
{
"id": "api_get_alarm_state",
"type": "card",
"title": "get_alarm_state ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=get_alarm_state\nMethod: POST\n\nRequest:\n- user_name, token: string\n- deployment_id: number\n\nReturns: Current alarm status",
"x": 140,
"y": 430
},
{
"id": "api_activity_detected",
"type": "card",
"title": "activity_detected ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=activity_detected\nMethod: POST\n\nRequest:\n- user_name, token: string\n- time: number (epoch timestamp)\n\nAction: Log activity detection event",
"x": 140,
"y": 540
},
{
"id": "api_activities_report_details",
"type": "card",
"title": "activities_report_details ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=activities_report_details\nMethod: POST\n\nRequest:\n- user_name, token: string\n- deployment_id: number\n- filter: number (1-6)\n\nReturns: Detailed activity reports",
"x": 140,
"y": 650
},
{
"id": "api_get_floor_layout",
"type": "card",
"title": "get_floor_layout ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=get_floor_layout\nMethod: POST\n\nRequest:\n- user_name, token: string\n- deployment_id: number\n- date: string (YYYY-MM-DD)\n\nReturns: Floor layout configuration",
"x": 1700,
"y": 68
},
{
"id": "api_location_map",
"type": "card",
"title": "get_full_location_map ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "name=get_full_location_map\nMethod: GET\n\nQuery params:\n- user_name, token: string\n- deployment_id: number\n- date: string\n- re_create, bw, motion: boolean\n- scale_global: boolean\n- map_type, filter: number\n- fast: boolean\n\nReturns: Full location/room mapping",
"x": 1700,
"y": 180
},
{
"id": "api_get_image_file",
"type": "card",
"title": "get_image_file ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "name=get_image_file\nMethod: GET\n\nQuery params:\n- user_name, token: string\n- deployment_id: number\n- radar_part: string (e.g. \"s28\")\n- date: string\n- re_create: boolean\n- group_by: string\n- map_type: number\n\nReturns: Generated image file",
"x": 1700,
"y": 290
},
{
"id": "api_download",
"type": "card",
"title": "download ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "name=download\nMethod: GET\n\nQuery params:\n- user_name, token: string\n- deployment_id: number\n- date_from, date_to: string\n- group_by: string (e.g. \"by_minute\")\n- re_create: boolean\n- radar_part: string\n\nReturns: Data export file",
"x": 1700,
"y": 400
},
{
"id": "api_get_devices_locations",
"type": "card",
"title": "get_devices_locations ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"completed": true,
"description": "function=get_devices_locations\nMethod: POST\n\nRequest:\n- user_name, token: string\n- well_ids: string (comma-separated)\n\nReturns: Device location mappings",
"x": 1700,
"y": 510
},
{
"id": "jwt_token",
"type": "card",
"title": "JWT Token Structure",
"borderColor": "teal",
"tags": [
"backend"
],
"description": "Token Format: JWT (HS256)\n\nPayload:\n{\n \"username\": \"slunginovic\",\n \"exp\": 1765910792 (Unix timestamp)\n}\n\nExpiration: ~7 days\nStorage: localStorage.auth2 (web)\nMobile: expo-secure-store\n\nUsage: Include as 'token' param in all authenticated requests",
"x": 520,
"y": 620
},
{
"id": "deployment_ids",
"type": "card",
"title": "Deployment IDs (Patient IDs)",
"borderColor": "teal",
"tags": [
"backend",
"verified"
],
"description": "What are Deployment IDs?\n\nDeployment ID = Patient ID = Beneficiary ID\nEach elderly person has unique ID.\n\nHow they work:\n- User logs in - gets 'privileges' string\n- Privileges = comma-separated deployment_ids\n- Example: \"21,45,29\" = 3 patients\n\nUsage:\n- dashboard_single: Get patient wellness\n- voice_ask: Ask AI about patient",
"x": 900,
"y": 400
},
{
"id": "server_info",
"type": "card",
"title": "Server Infrastructure",
"borderColor": "gray",
"tags": [
"external"
],
"description": "API Server:\n- Domain: eluxnetworks.net\n- SSL: Let's Encrypt\n- Status: ONLINE (verified Dec 15, 2025)\n\nReact Frontend:\n- Domain: react.eluxnetworks.net\n\nDev Server (HTTP):\n- eluxnetworks.net:8000 (debug)",
"x": 1840,
"y": 68
},
{
"id": "api_status_summary",
"type": "card",
"title": "API Status Summary",
"borderColor": "green",
"tags": [
"overview",
"verified"
],
"description": "VERIFIED ENDPOINTS (Dec 15, 2025):\n\n1. credentials - Login, get JWT token\n2. deployments_list - List patients\n3. dashboard_single - Patient wellness\n4. voice_ask - AI chat\n\nPENDING TEST (need valid data):\n- All device_* endpoints\n- All beneficiary_* endpoints\n- All caretaker_* endpoints\n- Maps and images\n- Downloads\n\nAPI is WORKING and ACCESSIBLE",
"x": 1840,
"y": 200
},
{
"id": "expo_config",
"type": "card",
"title": "Mobile App Config",
"borderColor": "green",
"tags": [
"frontend",
"verified"
],
"description": "Tech Stack:\n- Expo SDK 54\n- React Native 0.81.5\n- Expo Router 6.x\n\nFeatures:\n- WebView for dashboard embedding\n- Push notifications (FCM/APNs)\n- Biometric auth (future)",
"x": 1840,
"y": 340
},
{
"id": "gitea_repo",
"type": "card",
"title": "Git Repository ✓",
"borderColor": "green",
"tags": [
"external",
"verified"
],
"description": "Gitea Server:\nURL: https://gitea.wellnua.com\nRepo: sergei_t/WellNuo\nBranch: development\n\nCredentials:\n- Username: sergei_t\n- Password: Orelkosyak5!",
"x": 1840,
"y": 460
},
{
"id": "eas_build",
"type": "card",
"title": "EAS Build & Deploy ✓",
"borderColor": "green",
"tags": [
"external",
"verified"
],
"description": "EAS (Expo Application Services)\n\nApp Info:\n- Name: WellNuo\n- iOS Bundle ID: com.wellnuo.BluetoothScanner\n- Android Package: com.wellnuo.app\n- Expo Project ID: 4f415b4b-41c8-4b98-989c-32f6b3f97481\n\nApple Account (Robert's):\n- Apple ID: kosyakorel1@gmail.com\n- Team ID: UHLZD54ULZ (ZMR Inc)\n\nBuilds:\n- iOS: https://expo.dev/artifacts/eas/vTqLY2yWKzcCfPJSVzGZMZ.ipa\n- Android: https://expo.dev/artifacts/eas/5DXfBCuPc2uJ2fSzW6maie.aab\n\nUpdated: Dec 17, 2025",
"x": 1840,
"y": 580
},
{
"id": "supabase_db",
"type": "card",
"title": "Supabase Database ✓",
"borderColor": "green",
"tags": [
"external",
"verified"
],
"description": "Supabase (PostgreSQL + Storage)\n\nProject: WellNuo\nURL: https://bfzizknbxbsfrffqityf.supabase.co\n\nCredentials:\n- DB Password: Orelkosyak5!\n- Service Key: sb_secret_N7TN930UzzXGgFgrAaozqA_Y4b0DKlM\n\nTables (migrated from eluxnetworks.net):\n- deployments: 45 rows\n- devices: 455 rows\n- person_details: 8 rows (⚠️ users table!)\n- deployment_details: 23 rows\n\n⚠ SECURITY: Passwords in plain text in 'key' field!\nSee: 05_Database_Schema.json for full details\n\nStorage Bucket: media (public)\n- /avatars/ - User avatars\n- /floor-plans/ - Deployment floor plans\n- /documents/ - PDFs, disclaimers\n- /reports/ - Generated reports\n\nStorage URL:\nhttps://bfzizknbxbsfrffqityf.supabase.co/storage/v1/object/public/media/{path}\n\nMigration: Dec 18, 2025\nStatus: VERIFIED",
"x": 1840,
"y": 720
},
{
"id": "brevo_email",
"type": "card",
"title": "Brevo Email Service",
"borderColor": "orange",
"tags": [
"external",
"pending"
],
"description": "Brevo (formerly Sendinblue)\nTransactional Email Service\n\n=== TO CONFIGURE ===\n\nAPI Key: [TBD - get from Brevo dashboard]\nSMTP Server: smtp-relay.brevo.com\nPort: 587\n\nUsage:\n- Password reset emails\n- Welcome emails\n- Alert notifications\n\nEndpoints needed:\n- POST /api/auth/forgot-password\n- POST /api/auth/reset-password\n\nTemplates:\n- password_reset\n- welcome_user\n- alert_notification\n\nDocs: https://developers.brevo.com/",
"x": 2060,
"y": 720
},
{
"id": "website_urls",
"type": "card",
"title": "Website & Domains",
"borderColor": "cyan",
"tags": [
"external"
],
"description": "WellNuo Domains\n\n=== CURRENT ===\nWebsite: https://wellnuo.smartlaunchhub.com\nAPI: https://wellnuo.smartlaunchhub.com/api\n\n=== FUTURE (when ready) ===\nWebsite: https://wellnuo.com\nAPI: https://api.wellnuo.com\n\n=== HOSTING ===\nServer: 91.98.205.156 (SmartLaunchHub)\nSSL: Let's Encrypt\nNginx: reverse proxy\n\nDeployment:\nrsync to /var/www/wellnuo/",
"x": 2060,
"y": 580
},
{
"id": "wellnuo_backend",
"type": "card",
"title": "WellNuo Backend (Node.js) ✓",
"borderColor": "green",
"tags": [
"backend",
"verified"
],
"description": "Custom Node.js Backend API (Hybrid)\n\n=== DEPLOYED ===\nURL: https://wellnuo.smartlaunchhub.com\nPath: /var/www/wellnuo-backend/\nPM2: wellnuo-api\nPort: 3010\n\nStack: Express + Supabase SDK\n\nAPI Format (same as old):\nPOST /function/well-api/api\nBody: function=<name>&params...\n\n=== МОЖНО НАПРЯМУЮ ===\nСтарый API всё ещё доступен:\nhttps://eluxnetworks.net/function/well-api/api\n\nМожно обращаться напрямую к нему\nдля любых запросов (нужен токен).\n\nConfig: .env file\nDeployed: Dec 18, 2025\nStatus: WORKING",
"x": 1840,
"y": 880
},
{
"id": "api_routing",
"type": "card",
"title": "API Routing (Hybrid) ✓",
"borderColor": "cyan",
"tags": [
"backend",
"overview"
],
"description": "=== НАШИ ENDPOINTS (Supabase) ===\n\nAuth:\n- credentials\n- new_user_form\n\nDashboard:\n- dashboard_list\n- dashboard_single\n\nDeployments:\n- deployments_list\n- get_deployment\n- deployment_form\n- deployment_delete\n- set_deployment\n- find_deployments\n- get_floor_layout\n- set_floor_layout\n- request_deployment_map_new\n- get_devices_locations\n\nDevices:\n- device_list\n- device_list_4_gui\n- device_list_by_deployment\n- get_device\n- device_form\n- device_set_group\n- device_get_live\n- device_reboot\n- device_set_well_id\n- device_set_network_id\n- request_devices\n\nBeneficiaries:\n- beneficiaries_list\n- get_beneficiary\n- beneficiary_form\n\nCaretakers:\n- caretakers_list\n- get_caretaker\n- caretaker_form\n\nAlarms:\n- alarm_on_off\n- get_alarm_state\n- store_alarms\n- send_walarm\n- activity_detected",
"x": 2060,
"y": 880
},
{
"id": "api_proxy_to_old",
"type": "card",
"title": "Proxy → Old API ✓",
"borderColor": "orange",
"tags": [
"backend",
"external"
],
"description": "=== ПРОКСИРУЕМ НА СТАРЫЙ API ===\n\nЭти endpoints идут на:\nhttps://eluxnetworks.net/function/well-api/api\n\nSensor Data (realtime):\n- get_presence_data\n- get_raw_data\n- get_sensor_data_by_deployment_id\n- get_sensor_bucketed_data_by_room_sensor\n- get_time_deltas\n- request_single_slice\n- request_single_radar_slice\n- request_proximity\n- activities_report_details\n\nVoice AI:\n- voice_ask (AI chatbot)\n\nMaps/Images/Downloads:\n- get_image_file\n- download\n- get_full_location_map\n- get_sensors_map\n- get_photo\n\n=== FALLBACK ===\nВсе неизвестные функции\nтоже проксируются на старый API.\n\n=== ПРЯМОЙ ДОСТУП ===\nМожно обращаться к старому API\nнапрямую без нашего backend.",
"x": 2280,
"y": 880
}
],
"connections": [
{
"from": "env_header",
"to": "api_auth"
},
{
"from": "env_header",
"to": "web_dashboard"
},
{
"from": "test_credentials",
"to": "api_auth"
},
{
"from": "api_auth",
"to": "api_deployments_list"
},
{
"from": "api_auth",
"to": "api_dashboard_single"
},
{
"from": "api_auth",
"to": "jwt_token"
},
{
"from": "api_dashboard_single",
"to": "api_dashboard_list"
},
{
"from": "api_dashboard_single",
"to": "api_voice_ask"
},
{
"from": "api_dashboard_single",
"to": "deployment_ids"
},
{
"from": "api_deployments_list",
"to": "api_deployment_form"
},
{
"from": "api_deployment_form",
"to": "api_deployment_edit"
},
{
"from": "api_deployment_edit",
"to": "api_deployment_delete"
},
{
"from": "api_deployment_edit",
"to": "api_get_deployment"
},
{
"from": "api_get_deployment",
"to": "api_find_deployments"
},
{
"from": "api_deployments_list",
"to": "api_beneficiaries_list"
},
{
"from": "api_beneficiaries_list",
"to": "api_beneficiary_form"
},
{
"from": "api_beneficiary_form",
"to": "api_get_beneficiary"
},
{
"from": "api_beneficiaries_list",
"to": "api_caretakers_list"
},
{
"from": "api_caretakers_list",
"to": "api_caretaker_form"
},
{
"from": "api_caretaker_form",
"to": "api_get_caretaker"
},
{
"from": "api_caretakers_list",
"to": "api_device_list"
},
{
"from": "api_device_list",
"to": "api_device_list_by_deployment"
},
{
"from": "api_device_list_by_deployment",
"to": "api_device_form"
},
{
"from": "api_device_form",
"to": "api_get_device"
},
{
"from": "api_device_list",
"to": "api_device_reboot"
},
{
"from": "api_device_reboot",
"to": "api_device_get_live"
},
{
"from": "api_device_get_live",
"to": "api_device_set_group"
},
{
"from": "api_device_set_group",
"to": "api_device_set_well_id"
},
{
"from": "web_dashboard",
"to": "api_alarm_on_off"
},
{
"from": "api_alarm_on_off",
"to": "api_get_alarm_state"
},
{
"from": "api_get_alarm_state",
"to": "api_activity_detected"
},
{
"from": "api_activity_detected",
"to": "api_activities_report_details"
},
{
"from": "api_device_set_well_id",
"to": "api_get_floor_layout"
},
{
"from": "api_get_floor_layout",
"to": "api_location_map"
},
{
"from": "api_location_map",
"to": "api_get_image_file"
},
{
"from": "api_get_image_file",
"to": "api_download"
},
{
"from": "api_download",
"to": "api_get_devices_locations"
},
{
"from": "api_get_floor_layout",
"to": "server_info"
},
{
"from": "server_info",
"to": "api_status_summary"
},
{
"from": "api_status_summary",
"to": "expo_config"
},
{
"from": "expo_config",
"to": "gitea_repo"
},
{
"from": "gitea_repo",
"to": "eas_build"
},
{
"from": "eas_build",
"to": "supabase_db"
},
{
"from": "supabase_db",
"to": "wellnuo_backend"
},
{
"from": "supabase_db",
"to": "brevo_email"
},
{
"from": "eas_build",
"to": "website_urls"
},
{
"from": "website_urls",
"to": "brevo_email"
},
{
"from": "deployment_ids",
"to": "api_get_beneficiary"
},
{
"from": "wellnuo_backend",
"to": "api_routing"
},
{
"from": "api_routing",
"to": "api_proxy_to_old"
},
{
"from": "api_proxy_to_old",
"to": "server_info"
}
],
"tagsDictionary": [
{
"id": "tag-frontend",
"name": "frontend",
"color": "green"
},
{
"id": "tag-backend",
"name": "backend",
"color": "blue"
},
{
"id": "tag-external",
"name": "external",
"color": "orange"
},
{
"id": "tag-verified",
"name": "verified",
"color": "lime"
},
{
"id": "tag-pending",
"name": "pending",
"color": "yellow"
},
{
"id": "tag-credentials",
"name": "credentials",
"color": "red"
},
{
"id": "tag-overview",
"name": "overview",
"color": "purple"
}
]
}