Admin Panel (Next.js): - Dashboard with stats - Users list with relationships (watches/watched_by) - User detail pages - Deployments list and detail pages - Devices, Orders, Subscriptions pages - OTP-based admin authentication Backend Optimizations: - Fixed N+1 query problem in admin APIs - Added pagination support - Added .range() and count support to Supabase wrapper - Optimized batch queries with lookup maps Database: - Added migrations for schema evolution - New tables: push_tokens, notification_settings - Updated access model iOS Build Scripts: - build-ios.sh, clear-apple-cache.sh - EAS configuration updates 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
884 lines
15 KiB
JSON
884 lines
15 KiB
JSON
[
|
|
{
|
|
"id": 1,
|
|
"name": "credentials",
|
|
"function": "credentials",
|
|
"params": [
|
|
"user_name",
|
|
"ps",
|
|
"clientId",
|
|
"nonce"
|
|
]
|
|
},
|
|
{
|
|
"id": 2,
|
|
"name": "activity_detected",
|
|
"function": "activity_detected",
|
|
"params": [
|
|
"token",
|
|
"user_name",
|
|
"time"
|
|
]
|
|
},
|
|
{
|
|
"id": 3,
|
|
"name": "alarm_on_off",
|
|
"function": "activity_detected",
|
|
"params": [
|
|
"token",
|
|
"user_name",
|
|
"time"
|
|
]
|
|
},
|
|
{
|
|
"id": 4,
|
|
"name": "get_alarm_state",
|
|
"function": "activity_detected",
|
|
"params": [
|
|
"token",
|
|
"user_name",
|
|
"time"
|
|
]
|
|
},
|
|
{
|
|
"id": 5,
|
|
"name": "activities_report_details",
|
|
"function": "activities_report_details",
|
|
"params": [
|
|
"token",
|
|
"user_name",
|
|
"deployment_id",
|
|
"filter"
|
|
]
|
|
},
|
|
{
|
|
"id": 6,
|
|
"name": "beneficiaries_list",
|
|
"function": "beneficiaries_list",
|
|
"params": [
|
|
"token",
|
|
"user_name",
|
|
"first",
|
|
"last"
|
|
]
|
|
},
|
|
{
|
|
"id": 7,
|
|
"name": "beneficiary_edit_debug",
|
|
"function": "N/A",
|
|
"params": []
|
|
},
|
|
{
|
|
"id": 8,
|
|
"name": "beneficiary_form",
|
|
"function": "beneficiary_form",
|
|
"params": [
|
|
"token",
|
|
"user_name",
|
|
"new_user_name",
|
|
"editing_user_id",
|
|
"role_ids",
|
|
"email",
|
|
"first_name",
|
|
"last_name",
|
|
"address_street",
|
|
"address_city",
|
|
"address_zip",
|
|
"address_state",
|
|
"address_country",
|
|
"phone_number",
|
|
"picture"
|
|
]
|
|
},
|
|
{
|
|
"id": 9,
|
|
"name": "caretaker_edit",
|
|
"function": "N/A",
|
|
"params": []
|
|
},
|
|
{
|
|
"id": 10,
|
|
"name": "caretaker_form",
|
|
"function": "caretaker_form",
|
|
"params": [
|
|
"token",
|
|
"user_name",
|
|
"new_user_name",
|
|
"user_id",
|
|
"editing_user_id",
|
|
"key",
|
|
"role_ids",
|
|
"access_to",
|
|
"email",
|
|
"first_name",
|
|
"last_name",
|
|
"address_street",
|
|
"address_city",
|
|
"address_zip",
|
|
"address_state",
|
|
"address_country",
|
|
"phone_number",
|
|
"picture"
|
|
]
|
|
},
|
|
{
|
|
"id": 11,
|
|
"name": "caretakers_list",
|
|
"function": "caretakers_list",
|
|
"params": [
|
|
"token",
|
|
"user_name",
|
|
"first",
|
|
"last"
|
|
]
|
|
},
|
|
{
|
|
"id": 12,
|
|
"name": "dashboard_list",
|
|
"function": "dashboard_list",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"user_id",
|
|
"date"
|
|
]
|
|
},
|
|
{
|
|
"id": 13,
|
|
"name": "dashboard_single",
|
|
"function": "dashboard_single",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"date",
|
|
"deployment_id",
|
|
"nonce"
|
|
]
|
|
},
|
|
{
|
|
"id": 14,
|
|
"name": "deployment_delete",
|
|
"function": "deployment_delete",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"editing_deployment_id",
|
|
"user_id",
|
|
"priviledges"
|
|
]
|
|
},
|
|
{
|
|
"id": 15,
|
|
"name": "deployment_edit",
|
|
"function": "N/A",
|
|
"params": []
|
|
},
|
|
{
|
|
"id": 16,
|
|
"name": "deployment_form",
|
|
"function": "deployment_form",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"editing_deployment_id",
|
|
"beneficiary_id",
|
|
"caretaker_id",
|
|
"owner_id",
|
|
"installer_id",
|
|
"address_street",
|
|
"address_city",
|
|
"address_zip",
|
|
"address_state",
|
|
"address_country",
|
|
"persons",
|
|
"gender",
|
|
"race",
|
|
"born",
|
|
"pets",
|
|
"wifis",
|
|
"lat",
|
|
"lng",
|
|
"devices",
|
|
"time_zone_s"
|
|
]
|
|
},
|
|
{
|
|
"id": 17,
|
|
"name": "deployments_list",
|
|
"function": "deployments_list",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"first",
|
|
"last"
|
|
]
|
|
},
|
|
{
|
|
"id": 18,
|
|
"name": "device_form",
|
|
"function": "device_form",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"well_id",
|
|
"device_mac",
|
|
"description",
|
|
"location",
|
|
"close_to",
|
|
"radar_threshold",
|
|
"temperature_calib",
|
|
"humidity_calib",
|
|
"group"
|
|
]
|
|
},
|
|
{
|
|
"id": 19,
|
|
"name": "device_list",
|
|
"function": "device_list",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"first",
|
|
"last"
|
|
]
|
|
},
|
|
{
|
|
"id": 20,
|
|
"name": "device_list_4_gui",
|
|
"function": "device_list_4_gui",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"first",
|
|
"last"
|
|
]
|
|
},
|
|
{
|
|
"id": 21,
|
|
"name": "device_set_group",
|
|
"function": "device_set_group",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"device_id",
|
|
"group_id"
|
|
]
|
|
},
|
|
{
|
|
"id": 22,
|
|
"name": "device_get_live",
|
|
"function": "device_get_live",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"device_id",
|
|
"mac"
|
|
]
|
|
},
|
|
{
|
|
"id": 23,
|
|
"name": "device_reboot",
|
|
"function": "device_reboot",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"device_id",
|
|
"mac"
|
|
]
|
|
},
|
|
{
|
|
"id": 24,
|
|
"name": "device_set_well_id",
|
|
"function": "device_set_well_id",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"device_id",
|
|
"well_id",
|
|
"mac"
|
|
]
|
|
},
|
|
{
|
|
"id": 25,
|
|
"name": "device_set_network_id",
|
|
"function": "device_set_network_id",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"device_id",
|
|
"well_id"
|
|
]
|
|
},
|
|
{
|
|
"id": 26,
|
|
"name": "device_list_by_deployment",
|
|
"function": "device_list_by_deployment",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"deployment_id",
|
|
"first",
|
|
"last"
|
|
]
|
|
},
|
|
{
|
|
"id": 27,
|
|
"name": "devices_list",
|
|
"function": "N/A",
|
|
"params": []
|
|
},
|
|
{
|
|
"id": 28,
|
|
"name": "download",
|
|
"function": "N/A",
|
|
"params": []
|
|
},
|
|
{
|
|
"id": 29,
|
|
"name": "find_deployments",
|
|
"function": "find_deployments",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"well_ids"
|
|
]
|
|
},
|
|
{
|
|
"id": 30,
|
|
"name": "get_beneficiary",
|
|
"function": "get_beneficiary",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"user_id"
|
|
]
|
|
},
|
|
{
|
|
"id": 31,
|
|
"name": "get_caretaker",
|
|
"function": "get_beneficiary",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"user_id"
|
|
]
|
|
},
|
|
{
|
|
"id": 32,
|
|
"name": "get_deployment",
|
|
"function": "get_deployment",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"date",
|
|
"deployment_id"
|
|
]
|
|
},
|
|
{
|
|
"id": 33,
|
|
"name": "get_deployment_j",
|
|
"function": "get_deployment",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"date",
|
|
"deployment_id"
|
|
]
|
|
},
|
|
{
|
|
"id": 34,
|
|
"name": "get_deployment_details",
|
|
"function": "request_devices",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"group_id",
|
|
"deployment_id",
|
|
"location",
|
|
"fresh"
|
|
]
|
|
},
|
|
{
|
|
"id": 35,
|
|
"name": "get_device",
|
|
"function": "get_device",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"device_id",
|
|
"mac"
|
|
]
|
|
},
|
|
{
|
|
"id": 36,
|
|
"name": "get_devices_locations",
|
|
"function": "get_devices_locations",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"well_ids"
|
|
]
|
|
},
|
|
{
|
|
"id": 37,
|
|
"name": "get_floor_layout",
|
|
"function": "get_floor_layout",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"date",
|
|
"deployment_id"
|
|
]
|
|
},
|
|
{
|
|
"id": 38,
|
|
"name": "get_full_location_map",
|
|
"function": "N/A",
|
|
"params": []
|
|
},
|
|
{
|
|
"id": 39,
|
|
"name": "get_image_file",
|
|
"function": "N/A",
|
|
"params": []
|
|
},
|
|
{
|
|
"id": 40,
|
|
"name": "get_photo",
|
|
"function": "N/A",
|
|
"params": []
|
|
},
|
|
{
|
|
"id": 41,
|
|
"name": "get_node_red_port",
|
|
"function": "get_node_red_port",
|
|
"params": [
|
|
"user_name",
|
|
"token"
|
|
]
|
|
},
|
|
{
|
|
"id": 42,
|
|
"name": "get_presence_data",
|
|
"function": "get_presence_data",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"deployment_id",
|
|
"date",
|
|
"filter",
|
|
"data_type",
|
|
"to_date",
|
|
"device_id"
|
|
]
|
|
},
|
|
{
|
|
"id": 43,
|
|
"name": "get_raw_data",
|
|
"function": "get_raw_data",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"sensor",
|
|
"MAC",
|
|
"from_time",
|
|
"to_time",
|
|
"part",
|
|
"tzone",
|
|
"last_name",
|
|
"address_street",
|
|
"address_city",
|
|
"address_zip",
|
|
"address_state",
|
|
"address_country",
|
|
"phone_number",
|
|
"picture"
|
|
]
|
|
},
|
|
{
|
|
"id": 44,
|
|
"name": "get_sensor_bucketed_data_by_room_sensor",
|
|
"function": "get_sensor_bucketed_data_by_room_sensor",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"sensor",
|
|
"deployment_id",
|
|
"data_type",
|
|
"radar_part",
|
|
"date",
|
|
"bucket_size",
|
|
"location"
|
|
]
|
|
},
|
|
{
|
|
"id": 45,
|
|
"name": "get_sensor_data_by_deployment_id",
|
|
"function": "get_sensor_data_by_deployment_id",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"sensor",
|
|
"deployment_id",
|
|
"data_type",
|
|
"radar_part",
|
|
"date"
|
|
]
|
|
},
|
|
{
|
|
"id": 46,
|
|
"name": "get_sensor_deltas",
|
|
"function": "get_time_deltas",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"date",
|
|
"to_date",
|
|
"device_id",
|
|
"sensor",
|
|
"deployment_id"
|
|
]
|
|
},
|
|
{
|
|
"id": 47,
|
|
"name": "get_sensors_map",
|
|
"function": "N/A",
|
|
"params": []
|
|
},
|
|
{
|
|
"id": 48,
|
|
"name": "get_time_deltas",
|
|
"function": "get_time_deltas",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"date",
|
|
"to_date",
|
|
"device_id",
|
|
"sensor",
|
|
"deployment_id"
|
|
]
|
|
},
|
|
{
|
|
"id": 49,
|
|
"name": "get_zgraph_data",
|
|
"function": "get_presence_data",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"deployment_id",
|
|
"date",
|
|
"filter",
|
|
"data_type"
|
|
]
|
|
},
|
|
{
|
|
"id": 50,
|
|
"name": "messages_age",
|
|
"function": "messages_age",
|
|
"params": [
|
|
"clientId",
|
|
"user_name",
|
|
"token",
|
|
"nonce",
|
|
"macs"
|
|
]
|
|
},
|
|
{
|
|
"id": 51,
|
|
"name": "node-red_deployed",
|
|
"function": "store_flow",
|
|
"params": [
|
|
"token",
|
|
"user_name",
|
|
"time",
|
|
"flow"
|
|
]
|
|
},
|
|
{
|
|
"id": 52,
|
|
"name": "parse_address",
|
|
"function": "N/A",
|
|
"params": []
|
|
},
|
|
{
|
|
"id": 53,
|
|
"name": "join_address",
|
|
"function": "N/A",
|
|
"params": []
|
|
},
|
|
{
|
|
"id": 54,
|
|
"name": "new_user_form",
|
|
"function": "new_user_form",
|
|
"params": [
|
|
"firstName",
|
|
"lastName",
|
|
"email",
|
|
"password",
|
|
"devices",
|
|
"agreementDate",
|
|
"privacyPolicyVersion",
|
|
"phone"
|
|
]
|
|
},
|
|
{
|
|
"id": 55,
|
|
"name": "request_deployment_map_new",
|
|
"function": "request_deployment_map_new",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"date",
|
|
"deployment_id",
|
|
"map_type"
|
|
]
|
|
},
|
|
{
|
|
"id": 56,
|
|
"name": "request_node_red",
|
|
"function": "request_node_red",
|
|
"params": [
|
|
"user_name",
|
|
"token"
|
|
]
|
|
},
|
|
{
|
|
"id": 57,
|
|
"name": "request_devices",
|
|
"function": "request_devices",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"group_id",
|
|
"deployment_id",
|
|
"location",
|
|
"fresh"
|
|
]
|
|
},
|
|
{
|
|
"id": 58,
|
|
"name": "request_proximity",
|
|
"function": "request_proximity",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"time",
|
|
"deployment_id"
|
|
]
|
|
},
|
|
{
|
|
"id": 59,
|
|
"name": "request_single_radar_slice",
|
|
"function": "request_single_radar_slice",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"date",
|
|
"devices_list",
|
|
"deployment_id",
|
|
"sensor_index_list",
|
|
"ctrl_key_state",
|
|
"alt_key_state",
|
|
"radar_part",
|
|
"data_type",
|
|
"to_date"
|
|
]
|
|
},
|
|
{
|
|
"id": 60,
|
|
"name": "request_single_slice",
|
|
"function": "request_single_slice",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"date",
|
|
"devices_list",
|
|
"deployment_id",
|
|
"sensor_list",
|
|
"ctrl_key_state",
|
|
"alt_key_state",
|
|
"radar_part",
|
|
"time",
|
|
"data_type",
|
|
"to_date",
|
|
"radar_part"
|
|
]
|
|
},
|
|
{
|
|
"id": 61,
|
|
"name": "send_walarm",
|
|
"function": "send_walarm",
|
|
"params": [
|
|
"token",
|
|
"user_name",
|
|
"deployment_id",
|
|
"location",
|
|
"method",
|
|
"conditionType",
|
|
"content"
|
|
]
|
|
},
|
|
{
|
|
"id": 62,
|
|
"name": "set_deployment",
|
|
"function": "set_deployment",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"clientId",
|
|
"nonce",
|
|
"deployment",
|
|
"beneficiary_name",
|
|
"beneficiary_email",
|
|
"beneficiary_address",
|
|
"caretaker_username",
|
|
"caretaker_email",
|
|
"installer_id",
|
|
"address_city",
|
|
"address_zip",
|
|
"address_state",
|
|
"address_country",
|
|
"persons",
|
|
"gender",
|
|
"race",
|
|
"born",
|
|
"pets",
|
|
"wifis",
|
|
"lat",
|
|
"lng",
|
|
"time_zone_s"
|
|
]
|
|
},
|
|
{
|
|
"id": 63,
|
|
"name": "set_floor_layout",
|
|
"function": "set_floor_layout",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"layout",
|
|
"deployment_id"
|
|
]
|
|
},
|
|
{
|
|
"id": 64,
|
|
"name": "store_alarms",
|
|
"function": "store_alarms",
|
|
"params": [
|
|
"token",
|
|
"user_name",
|
|
"deployment_id",
|
|
"deployment_alarms",
|
|
"device_id",
|
|
"device_alarms"
|
|
]
|
|
},
|
|
{
|
|
"id": 65,
|
|
"name": "store_flow",
|
|
"function": "store_flow",
|
|
"params": [
|
|
"token",
|
|
"user_name",
|
|
"time",
|
|
"flow"
|
|
]
|
|
},
|
|
{
|
|
"id": 66,
|
|
"name": "submit_beneficiary",
|
|
"function": "beneficiary_form",
|
|
"params": [
|
|
"user_name",
|
|
"token",
|
|
"email",
|
|
"editing_user_id",
|
|
"new_user_name",
|
|
"first_name",
|
|
"last_name",
|
|
"address_street",
|
|
"address_city",
|
|
"address_zip",
|
|
"address_state",
|
|
"address_country",
|
|
"user_id",
|
|
"role_ids",
|
|
"phone_number",
|
|
"picture",
|
|
"key"
|
|
]
|
|
},
|
|
{
|
|
"id": 67,
|
|
"name": "submit_caretaker",
|
|
"function": "caretaker_form",
|
|
"params": [
|
|
"user_id",
|
|
"user_name",
|
|
"key",
|
|
"token",
|
|
"new_user_name",
|
|
"role_ids",
|
|
"access_to",
|
|
"email",
|
|
"first_name",
|
|
"last_name",
|
|
"address_street",
|
|
"address_city",
|
|
"address_zip",
|
|
"address_state",
|
|
"address_country",
|
|
"phone_number",
|
|
"picture"
|
|
]
|
|
},
|
|
{
|
|
"id": 68,
|
|
"name": "submit_mobile_message",
|
|
"function": "caretaker_form",
|
|
"params": [
|
|
"user_id",
|
|
"user_name",
|
|
"key",
|
|
"token",
|
|
"new_user_name",
|
|
"role_ids",
|
|
"access_to",
|
|
"email",
|
|
"first_name",
|
|
"last_name",
|
|
"address_street",
|
|
"address_city",
|
|
"address_zip",
|
|
"address_state",
|
|
"address_country",
|
|
"phone_number",
|
|
"picture"
|
|
]
|
|
},
|
|
{
|
|
"id": 69,
|
|
"name": "telnyx_webhook",
|
|
"function": "N/A",
|
|
"params": []
|
|
},
|
|
{
|
|
"id": 70,
|
|
"name": "voice_ask",
|
|
"function": "voice_ask",
|
|
"params": [
|
|
"clientId",
|
|
"user_name",
|
|
"token",
|
|
"question",
|
|
"deployment_id"
|
|
]
|
|
},
|
|
{
|
|
"id": 71,
|
|
"name": "WellNuo Portal",
|
|
"function": "N/A",
|
|
"params": []
|
|
}
|
|
] |