mirror of
https://github.com/fluencelabs/dashboard
synced 2025-05-03 11:42:13 +00:00
trying to add services
This commit is contained in:
parent
c790075a0e
commit
dafa8a61e5
@ -4,11 +4,12 @@ service DashboardEvent("event"):
|
||||
collectPeerInfo(peer: PeerId, ident: Info, services: []Service, blueprints: []Blueprint, modules: []Module)
|
||||
collectServiceInterface(peer: PeerId, serviceId: string, interface: Interface)
|
||||
|
||||
-- func collectServiceInterfaces(peer: Peer, services: []Service):
|
||||
-- on peer:
|
||||
-- for srv <- services par:
|
||||
-- info <- Srv.get_interface(srv.id)
|
||||
-- DashboardEvent.collectServiceInterface(peer, service.id, info.Interface)
|
||||
func collectServiceInterfaces(peer: PeerId, services: []Service):
|
||||
on peer:
|
||||
for srv <- services par:
|
||||
info <- Srv.get_interface(srv.id)
|
||||
on %init_peer_id%:
|
||||
DashboardEvent.collectServiceInterface(peer, srv.id, info.interface)
|
||||
|
||||
func askAllAndSend(peer: PeerId):
|
||||
on peer:
|
||||
@ -17,7 +18,7 @@ func askAllAndSend(peer: PeerId):
|
||||
modules <- Dist.list_modules()
|
||||
services <- Srv.list()
|
||||
DashboardEvent.collectPeerInfo(peer, ident, services, blueprints, modules)
|
||||
-- collectServiceInterfaces(peer, services)
|
||||
collectServiceInterfaces(peer, services)
|
||||
|
||||
|
||||
func findAndAskNeighboursSchema(relayPeerId: PeerId, clientId: PeerId):
|
||||
|
@ -19,7 +19,7 @@ limitations under the License.
|
||||
import Browser exposing (Document)
|
||||
import Browser.Navigation as Navigation
|
||||
import Config exposing (Flags)
|
||||
import Dict
|
||||
import Dict exposing (Dict)
|
||||
import Model exposing (Model)
|
||||
import Msg exposing (Msg(..))
|
||||
import Route
|
||||
@ -56,6 +56,7 @@ init flags url key =
|
||||
, modules = Dict.empty
|
||||
, modulesByHash = Dict.empty
|
||||
, blueprints = Dict.empty
|
||||
, services = Dict.empty
|
||||
, toggledInterface = Nothing
|
||||
, knownPeers = flags.knownPeers
|
||||
, isInitialized = False
|
||||
|
@ -55,6 +55,7 @@ type alias Model =
|
||||
, modules : Dict String Module
|
||||
, modulesByHash : Dict String Module
|
||||
, blueprints : Dict String Blueprint
|
||||
, services : Dict String Service
|
||||
, toggledInterface : Maybe String
|
||||
, knownPeers : List String
|
||||
, isInitialized : Bool
|
||||
|
35
src/Port.elm
35
src/Port.elm
@ -5,13 +5,20 @@ import Dict exposing (Dict)
|
||||
import Json.Encode exposing (Value)
|
||||
import Modules.Model exposing (Module)
|
||||
import Nodes.Model exposing (Identify)
|
||||
import Service.Model exposing (Service)
|
||||
import Service.Model exposing (Interface, Service)
|
||||
|
||||
|
||||
type alias ServiceInfo =
|
||||
{ id : String
|
||||
, blueprint_id : String
|
||||
, owner_id : String
|
||||
}
|
||||
|
||||
|
||||
type alias CollectPeerInfo =
|
||||
{ peerId : String
|
||||
, identify : Maybe Identify
|
||||
, services : Maybe (List Service)
|
||||
, services : Maybe (List ServiceInfo)
|
||||
, modules : Maybe (List Module)
|
||||
, blueprints : Maybe (List Blueprint)
|
||||
}
|
||||
@ -20,30 +27,10 @@ type alias CollectPeerInfo =
|
||||
port collectPeerInfo : (CollectPeerInfo -> msg) -> Sub msg
|
||||
|
||||
|
||||
type alias FunctionSignature =
|
||||
{ arguments : List String
|
||||
, name : String
|
||||
, output_types : List String
|
||||
}
|
||||
|
||||
|
||||
type alias RecordType =
|
||||
{ fields : List String
|
||||
, id : Int
|
||||
, name : String
|
||||
}
|
||||
|
||||
|
||||
type alias ServiceInterface =
|
||||
{ function_signatures : List FunctionSignature
|
||||
, record_types : List RecordType
|
||||
}
|
||||
|
||||
|
||||
type alias CollectServiceInterface =
|
||||
{ blueprint_id : String
|
||||
{ peer_id : String
|
||||
, service_id : String
|
||||
, interface : ServiceInterface
|
||||
, interface : Interface
|
||||
}
|
||||
|
||||
|
||||
|
@ -25,4 +25,10 @@ type alias Service =
|
||||
{ id : String
|
||||
, blueprint_id : String
|
||||
, owner_id : String
|
||||
, interface : Maybe Interface
|
||||
}
|
||||
|
||||
|
||||
setInterface : Interface -> Service -> Service
|
||||
setInterface interface service =
|
||||
{ service | interface = Just interface }
|
||||
|
@ -27,7 +27,7 @@ import Msg exposing (..)
|
||||
import Nodes.Model exposing (Identify)
|
||||
import Port exposing (getAll)
|
||||
import Route exposing (getAllCmd)
|
||||
import Service.Model exposing (Service)
|
||||
import Service.Model exposing (Service, setInterface)
|
||||
import Url
|
||||
|
||||
|
||||
@ -55,13 +55,34 @@ update msg model =
|
||||
Browser.External href ->
|
||||
( model, Nav.load href )
|
||||
|
||||
CollectServiceInterface { blueprint_id, service_id, interface } ->
|
||||
( model, Cmd.none )
|
||||
CollectServiceInterface { peer_id, service_id, interface } ->
|
||||
let
|
||||
service =
|
||||
Dict.get service_id model.services
|
||||
|
||||
updatedServices =
|
||||
Dict.update service_id (Maybe.map (setInterface interface)) model.services
|
||||
|
||||
newModel =
|
||||
{ model | services = updatedServices }
|
||||
in
|
||||
( newModel, Cmd.none )
|
||||
|
||||
CollectPeerInfo { peerId, identify, services, modules, blueprints } ->
|
||||
let
|
||||
fromServiceInfo =
|
||||
\si ->
|
||||
{ id = si.id
|
||||
, blueprint_id = si.blueprint_id
|
||||
, owner_id = si.owner_id
|
||||
, interface = Nothing
|
||||
}
|
||||
|
||||
servicesCorrectType =
|
||||
services |> Maybe.map (List.map fromServiceInfo)
|
||||
|
||||
updated =
|
||||
Maybe.map4 (updateModel model peerId) identify services modules blueprints
|
||||
Maybe.map4 (updateModel model peerId) identify servicesCorrectType modules blueprints
|
||||
|
||||
updatedModel =
|
||||
withDefault model updated
|
||||
@ -98,6 +119,9 @@ updateModel model peer identify services modules blueprints =
|
||||
data =
|
||||
Maybe.withDefault emptyPeerData (Dict.get peer model.discoveredPeers)
|
||||
|
||||
servicesDict =
|
||||
services |> List.map (\m -> ( m.id, m )) |> Dict.fromList
|
||||
|
||||
moduleDict =
|
||||
modules |> List.map (\m -> ( m.name, m )) |> Dict.fromList
|
||||
|
||||
@ -117,9 +141,15 @@ updateModel model peer identify services modules blueprints =
|
||||
Dict.union blueprintDict model.blueprints
|
||||
|
||||
newData =
|
||||
{ data | identify = identify, services = services, modules = Dict.keys moduleDict, blueprints = Dict.keys blueprintDict }
|
||||
{ data | identify = identify, modules = Dict.keys moduleDict, blueprints = Dict.keys blueprintDict }
|
||||
|
||||
updated =
|
||||
Dict.insert peer newData model.discoveredPeers
|
||||
in
|
||||
{ model | discoveredPeers = updated, modules = updatedModules, modulesByHash = updatedModulesByHash, blueprints = updatedBlueprints }
|
||||
{ model
|
||||
| discoveredPeers = updated
|
||||
, services = servicesDict
|
||||
, modules = updatedModules
|
||||
, modulesByHash = updatedModulesByHash
|
||||
, blueprints = updatedBlueprints
|
||||
}
|
||||
|
295
src/_aqua/app.js
295
src/_aqua/app.js
@ -10,6 +10,92 @@ import { RequestFlowBuilder } from '@fluencelabs/fluence/dist/api.unstable';
|
||||
|
||||
|
||||
|
||||
export async function collectServiceInterfaces(client, peer, services) {
|
||||
let request;
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
request = new RequestFlowBuilder()
|
||||
.disableInjections()
|
||||
.withRawScript(
|
||||
`
|
||||
(xor
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
||||
(call %init_peer_id% ("getDataSrv" "peer") [] peer)
|
||||
)
|
||||
(call %init_peer_id% ("getDataSrv" "services") [] services)
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(xor
|
||||
(fold services srv
|
||||
(par
|
||||
(seq
|
||||
(call peer ("srv" "get_interface") [srv.$.id!] info)
|
||||
(xor
|
||||
(call %init_peer_id% ("event" "collectServiceInterface") [peer srv.$.id! info.$.interface!])
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(next srv)
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(call %init_peer_id% ("op" "identity") [])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
|
||||
)
|
||||
)
|
||||
|
||||
`,
|
||||
)
|
||||
.configHandler((h) => {
|
||||
h.on('getDataSrv', '-relay-', () => {
|
||||
return client.relayPeerId;
|
||||
});
|
||||
h.on('getDataSrv', 'peer', () => {return peer;});
|
||||
h.on('getDataSrv', 'services', () => {return services;});
|
||||
|
||||
h.onEvent('errorHandlingSrv', 'error', (args) => {
|
||||
// assuming error is the single argument
|
||||
const [err] = args;
|
||||
reject(err);
|
||||
});
|
||||
})
|
||||
.handleScriptError(reject)
|
||||
.handleTimeout(() => {
|
||||
reject('Request timed out for collectServiceInterfaces');
|
||||
})
|
||||
.build();
|
||||
});
|
||||
await client.initiateFlow(request);
|
||||
return Promise.race([promise, Promise.resolve()]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
export async function askAllAndSend(client, peer) {
|
||||
let request;
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
@ -20,6 +106,8 @@ export async function askAllAndSend(client, peer) {
|
||||
(xor
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
@ -49,7 +137,46 @@ export async function askAllAndSend(client, peer) {
|
||||
)
|
||||
(call %init_peer_id% ("event" "collectPeerInfo") [peer ident services blueprints modules])
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(xor
|
||||
(fold services srv
|
||||
(par
|
||||
(seq
|
||||
(call peer ("srv" "get_interface") [srv.$.id!] info)
|
||||
(xor
|
||||
(call %init_peer_id% ("event" "collectServiceInterface") [peer srv.$.id! info.$.interface!])
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(next srv)
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(call %init_peer_id% ("op" "identity") [])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
|
||||
)
|
||||
)
|
||||
|
||||
`,
|
||||
@ -106,6 +233,8 @@ export async function findAndAskNeighboursSchema(client, relayPeerId, clientId)
|
||||
(seq
|
||||
(call n ("kad" "neighborhood") [clientId false] neighbors2)
|
||||
(fold neighbors2 n2
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
@ -129,13 +258,46 @@ export async function findAndAskNeighboursSchema(client, relayPeerId, clientId)
|
||||
)
|
||||
(call n ("event" "collectPeerInfo") [n2 ident services blueprints modules])
|
||||
)
|
||||
(xor
|
||||
(fold services srv
|
||||
(par
|
||||
(seq
|
||||
(call n2 ("srv" "get_interface") [srv.$.id!] info)
|
||||
(xor
|
||||
(call %init_peer_id% ("event" "collectServiceInterface") [n2 srv.$.id! info.$.interface!])
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(next srv)
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(call %init_peer_id% ("op" "identity") [])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
|
||||
)
|
||||
)
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(next n2)
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
|
||||
)
|
||||
)
|
||||
(seq
|
||||
@ -154,7 +316,7 @@ export async function findAndAskNeighboursSchema(client, relayPeerId, clientId)
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5])
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
@ -162,7 +324,7 @@ export async function findAndAskNeighboursSchema(client, relayPeerId, clientId)
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 6])
|
||||
)
|
||||
)
|
||||
|
||||
@ -212,6 +374,8 @@ export async function getAll(client, relayPeerId, knownPeers) {
|
||||
(call %init_peer_id% ("getDataSrv" "knownPeers") [] knownPeers)
|
||||
)
|
||||
(par
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
@ -237,8 +401,47 @@ export async function getAll(client, relayPeerId, knownPeers) {
|
||||
)
|
||||
(call %init_peer_id% ("event" "collectPeerInfo") [relayPeerId ident services blueprints modules])
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(xor
|
||||
(fold services srv
|
||||
(par
|
||||
(seq
|
||||
(call relayPeerId ("srv" "get_interface") [srv.$.id!] info)
|
||||
(xor
|
||||
(call %init_peer_id% ("event" "collectServiceInterface") [relayPeerId srv.$.id! info.$.interface!])
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(next srv)
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(call %init_peer_id% ("op" "identity") [])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(fold knownPeers peer
|
||||
(par
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
@ -256,7 +459,7 @@ export async function getAll(client, relayPeerId, knownPeers) {
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -264,6 +467,41 @@ export async function getAll(client, relayPeerId, knownPeers) {
|
||||
)
|
||||
(call %init_peer_id% ("event" "collectPeerInfo") [peer ident0 services0 blueprints0 modules0])
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(xor
|
||||
(fold services0 srv0
|
||||
(par
|
||||
(seq
|
||||
(call peer ("srv" "get_interface") [srv0.$.id!] info0)
|
||||
(xor
|
||||
(call %init_peer_id% ("event" "collectServiceInterface") [peer srv0.$.id! info0.$.interface!])
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(next srv0)
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(call %init_peer_id% ("op" "identity") [])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 6])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(next peer)
|
||||
)
|
||||
)
|
||||
@ -271,6 +509,12 @@ export async function getAll(client, relayPeerId, knownPeers) {
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(call %init_peer_id% ("op" "identity") [])
|
||||
)
|
||||
)
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(xor
|
||||
(seq
|
||||
(call relayPeerId ("kad" "neighborhood") [%init_peer_id% false] neighbors)
|
||||
@ -280,6 +524,8 @@ export async function getAll(client, relayPeerId, knownPeers) {
|
||||
(seq
|
||||
(call n ("kad" "neighborhood") [%init_peer_id% false] neighbors2)
|
||||
(fold neighbors2 n2
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
@ -296,20 +542,53 @@ export async function getAll(client, relayPeerId, knownPeers) {
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 7])
|
||||
)
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(call n ("event" "collectPeerInfo") [n2 ident1 services1 blueprints1 modules1])
|
||||
)
|
||||
(xor
|
||||
(fold services1 srv1
|
||||
(par
|
||||
(seq
|
||||
(call n2 ("srv" "get_interface") [srv1.$.id!] info1)
|
||||
(xor
|
||||
(call %init_peer_id% ("event" "collectServiceInterface") [n2 srv1.$.id! info1.$.interface!])
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 8])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(next srv1)
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(call %init_peer_id% ("op" "identity") [])
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 9])
|
||||
)
|
||||
)
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
(next n2)
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 10])
|
||||
)
|
||||
)
|
||||
(seq
|
||||
@ -328,7 +607,7 @@ export async function getAll(client, relayPeerId, knownPeers) {
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 11])
|
||||
)
|
||||
(call -relay- ("op" "identity") [])
|
||||
)
|
||||
@ -336,7 +615,7 @@ export async function getAll(client, relayPeerId, knownPeers) {
|
||||
)
|
||||
(seq
|
||||
(call -relay- ("op" "identity") [])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 6])
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 12])
|
||||
)
|
||||
)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user