Files
sky_phone-sky-systems/sky_phone/source/server/public_api.lua
T
DerEchteAlec a9143b0fba ADD - add in-game phone administration and configuration (#25)
* ADD - build in-game admin command center

* ADD - open admin panel by command

* ENH - rebuild admin panel as standalone editor

* ENH - compact admin workspace navigation

* ENH - expand admin device controls

* ENH - refine admin panel navigation style

* ADD - add SQL phone configurator

* FIX - expose complete phone configuration

* FIX - make company jobs freely configurable

* FIX - align configurator tables to left

* ENH - organize configurator collection controls

* ENH - organize nested configurator sections

* ENH - add configurator field descriptions

* FIX - hide fixed configurator add controls

* ENH - refine configurator editing experience

* ENH - refine admin configurator controls

* FIX - apply configurator settings instantly

* FIX - close live activity command registration

---------

Co-authored-by: Leon.Schmidt <leonmauricewill15@gmail.com>
2026-08-22 03:26:52 +02:00

145 lines
5.0 KiB
Lua

local api_ready = false
local SERVER_CAPABILITIES = {
apiVersion = SkyPhonePublicApi.Version,
features = {
calls = {
audio = true,
company = true,
video = false,
},
customApps = {
enabled = Config.CustomApps.Enabled == true,
external = Config.CustomApps.Enabled == true
and Config.CustomApps.ExternalApps == true,
},
deviceDirectory = true,
notifications = {
customApps = Config.CustomApps.Enabled == true
and Config.CustomApps.ExternalApps == true,
system = false,
},
phoneNumberLookup = true,
},
ready = false,
side = "server",
}
local function refresh_configured_capabilities()
local enabled = Config.CustomApps.Enabled == true
local external = enabled and Config.CustomApps.ExternalApps == true
SERVER_CAPABILITIES.features.customApps.enabled = enabled
SERVER_CAPABILITIES.features.customApps.external = external
SERVER_CAPABILITIES.features.notifications.customApps = external
end
refresh_configured_capabilities()
AddEventHandler("sky_phone:configurator:serverUpdated", refresh_configured_capabilities)
local custom_app_api = SkyPhoneApps.ServerPublicApi
if type(custom_app_api) ~= "table" then
error("[sky_phone] Server public API initialized before the custom app policy API.")
end
local function get_api_capabilities()
local capabilities = SkyPhonePublicApi.Copy(SERVER_CAPABILITIES)
capabilities.ready = api_ready
return capabilities
end
local function is_api_ready()
return api_ready
end
local function invoke(service_name, method_name, ...)
if not api_ready then
return nil, "api_not_ready"
end
local service = _G[service_name]
local handler = type(service) == "table" and service[method_name] or nil
if type(handler) ~= "function" then
Bridge.Debug(
"error",
"[sky_phone] Public API service %s.%s is unavailable.",
service_name,
method_name
)
return nil, "api_not_ready"
end
return handler(...)
end
local function bind(service_name, method_name)
return function(...)
return invoke(service_name, method_name, ...)
end
end
exports("GetApiCapabilities", get_api_capabilities)
exports("IsApiReady", is_api_ready)
exports("GetEquippedPhoneNumber", bind("SkyPhone", "GetEquippedPhoneNumber"))
exports("GetSourceFromPhoneNumber", bind("SkyPhone", "GetSourceFromNumber"))
exports("GetOnlineDeviceBySource", bind("SkyPhoneDeviceDirectory", "GetOnlineBySource"))
exports(
"GetOnlineDeviceByPhoneNumber",
bind("SkyPhoneDeviceDirectory", "GetOnlineByPhoneNumber")
)
exports(
"GetOnlineDeviceByIdentifier",
bind("SkyPhoneDeviceDirectory", "GetOnlineByIdentifier")
)
exports("GetOnlineDeviceByImei", bind("SkyPhoneDeviceDirectory", "GetOnlineByImei"))
exports("GetStoredDeviceByImei", bind("SkyPhoneDeviceDirectory", "GetStoredDeviceByImei"))
exports(
"GetStoredDeviceByPhoneNumber",
bind("SkyPhoneDeviceDirectory", "GetStoredDeviceByPhoneNumber")
)
exports(
"GetStoredDeviceByIdentifier",
bind("SkyPhoneDeviceDirectory", "GetStoredDeviceByIdentifier")
)
exports(
"GetStoredSimByPhoneNumber",
bind("SkyPhoneDeviceDirectory", "GetStoredSimByPhoneNumber")
)
exports("GetActiveCallBySource", bind("SkyPhoneCalls", "GetForSource"))
exports("GetActiveCallById", bind("SkyPhoneCalls", "GetById"))
exports("IsPlayerInCall", bind("SkyPhoneCalls", "IsActiveForSource"))
exports("EndCallForSource", bind("SkyPhoneCalls", "EndForSource"))
exports("TerminateCallForSource", bind("SkyPhoneCalls", "TerminateForSource"))
exports("AddCustomAppPolicy", custom_app_api.AddCustomAppPolicy)
exports("AddCustomAppPolicyFromAdapter", custom_app_api.AddCustomAppPolicyFromAdapter)
exports("GetCustomAppCapabilities", custom_app_api.GetCustomAppCapabilities)
exports("GetCustomAppPolicy", custom_app_api.GetCustomAppPolicy)
exports("HasCustomAppPermission", custom_app_api.HasCustomAppPermission)
exports("RemoveCustomAppPolicy", custom_app_api.RemoveCustomAppPolicy)
exports("RemoveCustomAppPolicyFromAdapter", custom_app_api.RemoveCustomAppPolicyFromAdapter)
exports("SendAppMessage", custom_app_api.SendAppMessage)
exports("SendCustomAppMessage", custom_app_api.SendCustomAppMessage)
exports("SendCustomAppNotification", custom_app_api.SendCustomAppNotification)
exports("UpdateCustomAppPolicy", custom_app_api.UpdateCustomAppPolicy)
exports("UpdateCustomAppPolicyFromAdapter", custom_app_api.UpdateCustomAppPolicyFromAdapter)
Bridge.Database.AfterMigration("sky_phone", function()
local required_services = {
SkyPhone,
SkyPhoneCalls,
SkyPhoneDeviceDirectory,
SkyPhoneNotifications,
}
for index = 1, #required_services do
if type(required_services[index]) ~= "table" then
error("[sky_phone] Server public API initialized before its domain services.")
end
end
api_ready = true
TriggerEvent("sky_phone:server:apiReady", SkyPhonePublicApi.Version)
end)