From: aravind.est Date: Fri, 27 Sep 2024 10:22:16 +0000 (+0100) Subject: NONRTRIC SME fix servicemanager sonar X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;ds=sidebyside;h=HEAD;hp=c9c21982005e56bc3cee0e764d8ee6e5a4cc102b;p=nonrtric%2Fplt%2Fsme.git NONRTRIC SME fix servicemanager sonar Servicemanager sonar job missing the go.mod and it is fixed. Issue-ID: NONRTRIC-1033 Change-Id: I86b3b74c1a34a9b2b7cc263ab545b939012350f1 Signed-off-by: aravind.est --- diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 95da239..3fd1760 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,5 +1,6 @@ # ============LICENSE_START=============================================== # Copyright (C) 2022-2023 Nordix Foundation. All rights reserved. +# Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved. # ======================================================================== # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.releases/container-release-capif.yaml b/.releases/container-release-capif.yaml new file mode 100644 index 0000000..0cf91e5 --- /dev/null +++ b/.releases/container-release-capif.yaml @@ -0,0 +1,11 @@ +--- +distribution_type: container +container_release_tag: 1.3.1 +tag_release: false +container_pull_registry: nexus3.o-ran-sc.org:10004 +container_push_registry: nexus3.o-ran-sc.org:10002 +project: nonrtric +ref: 36718abc0fb386770a182c2c01358e1ce3621c75 +containers: + - name: nonrtric-plt-capifcore + version: 1.3.1 diff --git a/.releases/container-release-sm.yaml b/.releases/container-release-sm.yaml new file mode 100644 index 0000000..f46c63f --- /dev/null +++ b/.releases/container-release-sm.yaml @@ -0,0 +1,10 @@ +--- +distribution_type: container +container_release_tag: 0.1.2 +container_pull_registry: nexus3.o-ran-sc.org:10004 +container_push_registry: nexus3.o-ran-sc.org:10002 +project: nonrtric +ref: 36718abc0fb386770a182c2c01358e1ce3621c75 +containers: + - name: nonrtric-plt-servicemanager + version: 0.1.2 diff --git a/capifcore/build-capifcore-ubuntu.sh b/capifcore/build-capifcore-ubuntu.sh index 9bac724..934341f 100755 --- a/capifcore/build-capifcore-ubuntu.sh +++ b/capifcore/build-capifcore-ubuntu.sh @@ -1,7 +1,8 @@ #!/bin/bash ############################################################################## # -# Copyright (C) 2022: Nordix Foundation +# Copyright (C) 2022-2023: Nordix Foundation +# Copyright (C) 2023-2024: OpenInfra Foundation Europe # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -28,7 +29,7 @@ go version cd capifcore/ # install the go coverage tool helper -go install github.com/ory/go-acc +go install github.com/ory/go-acc@v0.2.8 go get github.com/stretchr/testify/mock@v1.7.1 diff --git a/capifcore/container-tag.yaml b/capifcore/container-tag.yaml index f17eeca..9b9cc34 100644 --- a/capifcore/container-tag.yaml +++ b/capifcore/container-tag.yaml @@ -20,4 +20,4 @@ # By default this file is in the docker build directory, # but the location can configured in the JJB template. --- -tag: 1.3.1 +tag: 1.4.0 diff --git a/capifcore/internal/publishservice/publishservice.go b/capifcore/internal/publishservice/publishservice.go index 54a7f67..a267acf 100644 --- a/capifcore/internal/publishservice/publishservice.go +++ b/capifcore/internal/publishservice/publishservice.go @@ -121,16 +121,28 @@ func join(a, b []publishapi.ServiceAPIDescription) []publishapi.ServiceAPIDescri // Retrieve all published APIs. func (ps *PublishService) GetApfIdServiceApis(ctx echo.Context, apfId string) error { - if !ps.serviceRegister.IsPublishingFunctionRegistered(apfId) { - errorMsg := fmt.Sprintf("Unable to get the service due to %s api is only available for publishers", apfId) - return sendCoreError(ctx, http.StatusNotFound, errorMsg) - } + ps.lock.Lock() + serviceDescriptions, ok := ps.publishedServices[apfId] + ps.lock.Unlock() - serviceDescriptions := ps.publishedServices[apfId] - err := ctx.JSON(http.StatusOK, serviceDescriptions) - if err != nil { - // Something really bad happened, tell Echo that our handler failed - return err + if ok { + err := ctx.JSON(http.StatusOK, serviceDescriptions) + if err != nil { + // Something really bad happened, tell Echo that our handler failed + return err + } + } else { + if !ps.serviceRegister.IsPublishingFunctionRegistered(apfId) { + errorMsg := fmt.Sprintf("Unable to get the service due to %s api is only available for publishers", apfId) + return sendCoreError(ctx, http.StatusNotFound, errorMsg) + } + + serviceDescriptions = []publishapi.ServiceAPIDescription{} + err := ctx.JSON(http.StatusOK, serviceDescriptions) + if err != nil { + // Something really bad happened, tell Echo that our handler failed + return err + } } return nil } diff --git a/docs/api-docs.rst b/docs/api-docs.rst new file mode 100644 index 0000000..7c74fff --- /dev/null +++ b/docs/api-docs.rst @@ -0,0 +1,29 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 +.. Copyright (C) 2024 OpenInfra Foundation Europe + +.. _api_docs: + +======== +API Docs +======== + +To view the Open API specs common to Service Manager and CAPIF, please see the following. + +.. raw:: html + + + +To view the Open API specs supported by CAPIF only, please see below. + +.. raw:: html + + diff --git a/docs/developer-guide.rst b/docs/developer-guide.rst index b83b074..c89f019 100644 --- a/docs/developer-guide.rst +++ b/docs/developer-guide.rst @@ -6,24 +6,6 @@ Developer Guide =============== -This document provides a quick start for developers of the Non-RT RIC Service Management & Exposure. Additional developer guides are available on the `O-RAN SC NONRTRIC Developer wiki `_. +This document provides a quick start for developers of the Non-RT RIC Service Management & Exposure. Additional developer guides are available on the `O-RAN SC NONRTRIC Developer wiki `_. -To build and run the Service Manager implementation, see the README.md file in the "servicemanager" folder. To build and run the CAPIF Core implementation, see the README.md file in the "capifcore" folder. To view the Open API specs common to Service Manager and CAPIF, please see the following. - -.. raw:: html - - - -To view the Open API specs supported by CAPIF only, please see below. - -.. raw:: html - - +To build and run the Service Manager implementation, see the README.md file in the "servicemanager" folder. To build and run the CAPIF Core implementation, see the README.md file in the "capifcore" folder. diff --git a/docs/index.rst b/docs/index.rst index 1a586d3..9bd14e1 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,6 +1,7 @@ .. This work is licensed under a Creative Commons Attribution 4.0 International License. .. SPDX-License-Identifier: CC-BY-4.0 .. Copyright (C) 2022-2023 Nordix +.. Copyright (C) 2024 OpenInfra Foundation Europe Non-RT RIC Service Management and Exposure (SME) ================================================ @@ -12,3 +13,4 @@ Non-RT RIC Service Management and Exposure (SME) ./overview.rst ./developer-guide.rst ./release-notes.rst + ./api-docs.rst diff --git a/docs/openapi/Discover_Service.html b/docs/openapi/Discover_Service.html index d3ce2b2..e6becdb 100644 --- a/docs/openapi/Discover_Service.html +++ b/docs/openapi/Discover_Service.html @@ -1611,6 +1611,78 @@ ul.nav-tabs { "description" : "Represents the API version information." }; + defs["Altitude"] = { + "maximum" : 32767, + "minimum" : -32767, + "type" : "number", + "description" : "Indicates value of altitude.", + "format" : "double" +}; + defs["Angle"] = { + "maximum" : 360, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of angle." +}; + defs["Confidence"] = { + "maximum" : 100, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of confidence." +}; + defs["DateTime"] = { + "type" : "string", + "description" : "string with format \"date-time\" as defined in OpenAPI.", + "format" : "date-time" +}; + defs["Float"] = { + "type" : "number", + "description" : "string with format 'float' as defined in OpenAPI.", + "format" : "float" +}; + defs["InnerRadius"] = { + "maximum" : 327675, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of the inner radius.", + "format" : "int32" +}; + defs["Ipv4Addr"] = { + "type" : "string", + "description" : "string identifying a Ipv4 address formatted in the \"dotted decimal\" notation as defined in IETF RFC 1166." +}; + defs["Ipv6Addr"] = { + "type" : "string", + "description" : "string identifying a Ipv6 address formatted according to clause 4 in IETF RFC 5952. The mixed Ipv4 Ipv6 notation according to clause 5 of IETF RFC 5952 shall not be used." +}; + defs["Orientation"] = { + "maximum" : 180, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of orientation angle." +}; + defs["Port"] = { + "maximum" : 65535, + "minimum" : 0, + "type" : "integer", + "description" : "Unsigned integer with valid values between 0 and 65535." +}; + defs["SupportedFeatures"] = { + "pattern" : "^[A-Fa-f0-9]*$", + "type" : "string", + "description" : "A string used to indicate the features supported by an API that is used as defined in clause 6.6 in 3GPP TS 29.500. The string shall contain a bitmask indicating supported features in hexadecimal representation Each character in the string shall take a value of \"0\" to \"9\", \"a\" to \"f\" or \"A\" to \"F\" and shall represent the support of 4 features as described in table 5.2.2-3. The most significant character representing the highest-numbered features shall appear first in the string, and the character representing features 1 to 4 shall appear last in the string. The list of features and their numbering (starting with 1) are defined separately for each API. If the string contains a lower number of characters than there are defined features for an API, all features that would be represented by characters that are not present in the string are not supported.\n" +}; + defs["Uncertainty"] = { + "minimum" : 0, + "type" : "number", + "description" : "Indicates value of uncertainty.", + "format" : "float" +}; + defs["Uri"] = { + "type" : "string", + "description" : "string providing an URI formatted according to IETF RFC 3986." +}; + var errs = {}; @@ -2337,11 +2409,13 @@ Features supported by the discovered service API indicated by api-name parameter } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2411,11 +2485,13 @@ Features supported by the discovered service API indicated by api-name parameter } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2501,11 +2577,13 @@ Features supported by the discovered service API indicated by api-name parameter } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2591,11 +2669,13 @@ Features supported by the discovered service API indicated by api-name parameter } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2665,11 +2745,13 @@ Features supported by the discovered service API indicated by api-name parameter } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2739,11 +2821,13 @@ Features supported by the discovered service API indicated by api-name parameter } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2813,11 +2897,13 @@ Features supported by the discovered service API indicated by api-name parameter } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2887,11 +2973,13 @@ Features supported by the discovered service API indicated by api-name parameter } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2961,11 +3049,13 @@ Features supported by the discovered service API indicated by api-name parameter } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3035,11 +3125,13 @@ Features supported by the discovered service API indicated by api-name parameter } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3109,11 +3201,13 @@ Features supported by the discovered service API indicated by api-name parameter } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3183,11 +3277,13 @@ Features supported by the discovered service API indicated by api-name parameter } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3245,11 +3341,13 @@ Features supported by the discovered service API indicated by api-name parameter } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4387,7 +4485,7 @@ var JSONSchemaView = (function () { // Determine if a schema is an array this.isArray = !this.isAny && this.schema && this.schema.type === 'array'; - this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneof || this.schema.allOf); + this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneOf || this.schema.allOf); // Determine if a schema is a primitive this.isPrimitive = !this.isAny && !this.isArray && !this.isObject; diff --git a/docs/openapi/Events.html b/docs/openapi/Events.html index e024966..752aa9c 100644 --- a/docs/openapi/Events.html +++ b/docs/openapi/Events.html @@ -2015,6 +2015,113 @@ ul.nav-tabs { "description" : "Represents the configuration information for the delivery of notifications over Websockets." }; + defs["Altitude"] = { + "maximum" : 32767, + "minimum" : -32767, + "type" : "number", + "description" : "Indicates value of altitude.", + "format" : "double" +}; + defs["Angle"] = { + "maximum" : 360, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of angle." +}; + defs["Confidence"] = { + "maximum" : 100, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of confidence." +}; + defs["DateTime"] = { + "type" : "string", + "description" : "string with format \"date-time\" as defined in OpenAPI.", + "format" : "date-time" +}; + defs["DateTime_1"] = { + "type" : "string", + "description" : "string with format 'date-time' as defined in OpenAPI.", + "format" : "date-time" +}; + defs["DurationMs"] = { + "minimum" : 0, + "type" : "integer", + "description" : "Unsigned integer identifying a period of time in units of milliseconds." +}; + defs["DurationSec"] = { + "type" : "integer", + "description" : "indicating a time in seconds." +}; + defs["Float"] = { + "type" : "number", + "description" : "string with format 'float' as defined in OpenAPI.", + "format" : "float" +}; + defs["InnerRadius"] = { + "maximum" : 327675, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of the inner radius.", + "format" : "int32" +}; + defs["Ipv4Addr"] = { + "type" : "string", + "description" : "string identifying a Ipv4 address formatted in the \"dotted decimal\" notation as defined in IETF RFC 1166." +}; + defs["Ipv4Addr_1"] = { + "pattern" : "^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$", + "type" : "string", + "description" : "String identifying a IPv4 address formatted in the 'dotted decimal' notation as defined in RFC 1166.\n", + "example" : "198.51.100.1" +}; + defs["Ipv6Addr"] = { + "type" : "string", + "description" : "string identifying a Ipv6 address formatted according to clause 4 in IETF RFC 5952. The mixed Ipv4 Ipv6 notation according to clause 5 of IETF RFC 5952 shall not be used." +}; + defs["Link"] = { + "type" : "string", + "description" : "string formatted according to IETF RFC 3986 identifying a referenced resource." +}; + defs["Orientation"] = { + "maximum" : 180, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of orientation angle." +}; + defs["Port"] = { + "maximum" : 65535, + "minimum" : 0, + "type" : "integer", + "description" : "Unsigned integer with valid values between 0 and 65535." +}; + defs["SamplingRatio"] = { + "maximum" : 100, + "minimum" : 1, + "type" : "integer", + "description" : "Unsigned integer indicating Sampling Ratio (see clauses 4.15.1 of 3GPP TS 23.502), expressed in percent. \n" +}; + defs["SupportedFeatures"] = { + "pattern" : "^[A-Fa-f0-9]*$", + "type" : "string", + "description" : "A string used to indicate the features supported by an API that is used as defined in clause 6.6 in 3GPP TS 29.500. The string shall contain a bitmask indicating supported features in hexadecimal representation Each character in the string shall take a value of \"0\" to \"9\", \"a\" to \"f\" or \"A\" to \"F\" and shall represent the support of 4 features as described in table 5.2.2-3. The most significant character representing the highest-numbered features shall appear first in the string, and the character representing features 1 to 4 shall appear last in the string. The list of features and their numbering (starting with 1) are defined separately for each API. If the string contains a lower number of characters than there are defined features for an API, all features that would be represented by characters that are not present in the string are not supported.\n" +}; + defs["Uinteger"] = { + "minimum" : 0, + "type" : "integer", + "description" : "Unsigned Integer, i.e. only value 0 and integers above 0 are permissible." +}; + defs["Uncertainty"] = { + "minimum" : 0, + "type" : "number", + "description" : "Indicates value of uncertainty.", + "format" : "float" +}; + defs["Uri"] = { + "type" : "string", + "description" : "string providing an URI formatted according to IETF RFC 3986." +}; + var errs = {}; @@ -2116,7 +2223,9 @@ All rights reserved. "supportedFeatures" : "supportedFeatures", "eventReq" : { "grpRepTime" : 0, - "partitionCriteria" : [ null, null ], + "notifMethod" : "PERIODIC", + "partitionCriteria" : [ "TAC", "TAC" ], + "notifFlag" : "ACTIVATE", "monDur" : "2000-01-23T04:56:07.000+00:00", "immRep" : true, "maxReportNbr" : 0, @@ -2127,7 +2236,7 @@ All rights reserved. "requestWebsocketUri" : true, "websocketUri" : "websocketUri" }, - "events" : [ null, null ], + "events" : [ "SERVICE_API_AVAILABLE", "SERVICE_API_AVAILABLE" ], "requestTestNotification" : true }' @@ -2415,6 +2524,8 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); + } else if (schema.items != null && schema.items.$ref != null) { + schema.items = defsParser.$refs.get(schema.items.$ref); } else { schemaWrapper.definitions = Object.assign({}, defs); $RefParser.dereference(schemaWrapper).catch(function(err) { @@ -2500,11 +2611,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2590,11 +2703,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2664,11 +2779,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2738,11 +2855,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2812,11 +2931,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2886,11 +3007,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2960,11 +3083,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3034,11 +3159,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3108,11 +3235,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3182,11 +3311,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3256,11 +3387,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3318,11 +3451,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3696,11 +3831,13 @@ Identifier of an individual Events Subscription } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3770,11 +3907,13 @@ Identifier of an individual Events Subscription } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3860,11 +3999,13 @@ Identifier of an individual Events Subscription } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3950,11 +4091,13 @@ Identifier of an individual Events Subscription } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4024,11 +4167,13 @@ Identifier of an individual Events Subscription } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4098,11 +4243,13 @@ Identifier of an individual Events Subscription } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4172,11 +4319,13 @@ Identifier of an individual Events Subscription } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4246,11 +4395,13 @@ Identifier of an individual Events Subscription } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4320,11 +4471,13 @@ Identifier of an individual Events Subscription } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4394,11 +4547,13 @@ Identifier of an individual Events Subscription } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4456,11 +4611,13 @@ Identifier of an individual Events Subscription } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5598,7 +5755,7 @@ var JSONSchemaView = (function () { // Determine if a schema is an array this.isArray = !this.isAny && this.schema && this.schema.type === 'array'; - this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneof || this.schema.allOf); + this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneOf || this.schema.allOf); // Determine if a schema is a primitive this.isPrimitive = !this.isAny && !this.isArray && !this.isObject; diff --git a/docs/openapi/Invoker_Management.html b/docs/openapi/Invoker_Management.html index bad6278..f87e07a 100644 --- a/docs/openapi/Invoker_Management.html +++ b/docs/openapi/Invoker_Management.html @@ -1703,6 +1703,82 @@ ul.nav-tabs { "description" : "Represents the configuration information for the delivery of notifications over Websockets." }; + defs["Altitude"] = { + "maximum" : 32767, + "minimum" : -32767, + "type" : "number", + "description" : "Indicates value of altitude.", + "format" : "double" +}; + defs["Angle"] = { + "maximum" : 360, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of angle." +}; + defs["Confidence"] = { + "maximum" : 100, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of confidence." +}; + defs["DateTime"] = { + "type" : "string", + "description" : "string with format \"date-time\" as defined in OpenAPI.", + "format" : "date-time" +}; + defs["Float"] = { + "type" : "number", + "description" : "string with format 'float' as defined in OpenAPI.", + "format" : "float" +}; + defs["InnerRadius"] = { + "maximum" : 327675, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of the inner radius.", + "format" : "int32" +}; + defs["Ipv4Addr"] = { + "type" : "string", + "description" : "string identifying a Ipv4 address formatted in the \"dotted decimal\" notation as defined in IETF RFC 1166." +}; + defs["Ipv6Addr"] = { + "type" : "string", + "description" : "string identifying a Ipv6 address formatted according to clause 4 in IETF RFC 5952. The mixed Ipv4 Ipv6 notation according to clause 5 of IETF RFC 5952 shall not be used." +}; + defs["Link"] = { + "type" : "string", + "description" : "string formatted according to IETF RFC 3986 identifying a referenced resource." +}; + defs["Orientation"] = { + "maximum" : 180, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of orientation angle." +}; + defs["Port"] = { + "maximum" : 65535, + "minimum" : 0, + "type" : "integer", + "description" : "Unsigned integer with valid values between 0 and 65535." +}; + defs["SupportedFeatures"] = { + "pattern" : "^[A-Fa-f0-9]*$", + "type" : "string", + "description" : "A string used to indicate the features supported by an API that is used as defined in clause 6.6 in 3GPP TS 29.500. The string shall contain a bitmask indicating supported features in hexadecimal representation Each character in the string shall take a value of \"0\" to \"9\", \"a\" to \"f\" or \"A\" to \"F\" and shall represent the support of 4 features as described in table 5.2.2-3. The most significant character representing the highest-numbered features shall appear first in the string, and the character representing features 1 to 4 shall appear last in the string. The list of features and their numbering (starting with 1) are defined separately for each API. If the string contains a lower number of characters than there are defined features for an API, all features that would be represented by characters that are not present in the string are not supported.\n" +}; + defs["Uncertainty"] = { + "minimum" : 0, + "type" : "number", + "description" : "Indicates value of uncertainty.", + "format" : "float" +}; + defs["Uri"] = { + "type" : "string", + "description" : "string providing an URI formatted according to IETF RFC 3986." +}; + var errs = {}; @@ -2074,11 +2150,13 @@ String identifying an individual on-boarded API invoker resource } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2148,11 +2226,13 @@ String identifying an individual on-boarded API invoker resource } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2238,11 +2318,13 @@ String identifying an individual on-boarded API invoker resource } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2328,11 +2410,13 @@ String identifying an individual on-boarded API invoker resource } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2402,11 +2486,13 @@ String identifying an individual on-boarded API invoker resource } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2476,11 +2562,13 @@ String identifying an individual on-boarded API invoker resource } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2550,11 +2638,13 @@ String identifying an individual on-boarded API invoker resource } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2624,11 +2714,13 @@ String identifying an individual on-boarded API invoker resource } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2698,11 +2790,13 @@ String identifying an individual on-boarded API invoker resource } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2772,11 +2866,13 @@ String identifying an individual on-boarded API invoker resource } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2834,11 +2930,13 @@ String identifying an individual on-boarded API invoker resource } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2927,15 +3025,18 @@ String identifying an individual on-boarded API invoker resource "description" : "description", "apiSuppFeats" : "apiSuppFeats", "aefProfiles" : [ { + "protocol" : "HTTP_1_1", "securityMethods" : [ null, null ], "versions" : [ { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -2956,11 +3057,13 @@ String identifying an individual on-boarded API invoker resource }, { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -2979,10 +3082,12 @@ String identifying an individual on-boarded API invoker resource } ], "expiry" : "2000-01-23T04:56:07.000+00:00" } ], + "dataFormat" : "JSON", "domainName" : "domainName", "aefLocation" : { "dcId" : "dcId", "geoArea" : { + "shape" : "POINT", "point" : { "lon" : 36.988422590534526, "lat" : -75.5850925717018 @@ -3028,25 +3133,28 @@ String identifying an individual on-boarded API invoker resource "aefId" : "aefId", "interfaceDescriptions" : [ { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" }, { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" } ] }, { + "protocol" : "HTTP_1_1", "securityMethods" : [ null, null ], "versions" : [ { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -3067,11 +3175,13 @@ String identifying an individual on-boarded API invoker resource }, { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -3090,10 +3200,12 @@ String identifying an individual on-boarded API invoker resource } ], "expiry" : "2000-01-23T04:56:07.000+00:00" } ], + "dataFormat" : "JSON", "domainName" : "domainName", "aefLocation" : { "dcId" : "dcId", "geoArea" : { + "shape" : "POINT", "point" : { "lon" : 36.988422590534526, "lat" : -75.5850925717018 @@ -3139,12 +3251,12 @@ String identifying an individual on-boarded API invoker resource "aefId" : "aefId", "interfaceDescriptions" : [ { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" }, { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" } ] @@ -3165,15 +3277,18 @@ String identifying an individual on-boarded API invoker resource "description" : "description", "apiSuppFeats" : "apiSuppFeats", "aefProfiles" : [ { + "protocol" : "HTTP_1_1", "securityMethods" : [ null, null ], "versions" : [ { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -3194,11 +3309,13 @@ String identifying an individual on-boarded API invoker resource }, { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -3217,10 +3334,12 @@ String identifying an individual on-boarded API invoker resource } ], "expiry" : "2000-01-23T04:56:07.000+00:00" } ], + "dataFormat" : "JSON", "domainName" : "domainName", "aefLocation" : { "dcId" : "dcId", "geoArea" : { + "shape" : "POINT", "point" : { "lon" : 36.988422590534526, "lat" : -75.5850925717018 @@ -3266,25 +3385,28 @@ String identifying an individual on-boarded API invoker resource "aefId" : "aefId", "interfaceDescriptions" : [ { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" }, { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" } ] }, { + "protocol" : "HTTP_1_1", "securityMethods" : [ null, null ], "versions" : [ { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -3305,11 +3427,13 @@ String identifying an individual on-boarded API invoker resource }, { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -3328,10 +3452,12 @@ String identifying an individual on-boarded API invoker resource } ], "expiry" : "2000-01-23T04:56:07.000+00:00" } ], + "dataFormat" : "JSON", "domainName" : "domainName", "aefLocation" : { "dcId" : "dcId", "geoArea" : { + "shape" : "POINT", "point" : { "lon" : 36.988422590534526, "lat" : -75.5850925717018 @@ -3377,12 +3503,12 @@ String identifying an individual on-boarded API invoker resource "aefId" : "aefId", "interfaceDescriptions" : [ { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" }, { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" } ] @@ -3679,6 +3805,8 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); + } else if (schema.items != null && schema.items.$ref != null) { + schema.items = defsParser.$refs.get(schema.items.$ref); } else { schemaWrapper.definitions = Object.assign({}, defs); $RefParser.dereference(schemaWrapper).catch(function(err) { @@ -3750,11 +3878,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3813,11 +3943,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3876,11 +4008,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3950,11 +4084,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4040,11 +4176,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4130,11 +4268,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4204,11 +4344,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4278,11 +4420,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4352,11 +4496,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4426,11 +4572,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4500,11 +4648,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4574,11 +4724,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4648,11 +4800,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4722,11 +4876,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4796,11 +4952,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4858,11 +5016,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4951,15 +5111,18 @@ $(document).ready(function() { "description" : "description", "apiSuppFeats" : "apiSuppFeats", "aefProfiles" : [ { + "protocol" : "HTTP_1_1", "securityMethods" : [ null, null ], "versions" : [ { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -4980,11 +5143,13 @@ $(document).ready(function() { }, { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -5003,10 +5168,12 @@ $(document).ready(function() { } ], "expiry" : "2000-01-23T04:56:07.000+00:00" } ], + "dataFormat" : "JSON", "domainName" : "domainName", "aefLocation" : { "dcId" : "dcId", "geoArea" : { + "shape" : "POINT", "point" : { "lon" : 36.988422590534526, "lat" : -75.5850925717018 @@ -5052,25 +5219,28 @@ $(document).ready(function() { "aefId" : "aefId", "interfaceDescriptions" : [ { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" }, { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" } ] }, { + "protocol" : "HTTP_1_1", "securityMethods" : [ null, null ], "versions" : [ { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -5091,11 +5261,13 @@ $(document).ready(function() { }, { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -5114,10 +5286,12 @@ $(document).ready(function() { } ], "expiry" : "2000-01-23T04:56:07.000+00:00" } ], + "dataFormat" : "JSON", "domainName" : "domainName", "aefLocation" : { "dcId" : "dcId", "geoArea" : { + "shape" : "POINT", "point" : { "lon" : 36.988422590534526, "lat" : -75.5850925717018 @@ -5163,12 +5337,12 @@ $(document).ready(function() { "aefId" : "aefId", "interfaceDescriptions" : [ { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" }, { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" } ] @@ -5189,15 +5363,18 @@ $(document).ready(function() { "description" : "description", "apiSuppFeats" : "apiSuppFeats", "aefProfiles" : [ { + "protocol" : "HTTP_1_1", "securityMethods" : [ null, null ], "versions" : [ { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -5218,11 +5395,13 @@ $(document).ready(function() { }, { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -5241,10 +5420,12 @@ $(document).ready(function() { } ], "expiry" : "2000-01-23T04:56:07.000+00:00" } ], + "dataFormat" : "JSON", "domainName" : "domainName", "aefLocation" : { "dcId" : "dcId", "geoArea" : { + "shape" : "POINT", "point" : { "lon" : 36.988422590534526, "lat" : -75.5850925717018 @@ -5290,25 +5471,28 @@ $(document).ready(function() { "aefId" : "aefId", "interfaceDescriptions" : [ { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" }, { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" } ] }, { + "protocol" : "HTTP_1_1", "securityMethods" : [ null, null ], "versions" : [ { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -5329,11 +5513,13 @@ $(document).ready(function() { }, { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -5352,10 +5538,12 @@ $(document).ready(function() { } ], "expiry" : "2000-01-23T04:56:07.000+00:00" } ], + "dataFormat" : "JSON", "domainName" : "domainName", "aefLocation" : { "dcId" : "dcId", "geoArea" : { + "shape" : "POINT", "point" : { "lon" : 36.988422590534526, "lat" : -75.5850925717018 @@ -5401,12 +5589,12 @@ $(document).ready(function() { "aefId" : "aefId", "interfaceDescriptions" : [ { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" }, { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" } ] @@ -5661,6 +5849,8 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); + } else if (schema.items != null && schema.items.$ref != null) { + schema.items = defsParser.$refs.get(schema.items.$ref); } else { schemaWrapper.definitions = Object.assign({}, defs); $RefParser.dereference(schemaWrapper).catch(function(err) { @@ -5746,11 +5936,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5824,11 +6016,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5898,11 +6092,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5972,11 +6168,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6046,11 +6244,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6120,11 +6320,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6194,11 +6396,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6268,11 +6472,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6342,11 +6548,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6416,11 +6624,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6490,11 +6700,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6564,11 +6776,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6626,11 +6840,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6978,6 +7194,8 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); + } else if (schema.items != null && schema.items.$ref != null) { + schema.items = defsParser.$refs.get(schema.items.$ref); } else { schemaWrapper.definitions = Object.assign({}, defs); $RefParser.dereference(schemaWrapper).catch(function(err) { @@ -7050,11 +7268,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7112,11 +7332,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7186,11 +7408,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7276,11 +7500,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7366,11 +7592,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7440,11 +7668,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7514,11 +7744,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7588,11 +7820,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7662,11 +7896,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7736,11 +7972,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7810,11 +8048,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7884,11 +8124,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7958,11 +8200,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8032,11 +8276,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8094,11 +8340,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9236,7 +9484,7 @@ var JSONSchemaView = (function () { // Determine if a schema is an array this.isArray = !this.isAny && this.schema && this.schema.type === 'array'; - this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneof || this.schema.allOf); + this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneOf || this.schema.allOf); // Determine if a schema is a primitive this.isPrimitive = !this.isAny && !this.isArray && !this.isObject; diff --git a/docs/openapi/Provider_Management.html b/docs/openapi/Provider_Management.html index 3ace452..32183da 100644 --- a/docs/openapi/Provider_Management.html +++ b/docs/openapi/Provider_Management.html @@ -993,6 +993,16 @@ ul.nav-tabs { "description" : "Represents registration information of an individual API provider domain function.\n" }; + defs["SupportedFeatures"] = { + "pattern" : "^[A-Fa-f0-9]*$", + "type" : "string", + "description" : "A string used to indicate the features supported by an API that is used as defined in clause 6.6 in 3GPP TS 29.500. The string shall contain a bitmask indicating supported features in hexadecimal representation Each character in the string shall take a value of \"0\" to \"9\", \"a\" to \"f\" or \"A\" to \"F\" and shall represent the support of 4 features as described in table 5.2.2-3. The most significant character representing the highest-numbered features shall appear first in the string, and the character representing features 1 to 4 shall appear last in the string. The list of features and their numbering (starting with 1) are defined separately for each API. If the string contains a lower number of characters than there are defined features for an API, all features that would be represented by characters that are not present in the string are not supported.\n" +}; + defs["Uri"] = { + "type" : "string", + "description" : "string providing an URI formatted according to IETF RFC 3986." +}; + var errs = {}; @@ -1094,14 +1104,16 @@ All rights reserved. "regInfo" : { "apiProvCert" : "apiProvCert", "apiProvPubKey" : "apiProvPubKey" - } + }, + "apiProvFuncRole" : "AEF" }, { "apiProvFuncId" : "apiProvFuncId", "apiProvFuncInfo" : "apiProvFuncInfo", "regInfo" : { "apiProvCert" : "apiProvCert", "apiProvPubKey" : "apiProvPubKey" - } + }, + "apiProvFuncRole" : "AEF" } ], "failReason" : "failReason", "regSec" : "regSec", @@ -1353,6 +1365,8 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); + } else if (schema.items != null && schema.items.$ref != null) { + schema.items = defsParser.$refs.get(schema.items.$ref); } else { schemaWrapper.definitions = Object.assign({}, defs); $RefParser.dereference(schemaWrapper).catch(function(err) { @@ -1438,11 +1452,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -1528,11 +1544,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -1602,11 +1620,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -1676,11 +1696,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -1750,11 +1772,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -1824,11 +1848,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -1898,11 +1924,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -1972,11 +2000,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2046,11 +2076,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2120,11 +2152,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2194,11 +2228,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2256,11 +2292,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2599,11 +2637,13 @@ String identifying an registered API provider domain resource. } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2673,11 +2713,13 @@ String identifying an registered API provider domain resource. } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2763,11 +2805,13 @@ String identifying an registered API provider domain resource. } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2853,11 +2897,13 @@ String identifying an registered API provider domain resource. } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2927,11 +2973,13 @@ String identifying an registered API provider domain resource. } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3001,11 +3049,13 @@ String identifying an registered API provider domain resource. } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3075,11 +3125,13 @@ String identifying an registered API provider domain resource. } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3149,11 +3201,13 @@ String identifying an registered API provider domain resource. } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3223,11 +3277,13 @@ String identifying an registered API provider domain resource. } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3297,11 +3353,13 @@ String identifying an registered API provider domain resource. } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3359,11 +3417,13 @@ String identifying an registered API provider domain resource. } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3432,14 +3492,16 @@ String identifying an registered API provider domain resource. "regInfo" : { "apiProvCert" : "apiProvCert", "apiProvPubKey" : "apiProvPubKey" - } + }, + "apiProvFuncRole" : "AEF" }, { "apiProvFuncId" : "apiProvFuncId", "apiProvFuncInfo" : "apiProvFuncInfo", "regInfo" : { "apiProvCert" : "apiProvCert", "apiProvPubKey" : "apiProvPubKey" - } + }, + "apiProvFuncRole" : "AEF" } ], "failReason" : "failReason", "regSec" : "regSec", @@ -3734,6 +3796,8 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); + } else if (schema.items != null && schema.items.$ref != null) { + schema.items = defsParser.$refs.get(schema.items.$ref); } else { schemaWrapper.definitions = Object.assign({}, defs); $RefParser.dereference(schemaWrapper).catch(function(err) { @@ -3805,11 +3869,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3867,11 +3933,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3941,11 +4009,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4031,11 +4101,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4121,11 +4193,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4195,11 +4269,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4269,11 +4345,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4343,11 +4421,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4417,11 +4497,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4491,11 +4573,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4565,11 +4649,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4639,11 +4725,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4713,11 +4801,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4787,11 +4877,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4849,11 +4941,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5201,6 +5295,8 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); + } else if (schema.items != null && schema.items.$ref != null) { + schema.items = defsParser.$refs.get(schema.items.$ref); } else { schemaWrapper.definitions = Object.assign({}, defs); $RefParser.dereference(schemaWrapper).catch(function(err) { @@ -5273,11 +5369,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5335,11 +5433,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5409,11 +5509,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5499,11 +5601,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5589,11 +5693,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5663,11 +5769,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5737,11 +5845,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5811,11 +5921,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5885,11 +5997,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5959,11 +6073,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6033,11 +6149,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6107,11 +6225,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6181,11 +6301,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6255,11 +6377,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6317,11 +6441,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7459,7 +7585,7 @@ var JSONSchemaView = (function () { // Determine if a schema is an array this.isArray = !this.isAny && this.schema && this.schema.type === 'array'; - this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneof || this.schema.allOf); + this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneOf || this.schema.allOf); // Determine if a schema is a primitive this.isPrimitive = !this.isAny && !this.isArray && !this.isObject; diff --git a/docs/openapi/Publish_Service.html b/docs/openapi/Publish_Service.html index bf70259..e34f80a 100644 --- a/docs/openapi/Publish_Service.html +++ b/docs/openapi/Publish_Service.html @@ -1630,6 +1630,78 @@ ul.nav-tabs { "description" : "Represents the API version information." }; + defs["Altitude"] = { + "maximum" : 32767, + "minimum" : -32767, + "type" : "number", + "description" : "Indicates value of altitude.", + "format" : "double" +}; + defs["Angle"] = { + "maximum" : 360, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of angle." +}; + defs["Confidence"] = { + "maximum" : 100, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of confidence." +}; + defs["DateTime"] = { + "type" : "string", + "description" : "string with format \"date-time\" as defined in OpenAPI.", + "format" : "date-time" +}; + defs["Float"] = { + "type" : "number", + "description" : "string with format 'float' as defined in OpenAPI.", + "format" : "float" +}; + defs["InnerRadius"] = { + "maximum" : 327675, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of the inner radius.", + "format" : "int32" +}; + defs["Ipv4Addr"] = { + "type" : "string", + "description" : "string identifying a Ipv4 address formatted in the \"dotted decimal\" notation as defined in IETF RFC 1166." +}; + defs["Ipv6Addr"] = { + "type" : "string", + "description" : "string identifying a Ipv6 address formatted according to clause 4 in IETF RFC 5952. The mixed Ipv4 Ipv6 notation according to clause 5 of IETF RFC 5952 shall not be used." +}; + defs["Orientation"] = { + "maximum" : 180, + "minimum" : 0, + "type" : "integer", + "description" : "Indicates value of orientation angle." +}; + defs["Port"] = { + "maximum" : 65535, + "minimum" : 0, + "type" : "integer", + "description" : "Unsigned integer with valid values between 0 and 65535." +}; + defs["SupportedFeatures"] = { + "pattern" : "^[A-Fa-f0-9]*$", + "type" : "string", + "description" : "A string used to indicate the features supported by an API that is used as defined in clause 6.6 in 3GPP TS 29.500. The string shall contain a bitmask indicating supported features in hexadecimal representation Each character in the string shall take a value of \"0\" to \"9\", \"a\" to \"f\" or \"A\" to \"F\" and shall represent the support of 4 features as described in table 5.2.2-3. The most significant character representing the highest-numbered features shall appear first in the string, and the character representing features 1 to 4 shall appear last in the string. The list of features and their numbering (starting with 1) are defined separately for each API. If the string contains a lower number of characters than there are defined features for an API, all features that would be represented by characters that are not present in the string are not supported.\n" +}; + defs["Uncertainty"] = { + "minimum" : 0, + "type" : "number", + "description" : "Indicates value of uncertainty.", + "format" : "float" +}; + defs["Uri"] = { + "type" : "string", + "description" : "string providing an URI formatted according to IETF RFC 3986." +}; + var errs = {}; @@ -2029,11 +2101,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2103,11 +2177,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2193,11 +2269,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2283,11 +2361,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2357,11 +2437,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2431,11 +2513,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2505,11 +2589,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2579,11 +2665,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2653,11 +2741,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2727,11 +2817,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2801,11 +2893,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2863,11 +2957,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2941,15 +3037,18 @@ pub fn main() { "description" : "description", "apiSuppFeats" : "apiSuppFeats", "aefProfiles" : [ { + "protocol" : "HTTP_1_1", "securityMethods" : [ null, null ], "versions" : [ { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -2970,11 +3069,13 @@ pub fn main() { }, { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -2993,10 +3094,12 @@ pub fn main() { } ], "expiry" : "2000-01-23T04:56:07.000+00:00" } ], + "dataFormat" : "JSON", "domainName" : "domainName", "aefLocation" : { "dcId" : "dcId", "geoArea" : { + "shape" : "POINT", "point" : { "lon" : 36.988422590534526, "lat" : -75.5850925717018 @@ -3042,25 +3145,28 @@ pub fn main() { "aefId" : "aefId", "interfaceDescriptions" : [ { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" }, { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" } ] }, { + "protocol" : "HTTP_1_1", "securityMethods" : [ null, null ], "versions" : [ { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -3081,11 +3187,13 @@ pub fn main() { }, { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -3104,10 +3212,12 @@ pub fn main() { } ], "expiry" : "2000-01-23T04:56:07.000+00:00" } ], + "dataFormat" : "JSON", "domainName" : "domainName", "aefLocation" : { "dcId" : "dcId", "geoArea" : { + "shape" : "POINT", "point" : { "lon" : 36.988422590534526, "lat" : -75.5850925717018 @@ -3153,12 +3263,12 @@ pub fn main() { "aefId" : "aefId", "interfaceDescriptions" : [ { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" }, { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" } ] @@ -3450,6 +3560,8 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); + } else if (schema.items != null && schema.items.$ref != null) { + schema.items = defsParser.$refs.get(schema.items.$ref); } else { schemaWrapper.definitions = Object.assign({}, defs); $RefParser.dereference(schemaWrapper).catch(function(err) { @@ -3536,11 +3648,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3626,11 +3740,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3700,11 +3816,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3774,11 +3892,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3848,11 +3968,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3922,11 +4044,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3996,11 +4120,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4070,11 +4196,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4144,11 +4272,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4218,11 +4348,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4292,11 +4424,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4354,11 +4488,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4725,11 +4861,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4799,11 +4937,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4889,11 +5029,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4979,11 +5121,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5053,11 +5197,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5127,11 +5273,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5201,11 +5349,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5275,11 +5425,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5349,11 +5501,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5423,11 +5577,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5485,11 +5641,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5878,11 +6036,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5952,11 +6112,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6042,11 +6204,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6132,11 +6296,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6206,11 +6372,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6280,11 +6448,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6354,11 +6524,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6428,11 +6600,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6502,11 +6676,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6576,11 +6752,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6650,11 +6828,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6712,11 +6892,13 @@ pub fn main() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6790,15 +6972,18 @@ pub fn main() { "description" : "description", "apiSuppFeats" : "apiSuppFeats", "aefProfiles" : [ { + "protocol" : "HTTP_1_1", "securityMethods" : [ null, null ], "versions" : [ { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -6819,11 +7004,13 @@ pub fn main() { }, { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -6842,10 +7029,12 @@ pub fn main() { } ], "expiry" : "2000-01-23T04:56:07.000+00:00" } ], + "dataFormat" : "JSON", "domainName" : "domainName", "aefLocation" : { "dcId" : "dcId", "geoArea" : { + "shape" : "POINT", "point" : { "lon" : 36.988422590534526, "lat" : -75.5850925717018 @@ -6891,25 +7080,28 @@ pub fn main() { "aefId" : "aefId", "interfaceDescriptions" : [ { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" }, { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" } ] }, { + "protocol" : "HTTP_1_1", "securityMethods" : [ null, null ], "versions" : [ { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -6930,11 +7122,13 @@ pub fn main() { }, { "apiVersion" : "apiVersion", "custOperations" : [ { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" }, { - "operations" : [ null, null ], + "operations" : [ "GET", "GET" ], + "commType" : "REQUEST_RESPONSE", "description" : "description", "custOpName" : "custOpName" } ], @@ -6953,10 +7147,12 @@ pub fn main() { } ], "expiry" : "2000-01-23T04:56:07.000+00:00" } ], + "dataFormat" : "JSON", "domainName" : "domainName", "aefLocation" : { "dcId" : "dcId", "geoArea" : { + "shape" : "POINT", "point" : { "lon" : 36.988422590534526, "lat" : -75.5850925717018 @@ -7002,12 +7198,12 @@ pub fn main() { "aefId" : "aefId", "interfaceDescriptions" : [ { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" }, { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 9606, "ipv4Addr" : "ipv4Addr" } ] @@ -7330,6 +7526,8 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); + } else if (schema.items != null && schema.items.$ref != null) { + schema.items = defsParser.$refs.get(schema.items.$ref); } else { schemaWrapper.definitions = Object.assign({}, defs); $RefParser.dereference(schemaWrapper).catch(function(err) { @@ -7401,11 +7599,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7463,11 +7663,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7537,11 +7739,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7627,11 +7831,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7717,11 +7923,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7791,11 +7999,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7865,11 +8075,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7939,11 +8151,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8013,11 +8227,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8087,11 +8303,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8161,11 +8379,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8235,11 +8455,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8309,11 +8531,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8383,11 +8607,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8445,11 +8671,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8828,6 +9056,8 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); + } else if (schema.items != null && schema.items.$ref != null) { + schema.items = defsParser.$refs.get(schema.items.$ref); } else { schemaWrapper.definitions = Object.assign({}, defs); $RefParser.dereference(schemaWrapper).catch(function(err) { @@ -8900,11 +9130,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8962,11 +9194,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9036,11 +9270,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9126,11 +9362,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9216,11 +9454,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9290,11 +9530,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9364,11 +9606,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9438,11 +9682,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9512,11 +9758,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9586,11 +9834,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9660,11 +9910,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9734,11 +9986,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9808,11 +10062,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9882,11 +10138,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9944,11 +10202,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -11086,7 +11346,7 @@ var JSONSchemaView = (function () { // Determine if a schema is an array this.isArray = !this.isAny && this.schema && this.schema.type === 'array'; - this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneof || this.schema.allOf); + this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneOf || this.schema.allOf); // Determine if a schema is a primitive this.isPrimitive = !this.isAny && !this.isArray && !this.isObject; diff --git a/docs/openapi/Security.html b/docs/openapi/Security.html index e0ac00b..f04aa46 100644 --- a/docs/openapi/Security.html +++ b/docs/openapi/Security.html @@ -1143,6 +1143,50 @@ ul.nav-tabs { "description" : "Represents the configuration information for the delivery of notifications over Websockets." }; + defs["DurationSec"] = { + "minimum" : 0, + "type" : "integer", + "description" : "Unsigned integer identifying a period of time in units of seconds." +}; + defs["Fqdn"] = { + "maxLength" : 253, + "minLength" : 4, + "pattern" : "^([0-9A-Za-z]([-0-9A-Za-z]{0,61}[0-9A-Za-z])?\\.)+[A-Za-z]{2,63}\\.?$", + "type" : "string", + "description" : "Fully Qualified Domain Name" +}; + defs["Ipv4Addr"] = { + "type" : "string", + "description" : "string identifying a Ipv4 address formatted in the \"dotted decimal\" notation as defined in IETF RFC 1166." +}; + defs["Ipv6Addr"] = { + "type" : "string", + "description" : "string identifying a Ipv6 address formatted according to clause 4 in IETF RFC 5952. The mixed Ipv4 Ipv6 notation according to clause 5 of IETF RFC 5952 shall not be used." +}; + defs["Link"] = { + "type" : "string", + "description" : "string formatted according to IETF RFC 3986 identifying a referenced resource." +}; + defs["Port"] = { + "maximum" : 65535, + "minimum" : 0, + "type" : "integer", + "description" : "Unsigned integer with valid values between 0 and 65535." +}; + defs["SupportedFeatures"] = { + "pattern" : "^[A-Fa-f0-9]*$", + "type" : "string", + "description" : "A string used to indicate the features supported by an API that is used as defined in clause 6.6 in 3GPP TS 29.500. The string shall contain a bitmask indicating supported features in hexadecimal representation Each character in the string shall take a value of \"0\" to \"9\", \"a\" to \"f\" or \"A\" to \"F\" and shall represent the support of 4 features as described in table 5.2.2-3. The most significant character representing the highest-numbered features shall appear first in the string, and the character representing features 1 to 4 shall appear last in the string. The list of features and their numbering (starting with 1) are defined separately for each API. If the string contains a lower number of characters than there are defined features for an API, all features that would be represented by characters that are not present in the string are not supported.\n" +}; + defs["Uri"] = { + "type" : "string", + "description" : "String providing an URI formatted according to RFC 3986." +}; + defs["Uri_1"] = { + "type" : "string", + "description" : "string providing an URI formatted according to IETF RFC 3986." +}; + var errs = {}; @@ -1673,11 +1717,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -1747,11 +1793,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -1837,11 +1885,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -1927,11 +1977,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2001,11 +2053,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2075,11 +2129,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2149,11 +2205,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2223,11 +2281,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2297,11 +2357,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2371,11 +2433,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2445,11 +2509,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2519,11 +2585,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2593,11 +2661,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2655,11 +2725,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -2998,11 +3070,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3072,11 +3146,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3162,11 +3238,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3252,11 +3330,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3326,11 +3406,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3400,11 +3482,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3474,11 +3558,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3548,11 +3634,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3622,11 +3710,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3696,11 +3786,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3758,11 +3850,13 @@ Identifier of an individual API invoker } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -3826,6 +3920,7 @@ Identifier of an individual API invoker "https://example.com/capif-security/v1/trustedInvokers/{apiInvokerId}/delete" \ -d '{ "apiInvokerId" : "apiInvokerId", + "cause" : "OVERLIMIT_USAGE", "aefId" : "aefId", "apiIds" : [ "apiIds", "apiIds" ] }' @@ -4106,6 +4201,8 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); + } else if (schema.items != null && schema.items.$ref != null) { + schema.items = defsParser.$refs.get(schema.items.$ref); } else { schemaWrapper.definitions = Object.assign({}, defs); $RefParser.dereference(schemaWrapper).catch(function(err) { @@ -4165,11 +4262,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4239,11 +4338,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4329,11 +4430,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4419,11 +4522,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4493,11 +4598,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4567,11 +4674,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4641,11 +4750,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4715,11 +4826,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4789,11 +4902,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4863,11 +4978,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -4937,11 +5054,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5011,11 +5130,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5085,11 +5206,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5147,11 +5270,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5603,11 +5728,13 @@ When set to 'true', it indicates the CAPIF core function to send the aut } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5677,11 +5804,13 @@ When set to 'true', it indicates the CAPIF core function to send the aut } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5767,11 +5896,13 @@ When set to 'true', it indicates the CAPIF core function to send the aut } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5857,11 +5988,13 @@ When set to 'true', it indicates the CAPIF core function to send the aut } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -5931,11 +6064,13 @@ When set to 'true', it indicates the CAPIF core function to send the aut } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6005,11 +6140,13 @@ When set to 'true', it indicates the CAPIF core function to send the aut } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6079,11 +6216,13 @@ When set to 'true', it indicates the CAPIF core function to send the aut } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6153,11 +6292,13 @@ When set to 'true', it indicates the CAPIF core function to send the aut } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6227,11 +6368,13 @@ When set to 'true', it indicates the CAPIF core function to send the aut } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6301,11 +6444,13 @@ When set to 'true', it indicates the CAPIF core function to send the aut } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6375,11 +6520,13 @@ When set to 'true', it indicates the CAPIF core function to send the aut } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6449,11 +6596,13 @@ When set to 'true', it indicates the CAPIF core function to send the aut } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6511,11 +6660,13 @@ When set to 'true', it indicates the CAPIF core function to send the aut } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -6585,7 +6736,7 @@ When set to 'true', it indicates the CAPIF core function to send the aut "authorizationInfo" : "authorizationInfo", "interfaceDetails" : { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 5248, "ipv4Addr" : "ipv4Addr" }, @@ -6597,7 +6748,7 @@ When set to 'true', it indicates the CAPIF core function to send the aut "authorizationInfo" : "authorizationInfo", "interfaceDetails" : { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 5248, "ipv4Addr" : "ipv4Addr" }, @@ -6897,6 +7048,8 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); + } else if (schema.items != null && schema.items.$ref != null) { + schema.items = defsParser.$refs.get(schema.items.$ref); } else { schemaWrapper.definitions = Object.assign({}, defs); $RefParser.dereference(schemaWrapper).catch(function(err) { @@ -6982,11 +7135,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7072,11 +7227,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7146,11 +7303,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7220,11 +7379,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7294,11 +7455,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7368,11 +7531,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7442,11 +7607,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7516,11 +7683,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7590,11 +7759,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7664,11 +7835,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7738,11 +7911,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7800,11 +7975,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -7874,7 +8051,7 @@ $(document).ready(function() { "authorizationInfo" : "authorizationInfo", "interfaceDetails" : { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 5248, "ipv4Addr" : "ipv4Addr" }, @@ -7886,7 +8063,7 @@ $(document).ready(function() { "authorizationInfo" : "authorizationInfo", "interfaceDetails" : { "ipv6Addr" : "ipv6Addr", - "securityMethods" : [ null, null ], + "securityMethods" : [ "PSK", "PSK" ], "port" : 5248, "ipv4Addr" : "ipv4Addr" }, @@ -8186,6 +8363,8 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); + } else if (schema.items != null && schema.items.$ref != null) { + schema.items = defsParser.$refs.get(schema.items.$ref); } else { schemaWrapper.definitions = Object.assign({}, defs); $RefParser.dereference(schemaWrapper).catch(function(err) { @@ -8257,11 +8436,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8331,11 +8512,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8421,11 +8604,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8511,11 +8696,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8585,11 +8772,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8659,11 +8848,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8733,11 +8924,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8807,11 +9000,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8881,11 +9076,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -8955,11 +9152,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9029,11 +9228,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9103,11 +9304,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9177,11 +9380,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -9239,11 +9444,13 @@ $(document).ready(function() { } if (schema.$ref != null) { schema = defsParser.$refs.get(schema.$ref); - Object.keys(schema.properties).forEach( (item) => { - if (schema.properties[item].$ref != null) { - schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); - } - }); + if (schema.properties != null) { + Object.keys(schema.properties).forEach( (item) => { + if (schema.properties[item].$ref != null) { + schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref); + } + }); + } } else if (schema.items != null && schema.items.$ref != null) { schema.items = defsParser.$refs.get(schema.items.$ref); } else { @@ -10381,7 +10588,7 @@ var JSONSchemaView = (function () { // Determine if a schema is an array this.isArray = !this.isAny && this.schema && this.schema.type === 'array'; - this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneof || this.schema.allOf); + this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneOf || this.schema.allOf); // Determine if a schema is a primitive this.isPrimitive = !this.isAny && !this.isArray && !this.isObject; diff --git a/docs/overview.rst b/docs/overview.rst index c9b42aa..18fc2bb 100644 --- a/docs/overview.rst +++ b/docs/overview.rst @@ -118,7 +118,7 @@ Service Manager Deployment Postman ******* -A Postman collection has been included in this repo at sme/postman/ServiceManager.postman_collection.json. +A Postman collection has been included in this repo at sme/postman/ServiceManager.postman_collection.json ************* diff --git a/docs/release-notes.rst b/docs/release-notes.rst index f620893..b8b51d0 100644 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -4,41 +4,51 @@ .. Copyright (C) 2023-2024 OpenInfra Foundation Europe. All rights reserved. ============= -Release-Notes +Release Notes ============= This document provides the release notes for the Non-RT RIC Service Management & Exposure (SME). -Version history SME CAPIFcore -============================= +Version history SME Service Manager +=================================== +------------+----------+------------------+--------------------------------------+ | **Date** | **Ver.** | **Author** | **Comment** | | | | | | +------------+----------+------------------+--------------------------------------+ -| 2022-12-14 | 1.0.0 | Henrik Andersson | G Release | -| | | | Initial version of Capifcore | +| 2024-06-26 | 0.1.2 | Denis G Noonan | J Release (Service Manager) | +| | | | Initial version of Service Manager | | | | | | +------------+----------+------------------+--------------------------------------+ -| 2023-02-10 | 1.0.1 | Yennifer Chacon | G Maintenance | -| | | | Release | +| TBA | TBA | Denis G Noonan | Service Manager includes support for | +| | | | dynamic URIs, multiple interface | +| | | | descriptions, and improved schema | +| | | | validation. | ++------------+----------+------------------+--------------------------------------+ + +Version history SME CAPIFCore +============================= + +------------+----------+------------------+--------------------------------------+ -| 2023-06-16 | 1.1.0 | Yennifer Chacon | H Release | +| **Date** | **Ver.** | **Author** | **Comment** | | | | | | +------------+----------+------------------+--------------------------------------+ -| 2023-12-15 | 1.2.0 | John Keeney | I Release | +| 2022-12-14 | 1.0.0 | Henrik Andersson | G Release | +| | | | Initial version of CapifCore | | | | | | +------------+----------+------------------+--------------------------------------+ - -Version history SME Service Manager -=================================== - +| 2023-02-10 | 1.0.1 | Yennifer Chacon | G Maintenance Release (CapifCore) | +| | | | | +------------+----------+------------------+--------------------------------------+ -| **Date** | **Ver.** | **Author** | **Comment** | +| 2023-06-16 | 1.1.0 | Yennifer Chacon | H Release (CapifCore) | +| | | | | ++------------+----------+------------------+--------------------------------------+ +| 2023-12-15 | 1.2.0 | John Keeney | I Release (CapifCore) | | | | | | +------------+----------+------------------+--------------------------------------+ -| TBA | | | Initial release of Service Manager | +| 2024-06-26 | 1.3.1 | John Keeney | J Release (CapifCore) | +| | | | | +------------+----------+------------------+--------------------------------------+ Release Data @@ -100,7 +110,7 @@ H Release | **Release date** | 2023-06-16 | | | | +-----------------------------+---------------------------------------------------+ -| **Purpose of the delivery** | nonrtric-plt-capifcore:1.1.0 | +| **Purpose of the delivery** | o-ran-sc/nonrtric-plt-capifcore:1.1.0 | | | Add more CAPIF core functions and APIs | | | | +-----------------------------+---------------------------------------------------+ @@ -121,7 +131,47 @@ I Release | **Release date** | 2023-12-15 | | | | +-----------------------------+---------------------------------------------------+ -| **Purpose of the delivery** | nonrtric-plt-capifcore:1.2.0 | +| **Purpose of the delivery** | o-ran-sc/nonrtric-plt-capifcore:1.2.0 | | | Add more CAPIF core functions and APIs | | | | +-----------------------------+---------------------------------------------------+ + +J Release +--------- ++-----------------------------+---------------------------------------------------+ +| **Project** | Non-RT RIC Service Manager | +| | | ++-----------------------------+---------------------------------------------------+ +| **Repo/commit-ID** | nonrtric/plt/sme/ | +| | 36718abc0fb386770a182c2c01358e1ce3621c75 | +| | | ++-----------------------------+---------------------------------------------------+ +| **Release designation** | J release | +| | | ++-----------------------------+---------------------------------------------------+ +| **Release date** | 2024-06-26 | +| | | ++-----------------------------+---------------------------------------------------+ +| **Purpose of the delivery** | o-ran-sc/nonrtric-plt-servicemanager:0.1.2 | +| | First release of NONRTRIC Service Manager | +| | | ++-----------------------------+---------------------------------------------------+ + ++-----------------------------+---------------------------------------------------+ +| **Project** | Non-RT RIC CAPIF Core | +| | | ++-----------------------------+---------------------------------------------------+ +| **Repo/commit-ID** | nonrtric/plt/sme/ | +| | 36718abc0fb386770a182c2c01358e1ce3621c75 | +| | | ++-----------------------------+---------------------------------------------------+ +| **Release designation** | J release | +| | | ++-----------------------------+---------------------------------------------------+ +| **Release date** | 2024-06-26 | +| | | ++-----------------------------+---------------------------------------------------+ +| **Purpose of the delivery** | o-ran-sc/nonrtric-plt-capifcore:1.3.1 | +| | Small updates & improvements | +| | | ++-----------------------------+---------------------------------------------------+ diff --git a/servicemanager/.env.example b/servicemanager/.env.example index 1d3c4ef..c5d5b32 100644 --- a/servicemanager/.env.example +++ b/servicemanager/.env.example @@ -8,7 +8,7 @@ KONG_CONTROL_PLANE_PORT= KONG_DATA_PLANE_IPV4= KONG_DATA_PLANE_PORT= CAPIF_PROTOCOL= -CAPIF_IPV4= +CAPIF_IPV4= CAPIF_PORT= LOG_LEVEL= SERVICE_MANAGER_PORT= diff --git a/servicemanager/README.md b/servicemanager/README.md index 4be8951..c322bae 100644 --- a/servicemanager/README.md +++ b/servicemanager/README.md @@ -3,7 +3,7 @@ ========================LICENSE_START================================= O-RAN-SC %% -Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved. +Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved %% Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -63,7 +63,7 @@ export SERVICE_MANAGER_ENV=development ### CAPIFcore and Kong -We also need Kong and CAPIFcore to be running. Please see the examples in the `deploy` folder. You can also use https://gerrit.o-ran-sc.org/r/it/dep for deployment. Please see the notes at https://wiki.o-ran-sc.org/display/RICNR/%5BWIP%5D+Service+Manager. +We also need Kong and CAPIFcore to be running. Please see the examples in the `deploy` folder. You can also use https://gerrit.o-ran-sc.org/r/it/dep for deployment. Please see the notes at https://wiki.o-ran-sc.org/display/RICNR/Release+J%3A+Service+Manager ## Build @@ -145,4 +145,63 @@ The additional env file needs to exist in the sme/servicemanager folder so that ## Postman -A Postman collection has been included in this repo at sme/postman/ServiceManager.postman_collection.json. \ No newline at end of file +A Postman collection has been included in this repo at sme/postman/ServiceManager.postman_collection.json. + +## Interface Descriptions + +To distinguish between multiple interface descriptions, Service Manager prepends the port number and a hash code to the URL path. + +## Static and Dynamic Routes + +We can specify either static or dynamic routes. Static routing defines a route when there is a single route for traffic to reach a destination. Dynamic routing allows us to specify path parameters. In this config file, we specify path parameters using regular expressions. + +Kong uses the regex definition from the [Rust programming language](https://docs.rs/regex/latest/regex/) to specify the regular expression (regex) that describes the path parameters, [Kong regex](https://docs.konghq.com/gateway/latest/key-concepts/routes/#regular-expressions). + +An example of a static path is as follows. This is the straightforward case. + +```http + /rapps +``` + +An example of a dynamic path is + +```http + ~/rapps/(?[a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*) +``` + +Our dynamic path starts with a ~ character. In this example, we have a path parameter that is described by a regex capture group called rappId. The regex describes a word made of mixed-case alphanumeric characters optionally followed by one or more sets of a dash or underscore together with another word. + +When the Service Manager client calls a dynamic API, we call the URL without the '~'. Kong substitutes the path parameter according to the rules specified in the regex. Therefore, we can call the above example by using + +```http + /rapps/my-rApp-id +``` + +as the URL where my-rApp-id is the rApp id of in the rApp Manager. The name my-rApp-id has to match the regex shown above. + +It is required to name the capture group in this YAML config file. The capture group name is used by Service Manager when creating a Kong Request Transformer plugin. We can specify multiple capture groups in a URL if there are multiple path parameters in the API path. + +We create a Kong Request Transformer plugin with .data[].config.replace, as in the following example curl with abridged response. + +```sh +curl -X GET http://oran-nonrtric-kong-admin.nonrtric.svc.cluster.local:8001/plugins +``` + +```json +{ + "body": [], + "uri": "/rapps/$(uri_captures[\"rappId\"])", + "headers": [], + "querystring": [] +} +``` + +In our example, this allows Kong to match /rapps/my-rApp-id. + +The Service Manager uses the following regex to search and replace the YAML file regexes. + +```regex +/\(\?<([^>]+)>([^\/]+)/ +``` + +Please note that the example path, /rapps/my-rApp-id, is not terminated by a '/'. Service Manager adds a '/' for internal matching. This made the regex easier to develop. Service Manager will match on /rapps/my-rApp-id/ for this case. diff --git a/servicemanager/build-servicemanager-ubuntu.sh b/servicemanager/build-servicemanager-ubuntu.sh index 963e3aa..bcc6481 100755 --- a/servicemanager/build-servicemanager-ubuntu.sh +++ b/servicemanager/build-servicemanager-ubuntu.sh @@ -25,9 +25,10 @@ echo "--> build-servicemanager-ubuntu.sh" export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin export GO111MODULE=on go version +cd servicemanager/ # Get the go coverage tool helper -go install github.com/ory/go-acc +go install github.com/ory/go-acc@v0.2.8 go get github.com/stretchr/testify/mock@v1.7.1 go-acc ./... --ignore mockkong,common,discoverserviceapi,invokermanagementapi,publishserviceapi,providermanagementapi diff --git a/servicemanager/container-tag.yaml b/servicemanager/container-tag.yaml index ced992f..fdabad8 100644 --- a/servicemanager/container-tag.yaml +++ b/servicemanager/container-tag.yaml @@ -19,4 +19,4 @@ # By default this file is in the docker build directory, # but the location can configured in the JJB template. --- -tag: 0.1.2 +tag: 0.2.0 diff --git a/servicemanager/internal/discoverservice/discoverservice_test.go b/servicemanager/internal/discoverservice/discoverservice_test.go index ab6ae85..3b6fa81 100644 --- a/servicemanager/internal/discoverservice/discoverservice_test.go +++ b/servicemanager/internal/discoverservice/discoverservice_test.go @@ -731,16 +731,14 @@ func registerHandlers(e *echo.Echo, myEnv map[string]string, myPorts map[string] func getServiceAPIDescription(aefId string, apiName string, apiCategory string, apiVersion string, protocol *publishapi.Protocol, dataFormat *publishapi.DataFormat, description string, testServiceIpv4 common29122.Ipv4Addr, testServicePort common29122.Port, commType publishapi.CommunicationType) publishapi.ServiceAPIDescription { domainName := "Kong" otherDomainName := "otherDomain" - var otherProtocol publishapi.Protocol = "HTTP_2" + var DataFormatOther publishapi.DataFormat = "OTHER" categoryPointer := &apiCategory if apiCategory == "" { categoryPointer = nil } - var DataFormatOther publishapi.DataFormat = "OTHER" - return publishapi.ServiceAPIDescription{ AefProfiles: &[]publishapi.AefProfile{ { @@ -775,6 +773,15 @@ func getServiceAPIDescription(aefId string, apiName string, apiCategory string, }, { AefId: aefId, // "otherAefId" + InterfaceDescriptions: &[]publishapi.InterfaceDescription{ + { + Ipv4Addr: &testServiceIpv4, + Port: &testServicePort, + SecurityMethods: &[]publishapi.SecurityMethod{ + "PSK", + }, + }, + }, DomainName: &otherDomainName, Protocol: &otherProtocol, DataFormat: &DataFormatOther, diff --git a/servicemanager/internal/envreader/envreader.go b/servicemanager/internal/envreader/envreader.go index f08b1d7..315772e 100644 --- a/servicemanager/internal/envreader/envreader.go +++ b/servicemanager/internal/envreader/envreader.go @@ -21,6 +21,8 @@ package envreader import ( + "fmt" + "net/url" "os" "path/filepath" "runtime" @@ -75,6 +77,14 @@ func (r *RealConfigReader) ReadDotEnv() (map[string]string, map[string]int, erro logConfig(myEnv, envFile) myPorts, err := createMapPorts(myEnv) + if err == nil { + err = validateEnv(myEnv) + } + + if err == nil { + err = validateUrls(myEnv, myPorts) + } + return myEnv, myPorts, err } @@ -110,31 +120,98 @@ func logConfig(myEnv map[string]string, envFile string) { log.Infof("TEST_SERVICE_PORT %s", myEnv["TEST_SERVICE_PORT"]) } +func validateUrls(myEnv map[string]string, myPorts map[string]int) error { + capifProtocol := myEnv["CAPIF_PROTOCOL"] + capifIPv4 := myEnv["CAPIF_IPV4"] + capifPort := myPorts["CAPIF_PORT"] + capifcoreUrl := fmt.Sprintf("%s://%s:%d", capifProtocol, capifIPv4, capifPort) + + kongProtocol := myEnv["KONG_PROTOCOL"] + kongControlPlaneIPv4 := myEnv["KONG_CONTROL_PLANE_IPV4"] + kongControlPlanePort := myPorts["KONG_CONTROL_PLANE_PORT"] + kongControlPlaneURL := fmt.Sprintf("%s://%s:%d", kongProtocol, kongControlPlaneIPv4, kongControlPlanePort) + + kongDataPlaneIPv4 := myEnv["KONG_DATA_PLANE_IPV4"] + kongDataPlanePort := myPorts["KONG_DATA_PLANE_PORT"] + kongDataPlaneURL := fmt.Sprintf("%s://%s:%d", kongProtocol, kongDataPlaneIPv4, kongDataPlanePort) + + log.Infof("Capifcore URL %s", capifcoreUrl) + log.Infof("Kong Control Plane URL %s", kongControlPlaneURL) + log.Infof("Kong Data Plane URL %s", kongDataPlaneURL) + + // Very basic checks + _, err := url.ParseRequestURI(capifcoreUrl) + if err != nil { + err = fmt.Errorf("error parsing Capifcore URL: %s", err) + return err + } + _, err = url.ParseRequestURI(kongControlPlaneURL) + if err != nil { + err = fmt.Errorf("error parsing Kong Control Plane URL: %s", err) + return err + } + _, err = url.ParseRequestURI(kongDataPlaneURL) + if err != nil { + err = fmt.Errorf("error parsing Kong Data Plane URL: %s", err) + return err + } + + return nil +} + +func validateEnv(myEnv map[string]string) error { + var err error = nil + + kongDomain := myEnv["KONG_DOMAIN"] + kongProtocol := myEnv["KONG_PROTOCOL"] + kongControlPlaneIPv4 := myEnv["KONG_CONTROL_PLANE_IPV4"] + kongDataPlaneIPv4 := myEnv["KONG_DATA_PLANE_IPV4"] + capifProtocol := myEnv["CAPIF_PROTOCOL"] + capifIPv4 := myEnv["CAPIF_IPV4"] + + if kongDomain == "" || kongDomain == "" { + err = fmt.Errorf("error loading KONG_DOMAIN from .env file: %s", kongDomain) + } else if kongProtocol == "" || kongProtocol == "" { + err = fmt.Errorf("error loading KONG_PROTOCOL from .env file: %s", kongProtocol) + } else if kongControlPlaneIPv4 == "" || kongControlPlaneIPv4 == "" { + err = fmt.Errorf("error loading KONG_CONTROL_PLANE_IPV4 from .env file: %s", kongControlPlaneIPv4) + } else if kongDataPlaneIPv4 == "" || kongDataPlaneIPv4 == "" { + err = fmt.Errorf("error loading KONG_DATA_PLANE_IPV4 from .env file: %s", kongDataPlaneIPv4) + } else if capifProtocol == "" || capifProtocol == "" { + err = fmt.Errorf("error loading CAPIF_PROTOCOL from .env file: %s", capifProtocol) + } else if capifIPv4 == "" || capifIPv4 == "" || capifIPv4 == "" { + err = fmt.Errorf("error loading CAPIF_IPV4 from .env file: %s", capifIPv4) + } + // TEST_SERVICE_IPV4 is used only by the unit tests and are validated in the unit tests. + + return err +} + func createMapPorts(myEnv map[string]string) (map[string]int, error) { myPorts := make(map[string]int) var err error myPorts["KONG_DATA_PLANE_PORT"], err = strconv.Atoi(myEnv["KONG_DATA_PLANE_PORT"]) if err != nil { - log.Fatalf("error loading KONG_DATA_PLANE_PORT from .env file: %s", err) + err = fmt.Errorf("error loading KONG_DATA_PLANE_PORT from .env file: %s", err) return nil, err } myPorts["KONG_CONTROL_PLANE_PORT"], err = strconv.Atoi(myEnv["KONG_CONTROL_PLANE_PORT"]) if err != nil { - log.Fatalf("error loading KONG_CONTROL_PLANE_PORT from .env file: %s", err) + err = fmt.Errorf("error loading KONG_CONTROL_PLANE_PORT from .env file: %s", err) return nil, err } myPorts["CAPIF_PORT"], err = strconv.Atoi(myEnv["CAPIF_PORT"]) if err != nil { - log.Fatalf("error loading CAPIF_PORT from .env file: %s", err) + err = fmt.Errorf("error loading CAPIF_PORT from .env file: %s", err) return nil, err } myPorts["SERVICE_MANAGER_PORT"], err = strconv.Atoi(myEnv["SERVICE_MANAGER_PORT"]) if err != nil { - log.Fatalf("error loading SERVICE_MANAGER_PORT from .env file: %s", err) + err = fmt.Errorf("error loading SERVICE_MANAGER_PORT from .env file: %s", err) return nil, err } @@ -142,7 +219,7 @@ func createMapPorts(myEnv map[string]string) (map[string]int, error) { if myEnv["TEST_SERVICE_PORT"] != "" { myPorts["TEST_SERVICE_PORT"], err = strconv.Atoi(myEnv["TEST_SERVICE_PORT"]) if err != nil { - log.Fatalf("error loading TEST_SERVICE_PORT from .env file: %s", err) + err = fmt.Errorf("error loading TEST_SERVICE_PORT from .env file: %s", err) return nil, err } } diff --git a/servicemanager/internal/publishservice/publishservice.go b/servicemanager/internal/publishservice/publishservice.go index 4031827..d042cd0 100644 --- a/servicemanager/internal/publishservice/publishservice.go +++ b/servicemanager/internal/publishservice/publishservice.go @@ -103,10 +103,18 @@ func (ps *PublishService) PostApfIdServiceApis(ctx echo.Context, apfId string) e ps.KongDataPlaneIPv4, ps.KongDataPlanePort, apfId) - if (err != nil) || (statusCode != http.StatusCreated) { - // We can return with http.StatusForbidden if there is a http.StatusConflict detected by Kong + + log.Trace("After RegisterKong") + + if err != nil { msg := err.Error() - log.Errorf("error on RegisterKong %s", msg) + log.Errorf("PostApfIdServiceApis, error on RegisterKong %s", msg) + return sendCoreError(ctx, statusCode, msg) + } + if statusCode != http.StatusCreated { + // We can return with http.StatusForbidden if there is a http.StatusConflict detected by Kong + msg := "error detected by Kong" + log.Errorf(msg) return sendCoreError(ctx, statusCode, msg) } diff --git a/servicemanager/internal/publishservice/publishservice_test.go b/servicemanager/internal/publishservice/publishservice_test.go index c42cba7..eb33c38 100644 --- a/servicemanager/internal/publishservice/publishservice_test.go +++ b/servicemanager/internal/publishservice/publishservice_test.go @@ -202,6 +202,24 @@ func capifCleanUp() { result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, eServiceManager) assert.Equal(t, http.StatusNoContent, result.Code()) + apiName = "helloworld-v1" + apiId = "api_id_" + apiName + + result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, eServiceManager) + assert.Equal(t, http.StatusNoContent, result.Code()) + + apiName = "helloworld-v1-id" + apiId = "api_id_" + apiName + + result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, eServiceManager) + assert.Equal(t, http.StatusNoContent, result.Code()) + + apiName = "helloworld-no-version" + apiId = "api_id_" + apiName + + result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, eServiceManager) + assert.Equal(t, http.StatusNoContent, result.Code()) + // Delete the provider domainID := "domain_id_Kong" result = testutil.NewRequest().Delete("/api-provider-management/v1/registrations/"+domainID).Go(t, eServiceManager) @@ -262,7 +280,11 @@ func TestPostUnpublishedServiceWithUnregisteredPublisher(t *testing.T) { assert.NotZero(t, testServicePort, "TEST_SERVICE_PORT is required in .env file for unit testing") apiName := "apiName" - newServiceDescription := getServiceAPIDescription(aefId, apiName, description, testServiceIpv4, testServicePort) + apiVersion := "v1" + resourceName := "helloworld" + uri := "/helloworld" + + newServiceDescription := getServiceAPIDescription(aefId, apiName, description, testServiceIpv4, testServicePort, apiVersion, resourceName, uri) // Attempt to publish a service for provider result = testutil.NewRequest().Post("/published-apis/v1/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, eServiceManager) @@ -288,7 +310,7 @@ func TestRegisterValidProvider(t *testing.T) { assert.NoError(t, err, "error unmarshaling response") } -func TestPublishUnpublishService(t *testing.T) { +func TestPublishUnpublishServiceMissingInterface(t *testing.T) { apfId := "APF_id_rApp_Kong_as_APF" apiName := "apiName" @@ -330,12 +352,38 @@ func TestPublishUnpublishService(t *testing.T) { err = result.UnmarshalJsonToObject(&resultError) assert.NoError(t, err, "error unmarshaling response") - assert.Contains(t, *resultError.Cause, "cannot read interfaceDescription") + assert.Contains(t, *resultError.Cause, "cannot read InterfaceDescriptions") +} + + +func TestPublishUnpublishWithoutVersionId(t *testing.T) { + apfId := "APF_id_rApp_Kong_as_APF" + + myEnv, myPorts, err := mockConfigReader.ReadDotEnv() + assert.Nil(t, err, "error reading env file") + + testServiceIpv4 := common29122.Ipv4Addr(myEnv["TEST_SERVICE_IPV4"]) + testServicePort := common29122.Port(myPorts["TEST_SERVICE_PORT"]) + + assert.NotEmpty(t, testServiceIpv4, "TEST_SERVICE_IPV4 is required in .env file for unit testing") + assert.NotZero(t, testServicePort, "TEST_SERVICE_PORT is required in .env file for unit testing") + + apiVersion := "v1" + resourceName := "helloworld" + uri := "/helloworld" + apiName := "helloworld-v1" + + aefId := "AEF_id_rApp_Kong_as_AEF" + namespace := "namespace" + repoName := "repoName" + chartName := "chartName" + releaseName := "releaseName" + description := fmt.Sprintf("Description,%s,%s,%s,%s", namespace, repoName, chartName, releaseName) - newServiceDescription = getServiceAPIDescription(aefId, apiName, description, testServiceIpv4, testServicePort) + newServiceDescription := getServiceAPIDescription(aefId, apiName, description, testServiceIpv4, testServicePort, apiVersion, resourceName, uri) // Publish a service for provider - result = testutil.NewRequest().Post("/published-apis/v1/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, eServiceManager) + result := testutil.NewRequest().Post("/published-apis/v1/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, eServiceManager) assert.Equal(t, http.StatusCreated, result.Code()) if result.Code() != http.StatusCreated { @@ -374,30 +422,184 @@ func TestPublishUnpublishService(t *testing.T) { assert.Equal(t, kongDataPlaneIPv4, resultServiceIpv4) assert.Equal(t, kongDataPlanePort, resultServicePort) - // Publish the same service again should result in Forbidden - newServiceDescription.ApiId = &newApiId - result = testutil.NewRequest().Post("/published-apis/v1/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, eServiceManager) - assert.Equal(t, http.StatusForbidden, result.Code()) + // Check Versions structure + version := aefProfile.Versions[0] + assert.Equal(t, "v1", version.ApiVersion) - err = result.UnmarshalBodyToObject(&resultError) + resource := (*version.Resources)[0] + communicationType := publishapi.CommunicationType("REQUEST_RESPONSE") + assert.Equal(t, communicationType, resource.CommType) + + assert.Equal(t, 1, len(*resource.Operations)) + var operation publishapi.Operation = "GET" + assert.Equal(t, operation, (*resource.Operations)[0]) + assert.Equal(t, "helloworld", resource.ResourceName) + assert.Equal(t, "/helloworld-v1/port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/helloworld", resource.Uri) +} + +func TestPublishUnpublishVersionId(t *testing.T) { + apfId := "APF_id_rApp_Kong_as_APF" + + myEnv, myPorts, err := mockConfigReader.ReadDotEnv() + assert.Nil(t, err, "error reading env file") + + testServiceIpv4 := common29122.Ipv4Addr(myEnv["TEST_SERVICE_IPV4"]) + testServicePort := common29122.Port(myPorts["TEST_SERVICE_PORT"]) + + assert.NotEmpty(t, testServiceIpv4, "TEST_SERVICE_IPV4 is required in .env file for unit testing") + assert.NotZero(t, testServicePort, "TEST_SERVICE_PORT is required in .env file for unit testing") + + apiVersion := "v1" + resourceName := "helloworld-id" + uri := "~/helloworld/(?[a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*)" + apiName := "helloworld-v1-id" + + aefId := "AEF_id_rApp_Kong_as_AEF" + namespace := "namespace" + repoName := "repoName" + chartName := "chartName" + releaseName := "releaseName" + description := fmt.Sprintf("Description,%s,%s,%s,%s", namespace, repoName, chartName, releaseName) + + newServiceDescription := getServiceAPIDescription(aefId, apiName, description, testServiceIpv4, testServicePort, apiVersion, resourceName, uri) + + // Publish a service for provider + result := testutil.NewRequest().Post("/published-apis/v1/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, eServiceManager) + assert.Equal(t, http.StatusCreated, result.Code()) + + if result.Code() != http.StatusCreated { + log.Fatalf("failed to publish the service with HTTP result code %d", result.Code()) + return + } + + var resultService publishapi.ServiceAPIDescription + err = result.UnmarshalJsonToObject(&resultService) assert.NoError(t, err, "error unmarshaling response") - assert.Contains(t, *resultError.Cause, "already published") - assert.Equal(t, http.StatusForbidden, *resultError.Status) + newApiId := "api_id_" + apiName + assert.Equal(t, newApiId, *resultService.ApiId) - // Delete the service - result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+newApiId).Go(t, eServiceManager) - assert.Equal(t, http.StatusNoContent, result.Code()) + assert.Equal(t, "http://example.com/published-apis/v1/"+apfId+"/service-apis/"+*resultService.ApiId, result.Recorder.Header().Get(echo.HeaderLocation)) - // Check no services published - result = testutil.NewRequest().Get("/published-apis/v1/"+apfId+"/service-apis").Go(t, eServiceManager) + // Check that the service is published for the provider + result = testutil.NewRequest().Get("/published-apis/v1/"+apfId+"/service-apis/"+newApiId).Go(t, eServiceManager) assert.Equal(t, http.StatusOK, result.Code()) - // Parse JSON from the response body - err = result.UnmarshalJsonToObject(&resultServices) + err = result.UnmarshalJsonToObject(&resultService) assert.NoError(t, err, "error unmarshaling response") + assert.Equal(t, newApiId, *resultService.ApiId) + + aefProfile := (*resultService.AefProfiles)[0] + interfaceDescription := (*aefProfile.InterfaceDescriptions)[0] + + resultServiceIpv4 := *interfaceDescription.Ipv4Addr + resultServicePort := *interfaceDescription.Port + + kongDataPlaneIPv4 := common29122.Ipv4Addr(myEnv["KONG_DATA_PLANE_IPV4"]) + kongDataPlanePort := common29122.Port(myPorts["KONG_DATA_PLANE_PORT"]) + + assert.NotEmpty(t, kongDataPlaneIPv4, "KONG_DATA_PLANE_IPV4 is required in .env file for unit testing") + assert.NotZero(t, kongDataPlanePort, "KONG_DATA_PLANE_PORT is required in .env file for unit testing") + + assert.Equal(t, kongDataPlaneIPv4, resultServiceIpv4) + assert.Equal(t, kongDataPlanePort, resultServicePort) + + // Check Versions structure + version := aefProfile.Versions[0] + assert.Equal(t, "v1", version.ApiVersion) + + resource := (*version.Resources)[0] + communicationType := publishapi.CommunicationType("REQUEST_RESPONSE") + assert.Equal(t, communicationType, resource.CommType) + + assert.Equal(t, 1, len(*resource.Operations)) + var operation publishapi.Operation = "GET" + assert.Equal(t, operation, (*resource.Operations)[0]) + + assert.Equal(t, "helloworld-id", resource.ResourceName) + assert.Equal(t, "~/helloworld-v1-id/port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/helloworld/v1/(?[a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*)", resource.Uri) +} + +func TestPublishUnpublishServiceNoVersionWithId(t *testing.T) { + apfId := "APF_id_rApp_Kong_as_APF" + + myEnv, myPorts, err := mockConfigReader.ReadDotEnv() + assert.Nil(t, err, "error reading env file") + + testServiceIpv4 := common29122.Ipv4Addr(myEnv["TEST_SERVICE_IPV4"]) + testServicePort := common29122.Port(myPorts["TEST_SERVICE_PORT"]) + + assert.NotEmpty(t, testServiceIpv4, "TEST_SERVICE_IPV4 is required in .env file for unit testing") + assert.NotZero(t, testServicePort, "TEST_SERVICE_PORT is required in .env file for unit testing") + + apiVersion := "" + resourceName := "helloworld-no-version" + uri := "~/helloworld/(?[a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*)" + apiName := "helloworld-no-version" + + aefId := "AEF_id_rApp_Kong_as_AEF" + namespace := "namespace" + repoName := "repoName" + chartName := "chartName" + releaseName := "releaseName" + description := fmt.Sprintf("Description,%s,%s,%s,%s", namespace, repoName, chartName, releaseName) + + newServiceDescription := getServiceAPIDescription(aefId, apiName, description, testServiceIpv4, testServicePort, apiVersion, resourceName, uri) + + // Publish a service for provider + result := testutil.NewRequest().Post("/published-apis/v1/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, eServiceManager) + assert.Equal(t, http.StatusCreated, result.Code()) + + if result.Code() != http.StatusCreated { + log.Fatalf("failed to publish the service with HTTP result code %d", result.Code()) + return + } + + var resultService publishapi.ServiceAPIDescription + err = result.UnmarshalJsonToObject(&resultService) + assert.NoError(t, err, "error unmarshaling response") + newApiId := "api_id_" + apiName + assert.Equal(t, newApiId, *resultService.ApiId) + + assert.Equal(t, "http://example.com/published-apis/v1/"+apfId+"/service-apis/"+*resultService.ApiId, result.Recorder.Header().Get(echo.HeaderLocation)) + + // Check that the service is published for the provider + result = testutil.NewRequest().Get("/published-apis/v1/"+apfId+"/service-apis/"+newApiId).Go(t, eServiceManager) + assert.Equal(t, http.StatusOK, result.Code()) + + err = result.UnmarshalJsonToObject(&resultService) + assert.NoError(t, err, "error unmarshaling response") + assert.Equal(t, newApiId, *resultService.ApiId) + + aefProfile := (*resultService.AefProfiles)[0] + interfaceDescription := (*aefProfile.InterfaceDescriptions)[0] + + resultServiceIpv4 := *interfaceDescription.Ipv4Addr + resultServicePort := *interfaceDescription.Port + + kongDataPlaneIPv4 := common29122.Ipv4Addr(myEnv["KONG_DATA_PLANE_IPV4"]) + kongDataPlanePort := common29122.Port(myPorts["KONG_DATA_PLANE_PORT"]) + + assert.NotEmpty(t, kongDataPlaneIPv4, "KONG_DATA_PLANE_IPV4 is required in .env file for unit testing") + assert.NotZero(t, kongDataPlanePort, "KONG_DATA_PLANE_PORT is required in .env file for unit testing") + + assert.Equal(t, kongDataPlaneIPv4, resultServiceIpv4) + assert.Equal(t, kongDataPlanePort, resultServicePort) + + // Check Versions structure + version := aefProfile.Versions[0] + assert.Equal(t, "", version.ApiVersion) + + resource := (*version.Resources)[0] + communicationType := publishapi.CommunicationType("REQUEST_RESPONSE") + assert.Equal(t, communicationType, resource.CommType) + + assert.Equal(t, 1, len(*resource.Operations)) + var operation publishapi.Operation = "GET" + assert.Equal(t, operation, (*resource.Operations)[0]) + + assert.Equal(t, "helloworld-no-version", resource.ResourceName) + assert.Equal(t, "~/helloworld-no-version/port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/helloworld/(?[a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*)", resource.Uri) - // Check if the parsed array is empty - assert.Zero(t, len(resultServices)) capifCleanUp() } @@ -449,7 +651,16 @@ func registerHandlers(e *echo.Echo, myEnv map[string]string, myPorts map[string] return err } -func getServiceAPIDescription(aefId, apiName, description string, testServiceIpv4 common29122.Ipv4Addr, testServicePort common29122.Port) publishapi.ServiceAPIDescription { +func getServiceAPIDescription( + aefId string, + apiName string, + description string, + testServiceIpv4 common29122.Ipv4Addr, + testServicePort common29122.Port, + apiVersion string, + resourceName string, + uri string) publishapi.ServiceAPIDescription { + domainName := "Kong" var protocol publishapi.Protocol = "HTTP_1_1" @@ -470,15 +681,15 @@ func getServiceAPIDescription(aefId, apiName, description string, testServiceIpv Protocol: &protocol, Versions: []publishapi.Version{ { - ApiVersion: "v1", + ApiVersion: apiVersion, Resources: &[]publishapi.Resource{ { CommType: "REQUEST_RESPONSE", Operations: &[]publishapi.Operation{ "GET", }, - ResourceName: "helloworld", - Uri: "/helloworld", + ResourceName: resourceName, + Uri: uri, }, }, }, diff --git a/servicemanager/internal/publishserviceapi/typeupdate.go b/servicemanager/internal/publishserviceapi/typeupdate.go index d7246bd..ac84c0d 100644 --- a/servicemanager/internal/publishserviceapi/typeupdate.go +++ b/servicemanager/internal/publishserviceapi/typeupdate.go @@ -25,9 +25,12 @@ import ( "fmt" "net/http" "net/url" + "regexp" + "strconv" "strings" resty "github.com/go-resty/resty/v2" + "github.com/google/uuid" log "github.com/sirupsen/logrus" common29122 "oransc.org/nonrtric/servicemanager/internal/common29122" @@ -56,7 +59,7 @@ func (sd *ServiceAPIDescription) RegisterKong( ) kongControlPlaneURL := fmt.Sprintf("%s://%s:%d", kongProtocol, kongControlPlaneIPv4, kongControlPlanePort) - statusCode, err = sd.createKongRoutes(kongControlPlaneURL, apfId) + statusCode, err = sd.createKongInterfaceDescriptions(kongControlPlaneURL, apfId) if (err != nil) || (statusCode != http.StatusCreated) { return statusCode, err } @@ -67,109 +70,338 @@ func (sd *ServiceAPIDescription) RegisterKong( return statusCode, nil } -func (sd *ServiceAPIDescription) createKongRoutes(kongControlPlaneURL string, apfId string) (int, error) { - log.Trace("entering createKongRoutes") +func (sd *ServiceAPIDescription) createKongInterfaceDescriptions(kongControlPlaneURL string, apfId string) (int, error) { + log.Trace("entering createKongInterfaceDescriptions") + var ( statusCode int err error ) - client := resty.New() + outputUris := []string{} + + if sd == nil { + err = errors.New("cannot read ServiceAPIDescription") + log.Errorf(err.Error()) + return http.StatusBadRequest, err + } + + if (sd.AefProfiles == nil) || (len(*sd.AefProfiles) < 1) { + err = errors.New("cannot read AefProfiles") + log.Errorf(err.Error()) + return http.StatusBadRequest, err + } profiles := *sd.AefProfiles for _, profile := range profiles { - log.Debugf("createKongRoutes, AefId %s", profile.AefId) + log.Debugf("createKongInterfaceDescriptions, AefId %s", profile.AefId) + + if (profile.Versions == nil) || (len(profile.Versions) < 1) { + err := errors.New("cannot read Versions") + log.Errorf(err.Error()) + return http.StatusBadRequest, err + } + for _, version := range profile.Versions { - log.Debugf("createKongRoutes, apiVersion \"%s\"", version.ApiVersion) - for _, resource := range *version.Resources { - statusCode, err = sd.createKongRoute(kongControlPlaneURL, client, resource, apfId, profile.AefId, version.ApiVersion) - if (err != nil) || (statusCode != http.StatusCreated) { - return statusCode, err + log.Debugf("createKongInterfaceDescriptions, apiVersion \"%s\"", version.ApiVersion) + + if (profile.InterfaceDescriptions == nil) || (len(*profile.InterfaceDescriptions) < 1) { + err := errors.New("cannot read InterfaceDescriptions") + log.Errorf(err.Error()) + return http.StatusBadRequest, err + } + + for _, interfaceDescription := range *profile.InterfaceDescriptions { + log.Debugf("createKongInterfaceDescriptions, Ipv4Addr %s", *interfaceDescription.Ipv4Addr) + log.Debugf("createKongInterfaceDescriptions, Port %d", *interfaceDescription.Port) + if uint(*interfaceDescription.Port) > 65535 { + err := errors.New("invalid Port") + log.Errorf(err.Error()) + return http.StatusBadRequest, err + } + + if interfaceDescription.SecurityMethods == nil { + err := errors.New("cannot read SecurityMethods") + log.Errorf(err.Error()) + return http.StatusBadRequest, err + } + + for _, securityMethod := range *interfaceDescription.SecurityMethods { + log.Debugf("createKongInterfaceDescriptions, SecurityMethod %s", securityMethod) + + if (securityMethod != SecurityMethodOAUTH) && (securityMethod != SecurityMethodPKI) && (securityMethod != SecurityMethodPSK) { + msg := fmt.Sprintf("invalid SecurityMethod %s", securityMethod) + err := errors.New(msg) + log.Errorf(err.Error()) + return http.StatusBadRequest, err + } + } + + if (version.Resources == nil) || (len(*version.Resources) < 1) { + err := errors.New("cannot read Resources") + log.Errorf(err.Error()) + return http.StatusBadRequest, err + } + + for _, resource := range *version.Resources { + var specUri string + specUri, statusCode, err = sd.createKongServiceRoutePrecheck(kongControlPlaneURL, client, interfaceDescription, resource, apfId, profile.AefId, version.ApiVersion) + if (err != nil) || (statusCode != http.StatusCreated) { + return statusCode, err + } + log.Debugf("createKongInterfaceDescriptions, specUri %s", specUri) + outputUris = append(outputUris, specUri) + log.Tracef("createKongInterfaceDescriptions, len(outputUris) %d", len(outputUris)) + log.Tracef("createKongInterfaceDescriptions, outputUris %v", outputUris) + } + } + } + } + + // Our list of returned resources has the new resource with the hash code and version number + m := 0 + for i, profile := range profiles { + for j, version := range profile.Versions { + var newResources []Resource + for range *profile.InterfaceDescriptions { + log.Tracef("createKongInterfaceDescriptions, range over *profile.InterfaceDescriptions") + for _, resource := range *version.Resources { + log.Tracef("createKongInterfaceDescriptions, m %d outputUris[m] %s", m, outputUris[m]) + resource.Uri = outputUris[m] + m = m + 1 + // Build a new list of resources with updated uris + newResources = append(newResources, resource) + log.Tracef("createKongInterfaceDescriptions, newResources %v", newResources) } } + // Swap over to the new list of uris + *profiles[i].Versions[j].Resources = newResources + log.Tracef("createKongInterfaceDescriptions, assigned *profiles[i].Versions[j].Resources %v", *profiles[i].Versions[j].Resources) } } + log.Tracef("exiting createKongInterfaceDescriptions statusCode %d", statusCode) + return statusCode, nil } -func (sd *ServiceAPIDescription) createKongRoute( +func (sd *ServiceAPIDescription) createKongServiceRoutePrecheck( kongControlPlaneURL string, client *resty.Client, + interfaceDescription InterfaceDescription, resource Resource, apfId string, aefId string, - apiVersion string ) (int, error) { - log.Trace("entering createKongRoute") + apiVersion string ) (string, int, error) { + log.Trace("entering createKongServiceRoutePrecheck") + log.Debugf("createKongServiceRoutePrecheck, aefId %s", aefId) - resourceName := resource.ResourceName - apiId := *sd.ApiId + if (resource.Operations == nil) || (len(*resource.Operations) < 1) { + err := errors.New("cannot read Resource.Operations") + log.Errorf(err.Error()) + return "", http.StatusBadRequest, err + } - tags := buildTags(apfId, aefId, apiId, apiVersion, resourceName) - log.Debugf("createKongRoute, tags %s", tags) + log.Debugf("createKongServiceRoutePrecheck, resource.Uri %s", resource.Uri) + if resource.Uri == "" { + err := errors.New("cannot read Resource.Uri") + log.Errorf(err.Error()) + return "", http.StatusBadRequest, err + } - serviceName := apiId + "_" + resourceName - routeName := serviceName + log.Debugf("createKongServiceRoutePrecheck, ResourceName %v", resource.ResourceName) - log.Debugf("createKongRoute, serviceName %s", serviceName) - log.Debugf("createKongRoute, routeName %s", routeName) - log.Debugf("createKongRoute, aefId %s", aefId) + if resource.ResourceName == "" { + err := errors.New("cannot read Resource.ResourceName") + log.Errorf(err.Error()) + return "", http.StatusBadRequest, err + } - uri := buildUriWithVersion(apiVersion, resource.Uri) - log.Debugf("createKongRoute, uri %s", uri) + if (resource.CommType != CommunicationTypeREQUESTRESPONSE) && (resource.CommType != CommunicationTypeSUBSCRIBENOTIFY) { + err := errors.New("invalid Resource.CommType") + log.Errorf(err.Error()) + return "", http.StatusBadRequest, err + } - statusCode, err := sd.createKongService(kongControlPlaneURL, serviceName, uri, tags) - if (err != nil) || (statusCode != http.StatusCreated) { - return statusCode, err + specUri := resource.Uri + kongRegexUri, _ := deriveKongPattern(resource.Uri) + + specUri, statusCode, err := sd.createKongServiceRoute(kongControlPlaneURL, client, interfaceDescription, kongRegexUri, specUri, apfId, aefId, apiVersion, resource) + if (err != nil) || ((statusCode != http.StatusCreated) ) { + // We carry on if we tried to create a duplicate service. We depend on Kong route matching. + return specUri, statusCode, err } - kongRoutesURL := kongControlPlaneURL + "/services/" + serviceName + "/routes" + return specUri, statusCode, err +} + +func insertVersion(version string, route string) string { + versionedRoute := route + + if version != "" { + sep := "/" + n := 3 - // Define the route information for Kong - kongRouteInfo := map[string]interface{}{ - "name": routeName, - "paths": []string{uri}, - "methods": resource.Operations, - "tags": tags, - "strip_path": true, + foundRegEx := false + if strings.HasPrefix(route, "~") { + log.Debug("insertVersion, found regex prefix") + foundRegEx = true + route = strings.TrimPrefix(route, "~") + } + + log.Debugf("insertVersion route %s", route) + split := strings.SplitAfterN(route, sep, n) + log.Debugf("insertVersion split %q", split) + + versionedRoute = split[0] + if len(split) == 2 { + versionedRoute = split[0] + split[1] + } else if len(split) > 2 { + versionedRoute = split[0] + split[1] + version + sep + split[2] + } + + if foundRegEx { + versionedRoute = "~" + versionedRoute + } + } + log.Debugf("insertVersion versionedRoute %s", versionedRoute) + + return versionedRoute +} + +func (sd *ServiceAPIDescription) createKongServiceRoute( + kongControlPlaneURL string, + client *resty.Client, + interfaceDescription InterfaceDescription, + kongRegexUri string, + specUri string, + apfId string, + aefId string, + apiVersion string, + resource Resource) (string, int, error) { + log.Tracef("entering createKongServiceRoute") + + var ( + statusCode int + err error + ) + + kongControlPlaneURLParsed, err := url.Parse(kongControlPlaneURL) + if err != nil { + return "", http.StatusInternalServerError, err + } + log.Debugf("createKongServiceRoute, kongControlPlaneURL %s", kongControlPlaneURL) + log.Debugf("createKongServiceRoute, kongControlPlaneURLParsed.Scheme %s", kongControlPlaneURLParsed.Scheme) + + log.Debugf("createKongServiceRoute, kongRegexUri %s", kongRegexUri) + log.Debugf("createKongServiceRoute, specUri %s", specUri) + + kongRegexUri = insertVersion(apiVersion, kongRegexUri) + kongServiceUri := kongRegexUri + log.Debugf("createKongServiceRoute, kongServiceUri after insertVersion, %s", kongServiceUri) + + specUri = insertVersion(apiVersion, specUri) + log.Debugf("createKongServiceRoute, specUri after insertVersion, %s", specUri) + + if strings.HasPrefix(kongServiceUri, "~") { + log.Debug("createKongServiceRoute, found regex prefix") + + // For our Kong Service path, we omit the leading ~ and take the path up to the regex, not including the '(' + kongServiceUri = kongServiceUri[1:] + index := strings.Index(kongServiceUri, "(?") + if (index != -1 ) { + kongServiceUri = kongServiceUri[:index] + } else { + log.Errorf("createKongServiceRoute, regex characters '(?' not found in the regex %s", kongServiceUri) + return "", http.StatusBadRequest, err + } + } else { + log.Debug("createKongServiceRoute, no regex prefix found") + } + log.Debugf("createKongServiceRoute, kongServiceUri, path up to regex %s", kongServiceUri) + + ipv4Addr := *interfaceDescription.Ipv4Addr + port := *interfaceDescription.Port + + portAsInt := int(port) + interfaceDescriptionSeed := string(ipv4Addr) + strconv.Itoa(portAsInt) + interfaceDescUuid := uuid.NewSHA1(uuid.NameSpaceURL, []byte(interfaceDescriptionSeed)) + uriPrefix := "port-" + strconv.Itoa(portAsInt) + "-hash-" + interfaceDescUuid.String() + + resourceName := resource.ResourceName + + apiId := *sd.ApiId + kongServiceName := apiId + "-" + resourceName + kongServiceNamePrefix := kongServiceName + "-" + uriPrefix + + log.Debugf("createKongServiceRoute, kongServiceName %s", kongServiceName) + log.Debugf("createKongServiceRoute, kongServiceNamePrefix %s", kongServiceNamePrefix) + + tags := buildTags(apfId, aefId, apiId, apiVersion, resourceName) + log.Debugf("createKongServiceRoute, tags %s", tags) + + kongServiceInfo := map[string]interface{}{ + "host": ipv4Addr, + "name": kongServiceNamePrefix, + "port": port, + "protocol": kongControlPlaneURLParsed.Scheme, + "path": kongServiceUri, + "tags": tags, } + // Kong admin API endpoint for creating a service + kongServicesURL := kongControlPlaneURL + "/services" + // Make the POST request to create the Kong service resp, err := client.R(). SetHeader("Content-Type", "application/json"). - SetBody(kongRouteInfo). - Post(kongRoutesURL) + SetBody(kongServiceInfo). + Post(kongServicesURL) // Check for errors in the request if err != nil { - log.Debugf("createKongRoute POST Error: %v", err) - return resp.StatusCode(), err + log.Errorf("createKongServiceRoute, Request Error: %v", err) + return "", http.StatusInternalServerError, err } // Check the response status code - if resp.StatusCode() == http.StatusCreated { - log.Infof("kong route %s created successfully", routeName) + statusCode = resp.StatusCode() + if statusCode == http.StatusCreated { + log.Infof("kong service %s created successfully", kongServiceNamePrefix) + } else if resp.StatusCode() == http.StatusConflict { + log.Errorf("kong service already exists. Status code: %d", resp.StatusCode()) + err = fmt.Errorf("service with identical apiName is already published") // for compatibilty with Capif error message on a duplicate service + statusCode = http.StatusForbidden // for compatibilty with the spec, TS29222_CAPIF_Publish_Service_API } else { - log.Debugf("kongRoutesURL %s", kongRoutesURL) - err = fmt.Errorf("error creating Kong route. Status code: %d", resp.StatusCode()) - log.Error(err.Error()) + err = fmt.Errorf("error creating Kong service. Status code: %d", resp.StatusCode()) + } + if err != nil { + log.Errorf(err.Error()) log.Errorf("response body: %s", resp.Body()) - return resp.StatusCode(), err + return "", statusCode, err } - return resp.StatusCode(), nil -} + // Create matching route + routeName := kongServiceNamePrefix -func buildUriWithVersion(apiVersion string, uri string) string { - if apiVersion != "" { - if apiVersion[0] != '/' { - apiVersion = "/" + apiVersion - } - if apiVersion[len(apiVersion)-1] != '/' && uri[0] != '/' { - apiVersion = apiVersion + "/" - } - uri = apiVersion + uri + kongRouteUri := prependUri(uriPrefix, kongRegexUri) + log.Debugf("createKongServiceRoute, kongRouteUri with uriPrefix %s", kongRouteUri) + + kongRouteUri = prependUri(sd.ApiName, kongRouteUri) + log.Debugf("createKongServiceRoute, kongRouteUri with apiName %s", kongRouteUri) + + specUri = prependUri(uriPrefix, specUri) + log.Debugf("createKongServiceRoute, specUri with uriPrefix %s", specUri) + + specUri = prependUri(sd.ApiName, specUri) + log.Debugf("createKongServiceRoute, specUri with apiName %s", specUri) + + statusCode, err = sd.createRouteForService(kongControlPlaneURL, client, resource, routeName, kongRouteUri, kongRegexUri, tags) + if err != nil { + log.Errorf(err.Error()) + return kongRouteUri, statusCode, err } - return uri + + return specUri, statusCode, err } func buildTags(apfId string, aefId string, apiId string, apiVersion string, resourceName string) []string { @@ -191,88 +423,223 @@ func buildTags(apfId string, aefId string, apiId string, apiVersion string, reso return tagsSlice } -func (sd *ServiceAPIDescription) createKongService(kongControlPlaneURL string, kongServiceName string, kongServiceUri string, tags []string) (int, error) { - log.Tracef("entering createKongService") - log.Tracef("createKongService, kongServiceName %s", kongServiceName) +func prependUri(prependUri string, uri string) string { + if prependUri != "" { + trimmedUri := uri + foundRegEx := false + if strings.HasPrefix(uri, "~") { + log.Debug("prependUri, found regex prefix") + foundRegEx = true + trimmedUri = strings.TrimPrefix(uri, "~") + log.Debugf("prependUri, TrimPrefix trimmedUri %s", trimmedUri) + } - // Define the service information for Kong - firstAEFProfileIpv4Addr, firstAEFProfilePort, err := sd.findFirstAEFProfile() - if err != nil { - return http.StatusBadRequest, err + if prependUri[0] != '/' { + prependUri = "/" + prependUri + } + if prependUri[len(prependUri)-1] != '/' && trimmedUri[0] != '/' { + prependUri = prependUri + "/" + } + uri = prependUri + trimmedUri + if foundRegEx { + uri = "~" + uri + } } + return uri +} - kongControlPlaneURLParsed, err := url.Parse(kongControlPlaneURL) - if err != nil { - return http.StatusInternalServerError, err +func (sd *ServiceAPIDescription) createRouteForService( + kongControlPlaneURL string, + client *resty.Client, + resource Resource, + routeName string, + kongRouteUri string, + kongRegexUri string, + tags []string) (int, error) { + + log.Debugf("createRouteForService, kongRouteUri %s", kongRouteUri) + + // Create a url.Values map to hold the form data + data := url.Values{} + data.Set("strip_path", "true") + log.Debugf("createRouteForService, strip_path %s", data.Get("strip_path")) + data.Set("name", routeName) + + routeUriPaths := []string{kongRouteUri} + for _, path := range routeUriPaths { + log.Debugf("createRouteForService, path %s", path) + data.Add("paths", path) } - log.Debugf("kongControlPlaneURL %s", kongControlPlaneURL) - log.Debugf("kongControlPlaneURLParsed.Scheme %s", kongControlPlaneURLParsed.Scheme) - kongServiceInfo := map[string]interface{}{ - "host": firstAEFProfileIpv4Addr, - "name": kongServiceName, - "port": firstAEFProfilePort, - "protocol": kongControlPlaneURLParsed.Scheme, - "path": kongServiceUri, - "tags": tags, + for _, tag := range tags { + log.Debugf("createRouteForService, tag %s", tag) + data.Add("tags", tag) } - // Kong admin API endpoint for creating a service - kongServicesURL := kongControlPlaneURL + "/services" + for _, op := range *resource.Operations { + log.Debugf("createRouteForService, op %s", string(op)) + data.Add("methods", string(op)) + } - // Create a new Resty client - client := resty.New() + // Encode the data to application/x-www-form-urlencoded format + encodedData := data.Encode() // Make the POST request to create the Kong service + serviceName := routeName + kongRoutesURL := kongControlPlaneURL + "/services/" + serviceName + "/routes" resp, err := client.R(). - SetHeader("Content-Type", "application/json"). - SetBody(kongServiceInfo). - Post(kongServicesURL) + SetHeader("Content-Type", "application/x-www-form-urlencoded"). + SetBody(strings.NewReader(encodedData)). + Post(kongRoutesURL) // Check for errors in the request if err != nil { - log.Errorf("create Kong Service Request Error: %v", err) - return http.StatusInternalServerError, err + log.Debugf("createRouteForService POST Error: %v", err) + return resp.StatusCode(), err } // Check the response status code - statusCode := resp.StatusCode() - if statusCode == http.StatusCreated { - log.Infof("kong service %s created successfully", kongServiceName) - } else if resp.StatusCode() == http.StatusConflict { - log.Errorf("kong service already exists. Status code: %d", resp.StatusCode()) - err = fmt.Errorf("service with identical apiName is already published") // for compatibilty with Capif error message on a duplicate service - statusCode = http.StatusForbidden // for compatibilty with the spec, TS29222_CAPIF_Publish_Service_API + if resp.StatusCode() == http.StatusCreated { + log.Infof("kong route %s created successfully", routeName) + + index := strings.Index(kongRegexUri, "(?") + if index != -1 { + log.Debugf("createRouteForService, found regex in %s", kongRegexUri) + requestTransformerUri := strings.TrimPrefix(kongRegexUri, "~") + log.Debugf("createRouteForService, requestTransformerUri %s", requestTransformerUri) + + statusCode, err := sd.createRequestTransformer(kongControlPlaneURL, client, routeName, requestTransformerUri) + if (err != nil) || ((statusCode != http.StatusCreated) && (statusCode != http.StatusForbidden)) { + return statusCode, err + } + } else { + log.Debug("createRouteForService, no variable name found") + } } else { - err = fmt.Errorf("error creating Kong service. Status code: %d", resp.StatusCode()) + log.Debugf("kongRoutesURL %s", kongRoutesURL) + err = fmt.Errorf("error creating Kong route. Status code: %d", resp.StatusCode()) + log.Error(err.Error()) + log.Errorf("response body: %s", resp.Body()) + return resp.StatusCode(), err + } + + return resp.StatusCode(), nil +} + +func (sd *ServiceAPIDescription) createRequestTransformer( + kongControlPlaneURL string, + client *resty.Client, + routeName string, + routePattern string) (int, error) { + + log.Trace("entering createRequestTransformer") + + // Make the POST request to create the Kong Request Transformer + kongRequestTransformerURL := kongControlPlaneURL + "/routes/" + routeName + "/plugins" + + transformPattern, _ := deriveTransformPattern(routePattern) + + // Create the form data + formData := url.Values{ + "name": {"request-transformer"}, + "config.replace.uri": {transformPattern}, } + encodedData := formData.Encode() + + // Create a new HTTP POST request + resp, err := client.R(). + SetHeader("Content-Type", "application/x-www-form-urlencoded"). + SetBody(strings.NewReader(encodedData)). + Post(kongRequestTransformerURL) + + // Check for errors in the request if err != nil { - log.Errorf(err.Error()) + log.Debugf("createRequestTransformer POST Error: %v", err) + return resp.StatusCode(), err + } + + // Check the response status code + if resp.StatusCode() == http.StatusCreated { + log.Infof("kong request transformer for route %s created successfully", routeName) + } else { + log.Debugf("kongRequestTransformerURL %s", kongRequestTransformerURL) + err = fmt.Errorf("error creating Kong request transformer. Status code: %d", resp.StatusCode()) + log.Error(err.Error()) log.Errorf("response body: %s", resp.Body()) + return resp.StatusCode(), err } - return statusCode, err + return resp.StatusCode(), nil } -func (sd *ServiceAPIDescription) findFirstAEFProfile() (common29122.Ipv4Addr, common29122.Port, error) { - log.Tracef("entering findFirstAEFProfile") - var aefProfile AefProfile - if *sd.AefProfiles != nil { - aefProfile = (*sd.AefProfiles)[0] +// Function to derive the transform pattern from the route pattern +func deriveKongPattern(routePattern string) (string, error) { + log.Trace("entering deriveKongPattern") + log.Debugf("deriveKongPattern routePattern %s", routePattern) + + // Regular expression to match variable names + re := regexp.MustCompile(`\{([a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*)\}`) + log.Debugf("deriveKongPattern MustCompile %v", re) + + // Find all matches in the route pattern + matches := re.FindAllStringSubmatch(routePattern, -1) + log.Debugf("deriveKongPattern FindAllStringSubmatch %v", re) + + transformPattern := routePattern + for _, match := range matches { + // match[0] is the full match with braces + // match[1] is the uri variable name + log.Debugf("deriveKongPattern match %v", match) + log.Debugf("deriveKongPattern match[0] %v", match[0]) + log.Debugf("deriveKongPattern match[1] %v", match[1]) + placeholder := fmt.Sprintf("(?<%s>[a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*)", match[1]) + // Replace the variable with the Kong regex placeholder + transformPattern = strings.Replace(transformPattern, match[0], placeholder, 1) } - if (*sd.AefProfiles == nil) || (aefProfile.InterfaceDescriptions == nil) { - err := errors.New("cannot read interfaceDescription") - log.Errorf(err.Error()) - return "", common29122.Port(0), err + log.Debugf("deriveKongPattern transformPattern %s", transformPattern) + + if len(matches) != 0 { + transformPattern = "~" + transformPattern + log.Debugf("deriveKongPattern transformPattern with prefix %s", transformPattern) + } + + return transformPattern, nil +} + + +// Function to derive the transform pattern from the route pattern +func deriveTransformPattern(routePattern string) (string, error) { + log.Trace("entering deriveTransformPattern") + log.Debugf("deriveTransformPattern routePattern %s", routePattern) + + // Append a slash to handle an edge case for matching a trailing capture group. + appendedSlash := false + if routePattern[len(routePattern)-1] != '/' { + routePattern = routePattern + "/" + appendedSlash = true + log.Debugf("deriveTransformPattern, append / routePattern %s", routePattern) } - interfaceDescription := (*aefProfile.InterfaceDescriptions)[0] - firstIpv4Addr := *interfaceDescription.Ipv4Addr - firstPort := *interfaceDescription.Port + // Regular expression to match named capture groups + re := regexp.MustCompile(`\(\?<([^>]+)>([^\/]+)`) + // Find all matches in the route pattern + matches := re.FindAllStringSubmatch(routePattern, -1) + + transformPattern := routePattern + for _, match := range matches { + // match[0] is the full match, match[1] is the capture group name, match[2] is the pattern + placeholder := fmt.Sprintf("$(uri_captures[\"%s\"])", match[1]) + // Replace the capture group with the corresponding placeholder + transformPattern = strings.Replace(transformPattern, match[0], placeholder, 1) + } + log.Debugf("deriveTransformPattern transformPattern %s", transformPattern) - log.Debugf("findFirstAEFProfile firstIpv4Addr %s firstPort %d", firstIpv4Addr, firstPort) + if appendedSlash { + transformPattern = strings.TrimSuffix(transformPattern, "/") + log.Debugf("deriveTransformPattern, remove / transformPattern %s", transformPattern) + } - return firstIpv4Addr, firstPort, nil + return transformPattern, nil } // Update our exposures to point to Kong by replacing in incoming interface description with Kong interface descriptions. diff --git a/servicemanager/main.go b/servicemanager/main.go index 5b949aa..d0fbe4f 100644 --- a/servicemanager/main.go +++ b/servicemanager/main.go @@ -48,8 +48,9 @@ import ( func main() { realConfigReader := &envreader.RealConfigReader{} myEnv, myPorts, err := realConfigReader.ReadDotEnv() + if err != nil { - log.Fatal("error loading environment file") + log.Fatalf("error loading environment file, %v", err) return } @@ -87,7 +88,7 @@ func registerHandlers(e *echo.Echo, myEnv map[string]string, myPorts map[string] // Register ProviderManagement providerManagerSwagger, err := providermanagementapi.GetSwagger() if err != nil { - log.Fatalf("error loading ProviderManagement swagger spec\n: %s", err) + log.Fatalf("error loading ProviderManagement swagger spec\n: %v", err) return err } providerManagerSwagger.Servers = nil @@ -99,7 +100,7 @@ func registerHandlers(e *echo.Echo, myEnv map[string]string, myPorts map[string] // Register PublishService publishServiceSwagger, err := publishserviceapi.GetSwagger() if err != nil { - log.Fatalf("error loading PublishService swagger spec\n: %s", err) + log.Fatalf("error loading PublishService swagger spec\n: %v", err) return err } publishServiceSwagger.Servers = nil @@ -116,7 +117,7 @@ func registerHandlers(e *echo.Echo, myEnv map[string]string, myPorts map[string] // Register InvokerManagement invokerManagerSwagger, err := invokermanagementapi.GetSwagger() if err != nil { - log.Fatalf("error loading InvokerManagement swagger spec\n: %s", err) + log.Fatalf("error loading InvokerManagement swagger spec\n: %v", err) return err } invokerManagerSwagger.Servers = nil @@ -128,7 +129,7 @@ func registerHandlers(e *echo.Echo, myEnv map[string]string, myPorts map[string] // Register DiscoverService discoverServiceSwagger, err := discoverserviceapi.GetSwagger() if err != nil { - log.Fatalf("error loading DiscoverService swagger spec\n: %s", err) + log.Fatalf("error loading DiscoverService swagger spec\n: %v", err) return err } @@ -155,7 +156,7 @@ func keepServerAlive() { } func hello(c echo.Context) error { - return c.String(http.StatusOK, "Hello, World!") + return c.String(http.StatusOK, "Hello World, from Service Manager!") } func getSwagger(c echo.Context) error { diff --git a/servicemanager/mockkong/kong_mock.go b/servicemanager/mockkong/kong_mock.go index 14acd57..8191c03 100644 --- a/servicemanager/mockkong/kong_mock.go +++ b/servicemanager/mockkong/kong_mock.go @@ -85,6 +85,238 @@ func RegisterHandlers(e *echo.Echo) { return c.String(http.StatusCreated, string(body)) }) + e.POST("/services/api_id_apiName_helloworld-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_helloworld-v1-id_helloworld-id-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_helloworld-v1_helloworld-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/routes/api_id_helloworld-v1-id_helloworld-id-04478a3a-d0ef-5a05-a575-db5ee2e33403/plugins", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_helloworld-no-version_helloworld-no-version-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/routes/api_id_helloworld-no-version_helloworld-no-version-04478a3a-d0ef-5a05-a575-db5ee2e33403/plugins", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_apiName1_helloworld-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_apiName2_helloworld-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_apiName1_app-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_apiName2_app-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_helloworld-v1-helloworld-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_helloworld-v1-id-helloworld-id-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/routes/api_id_helloworld-v1-id-helloworld-id-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/plugins", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_helloworld-no-version-helloworld-no-version-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/routes/api_id_helloworld-no-version-helloworld-no-version-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/plugins", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_apiName-helloworld-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_apiName1-helloworld-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_apiName1-app-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_apiName2-helloworld-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_apiName2-app-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_apiName_helloworld-id/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_apiName_helloworld-no-version/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_helloworld-v1-id_helloworld-id/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_helloworld-v1_helloworld/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/services/api_id_helloworld-no-version_helloworld-no-version/routes", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/routes/api_id_apiName_helloworld-id/plugins", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/routes/api_id_apiName_helloworld-no-version/plugins", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/routes/api_id_helloworld-v1-id_helloworld-id/plugins", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + + e.POST("/routes/api_id_helloworld-no-version_helloworld-no-version/plugins", func(c echo.Context) error { + body, err := io.ReadAll(c.Request().Body) + if err != nil { + return c.String(http.StatusInternalServerError, "Error reading request body") + } + return c.String(http.StatusCreated, string(body)) + }) + e.GET("/services", func(c echo.Context) error { return c.String(http.StatusOK, "{}") }) @@ -132,4 +364,45 @@ func RegisterHandlers(e *echo.Echo) { e.DELETE("/services/api_id_apiName2_app", func(c echo.Context) error { return c.NoContent(http.StatusNoContent) }) -} \ No newline at end of file + + e.DELETE("/routes/api_id_apiName_helloworld-id", func(c echo.Context) error { + return c.NoContent(http.StatusNoContent) + }) + + e.DELETE("/routes/api_id_apiName_helloworld-no-version", func(c echo.Context) error { + return c.NoContent(http.StatusNoContent) + }) + + e.DELETE("/routes/api_id_helloworld-v1_helloworld", func(c echo.Context) error { + return c.NoContent(http.StatusNoContent) + }) + + e.DELETE("/services/api_id_apiName_helloworld-id", func(c echo.Context) error { + return c.NoContent(http.StatusNoContent) + }) + + e.DELETE("/services/api_id_apiName_helloworld-no-version", func(c echo.Context) error { + return c.NoContent(http.StatusNoContent) + }) + + e.DELETE("/services/api_id_helloworld-v1_helloworld", func(c echo.Context) error { + return c.NoContent(http.StatusNoContent) + }) + + e.DELETE("routes/api_id_helloworld-no-version_helloworld-no-version", func(c echo.Context) error { + return c.NoContent(http.StatusNoContent) + }) + + e.DELETE("services/api_id_helloworld-no-version_helloworld-no-version", func(c echo.Context) error { + return c.NoContent(http.StatusNoContent) + }) + + e.DELETE("/routes/api_id_helloworld-v1-id_helloworld-id", func(c echo.Context) error { + return c.NoContent(http.StatusNoContent) + }) + + e.DELETE("/services/api_id_helloworld-v1-id_helloworld-id", func(c echo.Context) error { + return c.NoContent(http.StatusNoContent) + }) + +}