iotagent-node-lib 2.15.1 → 2.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +17 -1
- package/.readthedocs.yml +7 -0
- package/CHANGES_NEXT_RELEASE +0 -1
- package/README.md +1 -0
- package/doc/Contribution.md +60 -1
- package/doc/advanced-topics.md +136 -14
- package/doc/api.md +38 -22
- package/doc/apiary/iotagent.apib +1 -3
- package/doc/architecture.md +2 -2
- package/doc/config-basic-example.js +0 -1
- package/doc/deprecated.md +2 -2
- package/doc/development.md +13 -6
- package/doc/expressionLanguage.md +519 -277
- package/doc/getting-started.md +0 -1
- package/doc/howto.md +13 -17
- package/doc/installationguide.md +67 -69
- package/doc/usermanual.md +48 -16
- package/docker/Mosquitto/Dockerfile +4 -9
- package/docker/Mosquitto/README.md +2 -0
- package/docker/Mosquitto/startMosquitto.sh +18 -1
- package/lib/command/commandLine.js +1 -1
- package/lib/commonConfig.js +5 -14
- package/lib/errors.js +0 -16
- package/lib/fiware-iotagent-lib.js +5 -0
- package/lib/jexlTranformsMap.js +71 -0
- package/lib/model/Command.js +1 -1
- package/lib/model/Device.js +5 -2
- package/lib/model/Group.js +20 -2
- package/lib/model/dbConn.js +7 -1
- package/lib/plugins/attributeAlias.js +6 -13
- package/lib/plugins/bidirectionalData.js +2 -27
- package/lib/plugins/expressionParser.js +41 -17
- package/lib/plugins/expressionPlugin.js +21 -27
- package/lib/plugins/jexlParser.js +71 -67
- package/lib/plugins/multiEntity.js +68 -147
- package/lib/plugins/pluginUtils.js +12 -48
- package/lib/plugins/timestampProcessPlugin.js +1 -46
- package/lib/request-shim.js +111 -0
- package/lib/services/common/domain.js +2 -2
- package/lib/services/common/genericMiddleware.js +6 -2
- package/lib/services/common/iotManagerService.js +1 -1
- package/lib/services/common/securityServiceKeystone.js +1 -1
- package/lib/services/common/securityServiceOAuth2.js +3 -2
- package/lib/services/devices/deviceRegistryMongoDB.js +29 -22
- package/lib/services/devices/deviceService.js +56 -33
- package/lib/services/devices/devices-NGSI-LD.js +42 -14
- package/lib/services/devices/devices-NGSI-mixed.js +3 -3
- package/lib/services/devices/devices-NGSI-v2.js +48 -24
- package/lib/services/devices/registrationUtils.js +1 -134
- package/lib/services/groups/groupRegistryMemory.js +2 -0
- package/lib/services/groups/groupRegistryMongoDB.js +58 -76
- package/lib/services/groups/groupService.js +1 -1
- package/lib/services/ngsi/entities-NGSI-LD.js +205 -124
- package/lib/services/ngsi/entities-NGSI-v2.js +142 -32
- package/lib/services/ngsi/ngsiService.js +4 -6
- package/lib/services/ngsi/ngsiUtils.js +0 -21
- package/lib/services/ngsi/subscription-NGSI-LD.js +14 -5
- package/lib/services/ngsi/subscriptionService.js +1 -4
- package/lib/services/northBound/contextServer-NGSI-LD.js +7 -2
- package/lib/services/northBound/contextServer-NGSI-v2.js +25 -13
- package/lib/services/northBound/contextServer.js +1 -4
- package/lib/services/northBound/contextServerUtils.js +0 -81
- package/lib/services/northBound/deviceProvisioningServer.js +36 -9
- package/lib/services/northBound/northboundServer.js +2 -0
- package/lib/services/northBound/restUtils.js +2 -39
- package/lib/templates/updateDevice.json +4 -0
- package/lib/templates/updateDeviceLax.json +4 -0
- package/package.json +13 -13
- package/test/tools/utils.js +2 -0
- package/test/unit/examples/deviceProvisioningRequests/provisionAnotherDevice.json +1 -1
- package/test/unit/examples/deviceProvisioningRequests/provisionDeviceMissingParameters.json +1 -1
- package/test/unit/examples/deviceProvisioningRequests/provisionDuplicatedDev.json +1 -1
- package/test/unit/examples/deviceProvisioningRequests/provisionFullDevice.json +1 -1
- package/test/unit/examples/deviceProvisioningRequests/provisionNewDeviceMalformed1.json +1 -1
- package/test/unit/examples/groupProvisioningRequests/multipleGroupsCreation.json +1 -1
- package/test/unit/examples/iotamRequests/registrationEmpty.json +1 -1
- package/test/unit/examples/iotamRequests/registrationWithGroups.json +2 -2
- package/test/unit/examples/iotamRequests/registrationWithGroupsWithoutCB.json +2 -2
- package/test/unit/examples/iotamRequests/registrationWithStaticGroups.json +2 -2
- package/test/unit/expressions/jexlExpression-test.js +119 -0
- package/test/unit/general/config-multi-core-test.js +1 -1
- package/test/unit/general/contextBrokerKeystoneSecurityAccess-test.js +30 -77
- package/test/unit/general/deviceService-test.js +19 -35
- package/test/unit/general/loglevel-api_test.js +8 -13
- package/test/unit/general/migration-test.js +1 -0
- package/test/unit/general/startup-test.js +3 -2
- package/test/unit/general/statistics-persistence_test.js +2 -2
- package/test/unit/general/statistics-service_test.js +2 -2
- package/test/unit/lazyAndCommands/commandRegistry_test.js +18 -18
- package/test/unit/memoryRegistry/deviceRegistryMemory_test.js +16 -24
- package/test/unit/mongodb/mongodb-connectionoptions-test.js +2 -2
- package/test/unit/mongodb/mongodb-group-registry-test.js +11 -11
- package/test/unit/mongodb/mongodb-registry-test.js +55 -131
- package/test/unit/ngsi-ld/examples/contextAvailabilityRequests/registerIoTAgent1.json +1 -1
- package/test/unit/ngsi-ld/examples/contextAvailabilityRequests/registerIoTAgent2.json +1 -1
- package/test/unit/ngsi-ld/examples/contextAvailabilityRequests/registerIoTAgent4.json +1 -1
- package/test/unit/ngsi-ld/examples/contextAvailabilityRequests/registerIoTAgentCommands.json +1 -1
- package/test/unit/ngsi-ld/examples/contextAvailabilityRequests/registerProvisionedDevice.json +1 -1
- package/test/unit/ngsi-ld/examples/contextAvailabilityRequests/registerProvisionedDevice2.json +1 -1
- package/test/unit/ngsi-ld/examples/contextAvailabilityRequests/registerProvisionedDeviceWithGroup.json +1 -1
- package/test/unit/ngsi-ld/examples/contextAvailabilityRequests/registerProvisionedDeviceWithGroup2.json +1 -1
- package/test/unit/ngsi-ld/examples/contextAvailabilityRequests/registerProvisionedDeviceWithGroup3.json +1 -1
- package/test/unit/ngsi-ld/examples/contextAvailabilityRequests/updateCommands1.json +1 -1
- package/test/unit/ngsi-ld/examples/contextAvailabilityRequests/updateIoTAgent1.json +1 -1
- package/test/unit/ngsi-ld/examples/contextAvailabilityRequests/updateIoTAgent2.json +1 -1
- package/test/unit/ngsi-ld/examples/contextAvailabilityRequests/updateIoTAgent3.json +1 -1
- package/test/unit/ngsi-ld/examples/contextRequests/createMinimumProvisionedDevice.json +0 -7
- package/test/unit/ngsi-ld/examples/contextRequests/createProvisionedDevice.json +0 -7
- package/test/unit/ngsi-ld/examples/contextRequests/createProvisionedDeviceMultientity.json +0 -7
- package/test/unit/ngsi-ld/examples/contextRequests/createProvisionedDeviceWithGroupAndStatic.json +0 -14
- package/test/unit/ngsi-ld/examples/contextRequests/createProvisionedDeviceWithGroupAndStatic2.json +0 -14
- package/test/unit/ngsi-ld/examples/contextRequests/createProvisionedDeviceWithGroupAndStatic3.json +1 -15
- package/test/unit/ngsi-ld/examples/contextRequests/createTimeInstantMinimumDevice.json +0 -7
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextAliasPlugin6.json +0 -7
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextAutocast5.json +0 -7
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin12a.json +7 -0
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin13.json +13 -13
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin16.json +0 -7
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin17.json +0 -7
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin1a.json +18 -0
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin29.json +18 -0
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin31.json +15 -0
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin32.json +17 -0
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin33.json +18 -0
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin34.json +17 -0
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin4a.json +36 -0
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin5.json +0 -7
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin7.json +16 -16
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin8a.json +18 -0
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextGeoproperties3.json +0 -7
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextMultientityPlugin15.json +25 -0
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextMultientityTimestampPlugin1.json +6 -6
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextMultientityTimestampPlugin2.json +3 -3
- package/test/unit/ngsi-ld/examples/contextRequests/updateProvisionActiveAttributes1.json +0 -7
- package/test/unit/ngsi-ld/examples/contextRequests/updateProvisionCommands1.json +0 -7
- package/test/unit/ngsi-ld/examples/contextRequests/updateProvisionDeviceStatic.json +0 -7
- package/test/unit/ngsi-ld/examples/contextRequests/updateProvisionMinimumDevice.json +0 -7
- package/test/unit/ngsi-ld/examples/subscriptionRequests/bidirectionalSubscriptionRequest.json +20 -17
- package/test/unit/ngsi-ld/examples/subscriptionRequests/simpleSubscriptionRequest.json +18 -15
- package/test/unit/ngsi-ld/examples/subscriptionRequests/simpleSubscriptionRequest2.json +18 -15
- package/test/unit/ngsi-ld/expressions/expressionBasedTransformations-test.js +21 -21
- package/test/unit/ngsi-ld/expressions/jexlBasedTransformations-test.js +1018 -0
- package/test/unit/ngsi-ld/general/config-jsonld-contexts-test.js +2 -2
- package/test/unit/ngsi-ld/general/contextBrokerOAuthSecurityAccess-test.js +24 -24
- package/test/unit/ngsi-ld/general/deviceService-test.js +7 -7
- package/test/unit/ngsi-ld/general/https-support-test.js +14 -13
- package/test/unit/ngsi-ld/general/iotam-autoregistration-test.js +8 -7
- package/test/unit/ngsi-ld/general/startup-test.js +2 -1
- package/test/unit/ngsi-ld/lazyAndCommands/active-devices-attribute-update-test.js +10 -8
- package/test/unit/ngsi-ld/lazyAndCommands/command-test.js +11 -12
- package/test/unit/ngsi-ld/lazyAndCommands/lazy-devices-test.js +25 -29
- package/test/unit/ngsi-ld/lazyAndCommands/polling-commands-test.js +16 -15
- package/test/unit/ngsi-ld/ngsiService/active-devices-test.js +18 -17
- package/test/unit/ngsi-ld/ngsiService/autocast-test.js +13 -12
- package/test/unit/ngsi-ld/ngsiService/geoproperties-test.js +10 -9
- package/test/unit/ngsi-ld/ngsiService/staticAttributes-test.js +3 -3
- package/test/unit/ngsi-ld/ngsiService/subscriptions-test.js +25 -24
- package/test/unit/ngsi-ld/plugins/alias-plugin_test.js +13 -12
- package/test/unit/ngsi-ld/plugins/bidirectional-plugin_test.js +27 -26
- package/test/unit/ngsi-ld/plugins/compress-timestamp-plugin_test.js +5 -5
- package/test/unit/ngsi-ld/plugins/event-plugin_test.js +3 -3
- package/test/unit/ngsi-ld/plugins/multientity-plugin_test.js +75 -14
- package/test/unit/ngsi-ld/plugins/timestamp-processing-plugin_test.js +3 -3
- package/test/unit/ngsi-ld/provisioning/device-provisioning-api_test.js +54 -53
- package/test/unit/ngsi-ld/provisioning/device-registration_test.js +20 -19
- package/test/unit/ngsi-ld/provisioning/device-update-registration_test.js +23 -22
- package/test/unit/ngsi-ld/provisioning/listProvisionedDevices-test.js +58 -70
- package/test/unit/ngsi-ld/provisioning/provisionDeviceMultientity-test.js +8 -7
- package/test/unit/ngsi-ld/provisioning/removeProvisionedDevice-test.js +19 -19
- package/test/unit/ngsi-ld/provisioning/singleConfigurationMode-test.js +18 -20
- package/test/unit/ngsi-ld/provisioning/updateProvisionedDevices-test.js +43 -49
- package/test/unit/ngsi-mixed/provisioning/ngsi-versioning-test.js +16 -14
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerIoTAgent1.json +1 -1
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerIoTAgent2.json +1 -1
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerIoTAgent3.json +19 -0
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerIoTAgent4.json +1 -1
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerIoTAgent5.json +19 -0
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerIoTAgentCommands.json +1 -1
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerProvisionedDevice.json +1 -1
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerProvisionedDevice2.json +1 -1
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerProvisionedDeviceWithGroup.json +1 -1
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerProvisionedDeviceWithGroup2.json +1 -1
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerProvisionedDeviceWithGroup3.json +1 -1
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/updateCommands1.json +3 -3
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/updateIoTAgent1.json +3 -3
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/updateIoTAgent2.json +1 -1
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/updateIoTAgent3.json +1 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin1.json +17 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin11.json +5 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin12.json +2 -2
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin15.json +6 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin16.json +14 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin17.json +14 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin18.json +6 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin19.json +6 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin2.json +13 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin20.json +6 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin21.json +6 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin22.json +6 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin23.json +6 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin24.json +6 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin25.json +6 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin26.json +6 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin27.json +6 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin28.json +6 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin29.json +22 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin3.json +5 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin30.json +6 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin31.json +18 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin32.json +16 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin33.json +22 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin34.json +12 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin4.json +12 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin5.json +5 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin6.json +5 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin7.json +5 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin8.json +17 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin9.json +5 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMiddleware1.json +10 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMiddleware2.json +10 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin1.json +2 -2
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin10.json +1 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin11.json +13 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin12.json +33 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin13.json +33 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin14.json +33 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin15.json +25 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin16.json +25 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin2.json +2 -2
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin3.json +1 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin4.json +1 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin5.json +1 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin6.json +1 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin7.json +1 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin8.json +2 -2
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin9.json +1 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityTimestampPlugin1.json +8 -8
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityTimestampPlugin2.json +4 -4
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityTimestampPlugin3.json +1 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityTimestampPlugin4.json +2 -2
- package/test/unit/ngsiv2/examples/contextRequests/updateProvisionDevice.json +20 -0
- package/test/unit/ngsiv2/examples/subscriptionRequests/bidirectionalSubscriptionRequest.json +1 -1
- package/test/unit/ngsiv2/examples/subscriptionRequests/simpleSubscriptionRequest.json +1 -1
- package/test/unit/ngsiv2/examples/subscriptionRequests/simpleSubscriptionRequest2.json +1 -1
- package/test/unit/ngsiv2/expressions/expressionBasedTransformations-test.js +93 -60
- package/test/unit/ngsiv2/expressions/expressionCombinedTransformations-test.js +16 -16
- package/test/unit/ngsiv2/expressions/jexlBasedTransformations-test.js +548 -164
- package/test/unit/ngsiv2/general/contextBrokerOAuthSecurityAccess-test.js +34 -33
- package/test/unit/ngsiv2/general/deviceService-test.js +15 -14
- package/test/unit/ngsiv2/general/https-support-test.js +14 -13
- package/test/unit/ngsiv2/general/iotam-autoregistration-test.js +8 -7
- package/test/unit/ngsiv2/general/startup-test.js +2 -1
- package/test/unit/ngsiv2/lazyAndCommands/active-devices-attribute-update-test.js +9 -7
- package/test/unit/ngsiv2/lazyAndCommands/command-test.js +13 -12
- package/test/unit/ngsiv2/lazyAndCommands/lazy-devices-test.js +323 -51
- package/test/unit/ngsiv2/lazyAndCommands/polling-commands-test.js +22 -20
- package/test/unit/ngsiv2/ngsiService/active-devices-test.js +114 -26
- package/test/unit/ngsiv2/ngsiService/autocast-test.js +16 -16
- package/test/unit/ngsiv2/ngsiService/geoproperties-test.js +39 -38
- package/test/unit/{ngsiService → ngsiv2/ngsiService}/queryDeviceInformationInCb-test.js +25 -54
- package/test/unit/ngsiv2/ngsiService/staticAttributes-test.js +5 -5
- package/test/unit/ngsiv2/ngsiService/subscriptions-test.js +25 -24
- package/test/unit/ngsiv2/plugins/alias-plugin_test.js +22 -22
- package/test/unit/ngsiv2/plugins/bidirectional-plugin_test.js +27 -26
- package/test/unit/ngsiv2/plugins/compress-timestamp-plugin_test.js +7 -7
- package/test/unit/ngsiv2/plugins/event-plugin_test.js +4 -4
- package/test/unit/ngsiv2/plugins/multientity-plugin_test.js +549 -24
- package/test/unit/ngsiv2/plugins/timestamp-processing-plugin_test.js +4 -4
- package/test/unit/{plugins → ngsiv2/plugins}/translation-inPlugins_test.js +25 -25
- package/test/unit/{provisioning → ngsiv2/provisioning}/device-group-api-test.js +44 -75
- package/test/unit/{provisioning/device-group-utils_test.js → ngsiv2/provisioning/device-group-utils-test.js} +15 -14
- package/test/unit/ngsiv2/provisioning/device-provisioning-api_test.js +74 -73
- package/test/unit/ngsiv2/provisioning/device-registration_test.js +20 -19
- package/test/unit/ngsiv2/provisioning/device-update-registration_test.js +30 -29
- package/test/unit/ngsiv2/provisioning/listProvisionedDevices-test.js +58 -69
- package/test/unit/ngsiv2/provisioning/provisionDeviceMultientity-test.js +8 -7
- package/test/unit/ngsiv2/provisioning/removeProvisionedDevice-test.js +19 -19
- package/test/unit/ngsiv2/provisioning/singleConfigurationMode-test.js +18 -19
- package/test/unit/ngsiv2/provisioning/updateProvisionedDevices-test.js +49 -52
- package/test/unit/plugins/capture-configuration-inPlugins_test.js +6 -4
- package/test/unit/plugins/capture-provision-inPlugins_test.js +13 -23
- package/.nyc_output/016aca19-69bf-4681-9b41-2835c5131681.json +0 -1
- package/.nyc_output/processinfo/016aca19-69bf-4681-9b41-2835c5131681.json +0 -1
- package/.nyc_output/processinfo/index.json +0 -1
- package/lib/services/devices/devices-NGSI-v1.js +0 -293
- package/lib/services/devices/registrationUtils.js_avega +0 -589
- package/lib/services/ngsi/entities-NGSI-v1.js +0 -300
- package/lib/services/ngsi/subscription-NGSI-v1.js +0 -234
- package/lib/services/northBound/contextServer-NGSI-v1.js +0 -526
- package/lib/templates/notificationTemplateNgsi1.json +0 -75
- package/lib/templates/updateContextNgsi1.json +0 -50
- package/test/unit/examples/contextAvailabilityRequests/registerIoTAgent1.json +0 -21
- package/test/unit/examples/contextAvailabilityRequests/registerIoTAgent2.json +0 -21
- package/test/unit/examples/contextAvailabilityRequests/registerIoTAgent3.json +0 -25
- package/test/unit/examples/contextAvailabilityRequests/registerIoTAgent4.json +0 -22
- package/test/unit/examples/contextAvailabilityRequests/registerIoTAgentAttributeUpdates.json +0 -16
- package/test/unit/examples/contextAvailabilityRequests/registerIoTAgentCommands.json +0 -21
- package/test/unit/examples/contextAvailabilityRequests/registerNewDevice1.json +0 -21
- package/test/unit/examples/contextAvailabilityRequests/registerNewDevice2.json +0 -21
- package/test/unit/examples/contextAvailabilityRequests/registerProvisionedDevice.json +0 -25
- package/test/unit/examples/contextAvailabilityRequests/registerProvisionedDevice2.json +0 -21
- package/test/unit/examples/contextAvailabilityRequests/registerProvisionedDeviceWithGroup.json +0 -33
- package/test/unit/examples/contextAvailabilityRequests/registerProvisionedDeviceWithGroup2.json +0 -33
- package/test/unit/examples/contextAvailabilityRequests/unregisterDevice1.json +0 -22
- package/test/unit/examples/contextAvailabilityRequests/unregisterDevice3.json +0 -26
- package/test/unit/examples/contextAvailabilityRequests/unregisterProvisionedDevice.json +0 -26
- package/test/unit/examples/contextAvailabilityRequests/updateCommands1.json +0 -22
- package/test/unit/examples/contextAvailabilityRequests/updateIoTAgent1.json +0 -22
- package/test/unit/examples/contextAvailabilityRequests/updateIoTAgent2.json +0 -26
- package/test/unit/examples/contextAvailabilityRequests/updateIoTAgent3.json +0 -22
- package/test/unit/examples/contextAvailabilityResponses/registerIoTAgent1Failed.json +0 -8
- package/test/unit/examples/contextAvailabilityResponses/registerIoTAgent1Success.json +0 -4
- package/test/unit/examples/contextAvailabilityResponses/registerNewDevice1Success.json +0 -4
- package/test/unit/examples/contextAvailabilityResponses/registerNewDevice2Success.json +0 -4
- package/test/unit/examples/contextAvailabilityResponses/registerProvisionedDeviceSuccess.json +0 -4
- package/test/unit/examples/contextAvailabilityResponses/unregisterDevice1Failed.json +0 -8
- package/test/unit/examples/contextAvailabilityResponses/unregisterDevice1Success.json +0 -4
- package/test/unit/examples/contextAvailabilityResponses/updateCommands1Success.json +0 -4
- package/test/unit/examples/contextAvailabilityResponses/updateIoTAgent1Success.json +0 -6
- package/test/unit/examples/contextProviderResponses/queryInformationResponse.json +0 -22
- package/test/unit/examples/contextProviderResponses/queryInformationResponseEmptyAttributes.json +0 -22
- package/test/unit/examples/contextProviderResponses/queryInformationStaticAttributesResponse.json +0 -27
- package/test/unit/examples/contextProviderResponses/updateInformationResponse.json +0 -22
- package/test/unit/examples/contextProviderResponses/updateInformationResponse2.json +0 -22
- package/test/unit/examples/contextRequests/contextSubscriptionRequest.json +0 -20
- package/test/unit/examples/contextRequests/contextSubscriptionRequest2.json +0 -20
- package/test/unit/examples/contextRequests/createBidirectionalDevice.json +0 -17
- package/test/unit/examples/contextRequests/createDatetimeProvisionedDevice.json +0 -17
- package/test/unit/examples/contextRequests/createGeopointProvisionedDevice.json +0 -17
- package/test/unit/examples/contextRequests/createMinimumProvisionedDevice.json +0 -17
- package/test/unit/examples/contextRequests/createProvisionedDevice.json +0 -32
- package/test/unit/examples/contextRequests/createProvisionedDeviceMultientity.json +0 -32
- package/test/unit/examples/contextRequests/createProvisionedDeviceWithGroup.json +0 -47
- package/test/unit/examples/contextRequests/createProvisionedDeviceWithGroupAndStatic.json +0 -52
- package/test/unit/examples/contextRequests/createProvisionedDeviceWithGroupAndStatic2.json +0 -52
- package/test/unit/examples/contextRequests/createTimeinstantDevice.json +0 -17
- package/test/unit/examples/contextRequests/queryContext1.json +0 -13
- package/test/unit/examples/contextRequests/queryContext2.json +0 -13
- package/test/unit/examples/contextRequests/queryContextAliasPlugin1.json +0 -10
- package/test/unit/examples/contextRequests/queryContextCompressTimestamp1.json +0 -13
- package/test/unit/examples/contextRequests/updateActiveAttributes.json +0 -11
- package/test/unit/examples/contextRequests/updateContext1.json +0 -22
- package/test/unit/examples/contextRequests/updateContext2.json +0 -22
- package/test/unit/examples/contextRequests/updateContext3.json +0 -17
- package/test/unit/examples/contextRequests/updateContext3WithStatic.json +0 -22
- package/test/unit/examples/contextRequests/updateContext4.json +0 -22
- package/test/unit/examples/contextRequests/updateContext5.json +0 -19
- package/test/unit/examples/contextRequests/updateContextAliasPlugin.json +0 -22
- package/test/unit/examples/contextRequests/updateContextAliasPlugin2.json +0 -17
- package/test/unit/examples/contextRequests/updateContextAppendMode.json +0 -22
- package/test/unit/examples/contextRequests/updateContextCommandError.json +0 -22
- package/test/unit/examples/contextRequests/updateContextCommandExpired.json +0 -22
- package/test/unit/examples/contextRequests/updateContextCommandFinish.json +0 -22
- package/test/unit/examples/contextRequests/updateContextCommandStatus.json +0 -17
- package/test/unit/examples/contextRequests/updateContextCompressTimestamp1.json +0 -22
- package/test/unit/examples/contextRequests/updateContextCompressTimestamp2.json +0 -29
- package/test/unit/examples/contextRequests/updateContextExpressionPlugin1.json +0 -17
- package/test/unit/examples/contextRequests/updateContextExpressionPlugin2.json +0 -27
- package/test/unit/examples/contextRequests/updateContextExpressionPlugin3.json +0 -17
- package/test/unit/examples/contextRequests/updateContextExpressionPlugin4.json +0 -17
- package/test/unit/examples/contextRequests/updateContextExpressionPlugin5.json +0 -27
- package/test/unit/examples/contextRequests/updateContextMiddleware1.json +0 -22
- package/test/unit/examples/contextRequests/updateContextMultiEntityPlugin3.json +0 -35
- package/test/unit/examples/contextRequests/updateContextMultientityPlugin1.json +0 -30
- package/test/unit/examples/contextRequests/updateContextMultientityPlugin2.json +0 -30
- package/test/unit/examples/contextRequests/updateContextProcessTimestamp1.json +0 -29
- package/test/unit/examples/contextRequests/updateContextStaticAttributes.json +0 -22
- package/test/unit/examples/contextRequests/updateContextTimestamp.json +0 -41
- package/test/unit/examples/contextRequests/updateContextTimestampOverride.json +0 -22
- package/test/unit/examples/contextRequests/updateContextTimestampOverrideWithoutMilis.json +0 -22
- package/test/unit/examples/contextRequests/updateContextTimestampTimezone.json +0 -41
- package/test/unit/examples/contextRequests/updateProvisionActiveAttributes1.json +0 -17
- package/test/unit/examples/contextRequests/updateProvisionCommands1.json +0 -27
- package/test/unit/examples/contextRequests/updateProvisionDeviceStatic.json +0 -38
- package/test/unit/examples/contextRequests/updateProvisionMinimumDevice.json +0 -17
- package/test/unit/examples/contextResponses/contextSubscriptionRequest2Success.json +0 -7
- package/test/unit/examples/contextResponses/contextSubscriptionRequestSuccess.json +0 -7
- package/test/unit/examples/contextResponses/createBidirectionalDeviceSuccess.json +0 -22
- package/test/unit/examples/contextResponses/createDatetimeProvisionedDeviceSuccess.json +0 -22
- package/test/unit/examples/contextResponses/createGeopointProvisionedDeviceSuccess.json +0 -22
- package/test/unit/examples/contextResponses/createProvisionedDeviceSuccess.json +0 -22
- package/test/unit/examples/contextResponses/createTimeinstantSuccess.json +0 -22
- package/test/unit/examples/contextResponses/queryContext1Success.json +0 -27
- package/test/unit/examples/contextResponses/queryContext2Error.json +0 -7
- package/test/unit/examples/contextResponses/queryContext2UnknownError.json +0 -6
- package/test/unit/examples/contextResponses/queryContext3Error.json +0 -34
- package/test/unit/examples/contextResponses/queryContextAliasPlugin1Success.json +0 -27
- package/test/unit/examples/contextResponses/queryContextCompressTimestamp1Success.json +0 -27
- package/test/unit/examples/contextResponses/updateActiveAttributesSuccess.json +0 -16
- package/test/unit/examples/contextResponses/updateContext1Failed.json +0 -7
- package/test/unit/examples/contextResponses/updateContext1Success.json +0 -27
- package/test/unit/examples/contextResponses/updateContext2Failed.json +0 -35
- package/test/unit/examples/contextResponses/updateContextAliasPlugin2Success.json +0 -27
- package/test/unit/examples/contextResponses/updateContextAliasPluginSuccess.json +0 -27
- package/test/unit/examples/contextResponses/updateContextCommandFinishSuccess.json +0 -27
- package/test/unit/examples/contextResponses/updateContextCommandStatusSuccess.json +0 -22
- package/test/unit/examples/contextResponses/updateContextCompressTimestamp1Success.json +0 -27
- package/test/unit/examples/contextResponses/updateContextCompressTimestamp2Success.json +0 -34
- package/test/unit/examples/contextResponses/updateContextEvents1Success.json +0 -27
- package/test/unit/examples/contextResponses/updateContextExpressionPlugin1Success.json +0 -22
- package/test/unit/examples/contextResponses/updateContextExpressionPlugin2Success.json +0 -22
- package/test/unit/examples/contextResponses/updateContextExpressionPlugin3Success.json +0 -22
- package/test/unit/examples/contextResponses/updateContextExpressionPlugin5Success.json +0 -32
- package/test/unit/examples/contextResponses/updateContextMultientityPlugin1Success.json +0 -40
- package/test/unit/examples/contextResponses/updateContextMultientityPlugin2Success.json +0 -40
- package/test/unit/examples/contextResponses/updateContextMultientityPlugin3Success.json +0 -40
- package/test/unit/examples/contextResponses/updateContextProcessTimestamp1Success.json +0 -27
- package/test/unit/examples/contextResponses/updateProvisionActiveAttributes1Success.json +0 -22
- package/test/unit/examples/contextResponses/updateProvisionCommands1Success.json +0 -32
- package/test/unit/examples/contextResponses/updateProvisionMinimumDeviceSuccess.json +0 -22
- package/test/unit/examples/subscriptionRequests/bidirectionalNotification.json +0 -24
- package/test/unit/examples/subscriptionRequests/bidirectionalSubscriptionRemove.json +0 -3
- package/test/unit/examples/subscriptionRequests/bidirectionalSubscriptionRequest.json +0 -22
- package/test/unit/examples/subscriptionRequests/errorNotification.json +0 -24
- package/test/unit/examples/subscriptionRequests/simpleNotification.json +0 -24
- package/test/unit/examples/subscriptionRequests/simpleSubscriptionRemove.json +0 -3
- package/test/unit/examples/subscriptionRequests/simpleSubscriptionRequest.json +0 -19
- package/test/unit/examples/subscriptionRequests/simpleSubscriptionRequest1.json +0 -19
- package/test/unit/examples/subscriptionResponses/bidirectionalSubscriptionSuccess.json +0 -6
- package/test/unit/examples/subscriptionResponses/simpleSubscriptionSuccess.json +0 -6
- package/test/unit/expressions/expressionBasedTransformations-test.js +0 -328
- package/test/unit/expressions/expressionCombinedTransformations-test.js +0 -306
- package/test/unit/expressions/jexlBasedTransformations-test.js +0 -334
- package/test/unit/general/contextBrokerOAuthSecurityAccess-test.js +0 -902
- package/test/unit/general/https-support-test.js +0 -286
- package/test/unit/general/iotam-autoregistration-test.js +0 -368
- package/test/unit/lazyAndCommands/active-devices-attribute-update-test.js +0 -168
- package/test/unit/lazyAndCommands/command-test.js +0 -341
- package/test/unit/lazyAndCommands/lazy-devices-test.js +0 -878
- package/test/unit/lazyAndCommands/polling-commands-test.js +0 -421
- package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin20.json +0 -25
- package/test/unit/ngsiService/active-devices-test.js +0 -692
- package/test/unit/ngsiService/staticAttributes-test.js +0 -148
- package/test/unit/ngsiService/subscriptions-test.js +0 -345
- package/test/unit/plugins/alias-plugin_test.js +0 -158
- package/test/unit/plugins/bidirectional-plugin_test.js +0 -564
- package/test/unit/plugins/compress-timestamp-plugin_test.js +0 -257
- package/test/unit/plugins/event-plugin_test.js +0 -119
- package/test/unit/plugins/multientity-plugin_test.js +0 -248
- package/test/unit/plugins/timestamp-processing-plugin_test.js +0 -119
- package/test/unit/provisioning/device-provisioning-api_test.js +0 -748
- package/test/unit/provisioning/device-registration_test.js +0 -432
- package/test/unit/provisioning/device-update-registration_test.js +0 -326
- package/test/unit/provisioning/listProvisionedDevices-test.js +0 -488
- package/test/unit/provisioning/provisionDeviceMultientity-test.js +0 -123
- package/test/unit/provisioning/removeProvisionedDevice-test.js +0 -244
- package/test/unit/provisioning/singleConfigurationMode-test.js +0 -346
- package/test/unit/provisioning/updateProvisionedDevices-test.js +0 -436
|
@@ -1,589 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2015 Telefonica Investigación y Desarrollo, S.A.U
|
|
3
|
-
*
|
|
4
|
-
* This file is part of fiware-iotagent-lib
|
|
5
|
-
*
|
|
6
|
-
* fiware-iotagent-lib is free software: you can redistribute it and/or
|
|
7
|
-
* modify it under the terms of the GNU Affero General Public License as
|
|
8
|
-
* published by the Free Software Foundation, either version 3 of the License,
|
|
9
|
-
* or (at your option) any later version.
|
|
10
|
-
*
|
|
11
|
-
* fiware-iotagent-lib is distributed in the hope that it will be useful,
|
|
12
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
14
|
-
* See the GNU Affero General Public License for more details.
|
|
15
|
-
*
|
|
16
|
-
* You should have received a copy of the GNU Affero General Public
|
|
17
|
-
* License along with fiware-iotagent-lib.
|
|
18
|
-
* If not, see http://www.gnu.org/licenses/.
|
|
19
|
-
*
|
|
20
|
-
* For those usages not covered by the GNU Affero General Public License
|
|
21
|
-
* please contact with::daniel.moranjimenez@telefonica.com
|
|
22
|
-
*
|
|
23
|
-
* Modified by: Federico M. Facca - Martel Innovate
|
|
24
|
-
* Modified by: Daniel Calvo - ATOS Research & Innovation
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
/* eslint-disable consistent-return */
|
|
28
|
-
|
|
29
|
-
const errors = require('../../errors');
|
|
30
|
-
const logger = require('logops');
|
|
31
|
-
const _ = require('underscore');
|
|
32
|
-
const intoTrans = require('../common/domain').intoTrans;
|
|
33
|
-
const config = require('../../commonConfig');
|
|
34
|
-
const ngsiUtils = require('./../ngsi/ngsiUtils');
|
|
35
|
-
const context = {
|
|
36
|
-
op: 'IoTAgentNGSI.Registration'
|
|
37
|
-
};
|
|
38
|
-
const async = require('async');
|
|
39
|
-
const utils = require('../northBound/restUtils');
|
|
40
|
-
|
|
41
|
-
const NGSI_LD_URN = 'urn:ngsi-ld:';
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Generates a handler for the registration requests that checks all the possible errors derived from the registration.
|
|
45
|
-
* The parameter information is needed in order to fulfill error information.
|
|
46
|
-
*
|
|
47
|
-
* @param {Boolen} unregister Indicates whether this registration is an unregistration or register.
|
|
48
|
-
* @param {Object} deviceData Object containing all the deviceData needed to send the registration.
|
|
49
|
-
* @return {Function} The generated handler.
|
|
50
|
-
*/
|
|
51
|
-
function createRegistrationHandler(unregister, deviceData, callback) {
|
|
52
|
-
return function handleRegistrationResponse(error, response, body) {
|
|
53
|
-
if (error) {
|
|
54
|
-
logger.error(context, 'ORION-002: Connection error sending registrations to the Context Broker: %s', error);
|
|
55
|
-
callback(error);
|
|
56
|
-
} else if (response && body && response.statusCode === 200) {
|
|
57
|
-
const errorField = ngsiUtils.getErrorField(body);
|
|
58
|
-
|
|
59
|
-
if (errorField) {
|
|
60
|
-
logger.error(context, 'Registration error connecting to the Context Broker: %j', errorField);
|
|
61
|
-
callback(new errors.BadRequest(JSON.stringify(errorField)));
|
|
62
|
-
} else {
|
|
63
|
-
logger.debug(context, 'Registration success.');
|
|
64
|
-
callback(null, body);
|
|
65
|
-
}
|
|
66
|
-
} else {
|
|
67
|
-
let errorObj;
|
|
68
|
-
|
|
69
|
-
logger.error(context, 'ORION-003: Protocol error connecting to the Context Broker: %j', errorObj);
|
|
70
|
-
|
|
71
|
-
if (unregister) {
|
|
72
|
-
errorObj = new errors.UnregistrationError(deviceData.id, deviceData.type);
|
|
73
|
-
} else {
|
|
74
|
-
errorObj = new errors.RegistrationError(deviceData.id, deviceData.type);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
callback(errorObj);
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Generates a handler for the registration requests that checks all the possible errors derived from the registration.
|
|
84
|
-
* The parameter information is needed in order to fulfill error information.
|
|
85
|
-
*
|
|
86
|
-
* @param {Boolen} unregister Indicates whether this registration is an unregistration or register.
|
|
87
|
-
* @param {Object} deviceData Object containing all the deviceData needed to send the registration.
|
|
88
|
-
* @return {Function} The generated handler.
|
|
89
|
-
*/
|
|
90
|
-
function createRegistrationHandlerNgsiLD(unregister, deviceData, callback) {
|
|
91
|
-
/* eslint-disable-next-line no-unused-vars */
|
|
92
|
-
return function handleRegistrationResponse(error, response, body) {
|
|
93
|
-
if (error) {
|
|
94
|
-
logger.error(context, 'ORION-002: Connection error sending registrations to the Context Broker: %s', error);
|
|
95
|
-
callback(error);
|
|
96
|
-
} else if (response && response.statusCode === 201 && response.headers.location && unregister === false) {
|
|
97
|
-
logger.debug(context, 'Registration success.');
|
|
98
|
-
callback(null, {
|
|
99
|
-
registrationId: response.headers.location.substr(response.headers.location.lastIndexOf('/') + 1)
|
|
100
|
-
});
|
|
101
|
-
} else if (response && response.statusCode === 204 && unregister === true) {
|
|
102
|
-
logger.debug(context, 'Unregistration success.');
|
|
103
|
-
callback(null, null);
|
|
104
|
-
} else if (response && response.statusCode && response.statusCode !== 500) {
|
|
105
|
-
logger.error(context, 'Registration error connecting to the Context Broker: %j', response.statusCode);
|
|
106
|
-
callback(new errors.BadRequest(JSON.stringify(response.statusCode)));
|
|
107
|
-
} else {
|
|
108
|
-
let errorObj;
|
|
109
|
-
|
|
110
|
-
logger.error(context, 'ORION-003: Protocol error connecting to the Context Broker: %j', errorObj);
|
|
111
|
-
|
|
112
|
-
if (unregister) {
|
|
113
|
-
errorObj = new errors.UnregistrationError(deviceData.id, deviceData.type);
|
|
114
|
-
} else {
|
|
115
|
-
errorObj = new errors.RegistrationError(deviceData.id, deviceData.type);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
callback(errorObj);
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Generates a handler for the registration requests that checks all the possible errors derived from the registration.
|
|
125
|
-
* The parameter information is needed in order to fulfill error information.
|
|
126
|
-
*
|
|
127
|
-
* @param {Boolen} unregister Indicates whether this registration is an unregistration or register.
|
|
128
|
-
* @param {Object} deviceData Object containing all the deviceData needed to send the registration.
|
|
129
|
-
* @return {Function} The generated handler.
|
|
130
|
-
*/
|
|
131
|
-
function createRegistrationHandlerNgsi2(unregister, deviceData, callback) {
|
|
132
|
-
/* eslint-disable-next-line no-unused-vars */
|
|
133
|
-
return function handleRegistrationResponse(error, response, body) {
|
|
134
|
-
if (error) {
|
|
135
|
-
logger.error(context, 'ORION-002: Connection error sending registrations to the Context Broker: %s', error);
|
|
136
|
-
callback(error);
|
|
137
|
-
} else if (response && response.statusCode === 201 && response.headers.location && unregister === false) {
|
|
138
|
-
logger.debug(context, 'Registration success.');
|
|
139
|
-
callback(null, {
|
|
140
|
-
registrationId: response.headers.location.substr(response.headers.location.lastIndexOf('/') + 1)
|
|
141
|
-
});
|
|
142
|
-
} else if (response && response.statusCode === 204 && unregister === true) {
|
|
143
|
-
logger.debug(context, 'Unregistration success.');
|
|
144
|
-
callback(null, null);
|
|
145
|
-
} else if (response && response.statusCode && response.statusCode !== 500) {
|
|
146
|
-
logger.error(context, 'Registration error connecting to the Context Broker: %j', response.statusCode);
|
|
147
|
-
callback(new errors.BadRequest(JSON.stringify(response.statusCode)));
|
|
148
|
-
} else {
|
|
149
|
-
let errorObj;
|
|
150
|
-
|
|
151
|
-
logger.error(context, 'ORION-003: Protocol error connecting to the Context Broker: %j', errorObj);
|
|
152
|
-
|
|
153
|
-
if (unregister) {
|
|
154
|
-
errorObj = new errors.UnregistrationError(deviceData.id, deviceData.type);
|
|
155
|
-
} else {
|
|
156
|
-
errorObj = new errors.RegistrationError(deviceData.id, deviceData.type);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
callback(errorObj);
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Sends a Context Provider registration or unregistration request to the Context Broker using NGSIv1.
|
|
166
|
-
* As registrations cannot be removed, an unregistration consists of an update of the existent registration
|
|
167
|
-
* to make reduce its duration to 1 second.
|
|
168
|
-
*
|
|
169
|
-
* The entity type, entity name and lazy attributes list are needed in order to send the registration:
|
|
170
|
-
*
|
|
171
|
-
* @param {Boolen} unregister Indicates whether this registration is an unregistration or register.
|
|
172
|
-
* @param {Object} deviceData Object containing all the deviceData needed to send the registration.
|
|
173
|
-
*/
|
|
174
|
-
function sendRegistrationsNgsi1(unregister, deviceData, callback) {
|
|
175
|
-
let cbHost = config.getConfig().contextBroker.url;
|
|
176
|
-
if (deviceData.cbHost && deviceData.cbHost.indexOf('://') !== -1) {
|
|
177
|
-
cbHost = deviceData.cbHost;
|
|
178
|
-
} else if (deviceData.cbHost && deviceData.cbHost.indexOf('://') === -1) {
|
|
179
|
-
cbHost = 'http://' + deviceData.cbHost;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
const options = {
|
|
183
|
-
url: cbHost + '/NGSI9/registerContext',
|
|
184
|
-
method: 'POST',
|
|
185
|
-
json: {
|
|
186
|
-
contextRegistrations: [
|
|
187
|
-
{
|
|
188
|
-
entities: [
|
|
189
|
-
{
|
|
190
|
-
type: deviceData.type,
|
|
191
|
-
isPattern: 'false',
|
|
192
|
-
id: String(deviceData.name)
|
|
193
|
-
}
|
|
194
|
-
],
|
|
195
|
-
attributes: [],
|
|
196
|
-
providingApplication: config.getConfig().providerUrl
|
|
197
|
-
}
|
|
198
|
-
],
|
|
199
|
-
duration: unregister ? 'PT1S' : config.getConfig().deviceRegistrationDuration
|
|
200
|
-
},
|
|
201
|
-
headers: {
|
|
202
|
-
'fiware-service': deviceData.service,
|
|
203
|
-
'fiware-servicepath': deviceData.subservice
|
|
204
|
-
}
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
function formatAttributes(originalVector) {
|
|
208
|
-
const attributeList = [];
|
|
209
|
-
|
|
210
|
-
if (originalVector && originalVector.length) {
|
|
211
|
-
for (let i = 0; i < originalVector.length; i++) {
|
|
212
|
-
attributeList.push({
|
|
213
|
-
name: originalVector[i].name,
|
|
214
|
-
type: originalVector[i].type
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
return attributeList;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
function mergeWithSameName(old, current) {
|
|
223
|
-
const keys = _.pluck(old, 'name');
|
|
224
|
-
|
|
225
|
-
if (keys.indexOf(current.name) < 0) {
|
|
226
|
-
old.push(current);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
return old;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
if (deviceData.registrationId) {
|
|
233
|
-
options.json.registrationId = deviceData.registrationId;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
options.json.contextRegistrations[0].attributes = options.json.contextRegistrations[0].attributes
|
|
237
|
-
.concat(formatAttributes(deviceData.lazy), formatAttributes(deviceData.commands))
|
|
238
|
-
.reduce(mergeWithSameName, []);
|
|
239
|
-
|
|
240
|
-
if (options.json.contextRegistrations[0].attributes.length === 0) {
|
|
241
|
-
logger.debug(context, 'No Context Provider registrations found for unregister');
|
|
242
|
-
callback(null, deviceData);
|
|
243
|
-
} else {
|
|
244
|
-
logger.debug(context, 'Sending v1 device registrations to Context Broker at [%s]', options.url);
|
|
245
|
-
logger.debug(context, 'Using the following request:\n\n%s\n\n', JSON.stringify(options, null, 4));
|
|
246
|
-
|
|
247
|
-
utils.executeWithSecurity(options, deviceData, createRegistrationHandler(unregister, deviceData, callback));
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* Sends a Context Provider unregistration request to the Context Broker using NGSIv2.
|
|
253
|
-
*
|
|
254
|
-
* @param {Object} deviceData Object containing all the deviceData needed to send the registration.
|
|
255
|
-
*/
|
|
256
|
-
function sendUnregistrationsNgsi2(deviceData, callback) {
|
|
257
|
-
let cbHost = config.getConfig().contextBroker.url;
|
|
258
|
-
if (deviceData.cbHost && deviceData.cbHost.indexOf('://') !== -1) {
|
|
259
|
-
cbHost = deviceData.cbHost;
|
|
260
|
-
} else if (deviceData.cbHost && deviceData.cbHost.indexOf('://') === -1) {
|
|
261
|
-
cbHost = 'http://' + deviceData.cbHost;
|
|
262
|
-
}
|
|
263
|
-
const options = {
|
|
264
|
-
url: cbHost + '/v2/registrations/' + deviceData.registrationId,
|
|
265
|
-
method: 'DELETE',
|
|
266
|
-
json: true,
|
|
267
|
-
headers: {
|
|
268
|
-
'fiware-service': deviceData.service,
|
|
269
|
-
'fiware-servicepath': deviceData.subservice
|
|
270
|
-
}
|
|
271
|
-
};
|
|
272
|
-
if (deviceData.cbHost && deviceData.cbHost.indexOf('://') !== -1) {
|
|
273
|
-
options.url = deviceData.cbHost + '/v2/registrations/' + deviceData.registrationId;
|
|
274
|
-
} else if (deviceData.cbHost && deviceData.cbHost.indexOf('://') === -1) {
|
|
275
|
-
options.url = 'http://' + deviceData.cbHost + '/v2/registrations/' + deviceData.registrationId;
|
|
276
|
-
}
|
|
277
|
-
if (deviceData.registrationId) {
|
|
278
|
-
logger.debug(context, 'Sending v2 device unregistrations to Context Broker at [%s]', options.url);
|
|
279
|
-
logger.debug(context, 'Using the following request:\n\n%s\n\n', JSON.stringify(options, null, 4));
|
|
280
|
-
|
|
281
|
-
return utils.executeWithSecurity(
|
|
282
|
-
options,
|
|
283
|
-
deviceData,
|
|
284
|
-
createRegistrationHandlerNgsi2(true, deviceData, callback)
|
|
285
|
-
);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
logger.debug(context, 'No Context Provider registrations found for unregister');
|
|
289
|
-
return callback(null, deviceData);
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Sends a Context Provider unregistration request to the Context Broker using NGSI-LD.
|
|
294
|
-
*
|
|
295
|
-
* @param {Object} deviceData Object containing all the deviceData needed to send the registration.
|
|
296
|
-
*/
|
|
297
|
-
function sendUnregistrationsNgsiLD(deviceData, callback) {
|
|
298
|
-
let cbHost = config.getConfig().contextBroker.url;
|
|
299
|
-
if (deviceData.cbHost && deviceData.cbHost.indexOf('://') !== -1) {
|
|
300
|
-
cbHost = deviceData.cbHost;
|
|
301
|
-
} else if (deviceData.cbHost && deviceData.cbHost.indexOf('://') === -1) {
|
|
302
|
-
cbHost = 'http://' + deviceData.cbHost;
|
|
303
|
-
}
|
|
304
|
-
const options = {
|
|
305
|
-
url: cbHost + '/ngsi-ld/v1/csourceRegistrations/' + deviceData.registrationId,
|
|
306
|
-
method: 'DELETE',
|
|
307
|
-
json: true,
|
|
308
|
-
headers: {
|
|
309
|
-
'fiware-service': deviceData.service,
|
|
310
|
-
'fiware-servicepath': deviceData.subservice,
|
|
311
|
-
'NGSILD-Tenant': deviceData.service,
|
|
312
|
-
'NGSILD-Path': deviceData.subservice
|
|
313
|
-
}
|
|
314
|
-
};
|
|
315
|
-
if (deviceData.cbHost && deviceData.cbHost.indexOf('://') !== -1) {
|
|
316
|
-
options.url = deviceData.cbHost + '/ngsi-ld/v1/csourceRegistrations/' + deviceData.registrationId;
|
|
317
|
-
} else if (deviceData.cbHost && deviceData.cbHost.indexOf('://') === -1) {
|
|
318
|
-
options.url = 'http://' + deviceData.cbHost + '/ngsi-ld/v1/csourceRegistrations/' + deviceData.registrationId;
|
|
319
|
-
}
|
|
320
|
-
if (deviceData.registrationId) {
|
|
321
|
-
logger.debug(context, 'Sending device LD unregistrations to Context Broker at [%s]', options.url);
|
|
322
|
-
logger.debug(context, 'Using the following request:\n\n%s\n\n', JSON.stringify(options, null, 4));
|
|
323
|
-
|
|
324
|
-
return utils.executeWithSecurity(
|
|
325
|
-
options,
|
|
326
|
-
deviceData,
|
|
327
|
-
createRegistrationHandlerNgsi2(true, deviceData, callback)
|
|
328
|
-
);
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
logger.debug(context, 'No Context Provider registrations found for unregister');
|
|
332
|
-
return callback(null, deviceData);
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/**
|
|
336
|
-
* Sends a Context Provider registration or unregistration request to the Context Broker using NGSIv2.
|
|
337
|
-
*
|
|
338
|
-
* @param {Boolen} unregister Indicates whether this registration is an unregistration or register.
|
|
339
|
-
* @param {Object} deviceData Object containing all the deviceData needed to send the registration.
|
|
340
|
-
*/
|
|
341
|
-
function sendRegistrationsNgsi2(unregister, deviceData, callback) {
|
|
342
|
-
function formatAttributes(originalVector) {
|
|
343
|
-
const attributeList = [];
|
|
344
|
-
|
|
345
|
-
if (originalVector && originalVector.length) {
|
|
346
|
-
for (let i = 0; i < originalVector.length; i++) {
|
|
347
|
-
attributeList.push(originalVector[i].name);
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
return attributeList;
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
function mergeWithSameName(old, current) {
|
|
355
|
-
if (old.indexOf(current) < 0) {
|
|
356
|
-
old.push(current);
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
return old;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
// FIXME: When https://github.com/telefonicaid/fiware-orion/issues/3007 is merged into master branch,
|
|
363
|
-
// this function should use the new API. This is just a temporary solution which implies deleting the
|
|
364
|
-
// registration and creating a new one.
|
|
365
|
-
function updateRegistrationNgsi2(deviceData, callback) {
|
|
366
|
-
const functions = [];
|
|
367
|
-
|
|
368
|
-
function removeRegistrationId(deviceData, unregistrationResult, callback) {
|
|
369
|
-
delete deviceData.registrationId;
|
|
370
|
-
return callback(null, deviceData);
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
functions.push(async.apply(sendRegistrationsNgsi2, true, deviceData));
|
|
374
|
-
functions.push(async.apply(removeRegistrationId, deviceData));
|
|
375
|
-
functions.push(async.apply(sendRegistrationsNgsi2, false));
|
|
376
|
-
async.waterfall(functions, callback);
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
if (unregister) {
|
|
380
|
-
return sendUnregistrationsNgsi2(deviceData, callback);
|
|
381
|
-
}
|
|
382
|
-
if (deviceData.registrationId) {
|
|
383
|
-
return updateRegistrationNgsi2(deviceData, callback);
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
let cbHost = config.getConfig().contextBroker.url;
|
|
387
|
-
if (deviceData.cbHost && deviceData.cbHost.indexOf('://') !== -1) {
|
|
388
|
-
cbHost = deviceData.cbHost;
|
|
389
|
-
} else if (deviceData.cbHost && deviceData.cbHost.indexOf('://') === -1) {
|
|
390
|
-
cbHost = 'http://' + deviceData.cbHost;
|
|
391
|
-
}
|
|
392
|
-
const options = {
|
|
393
|
-
url: cbHost + '/v2/registrations',
|
|
394
|
-
method: 'POST',
|
|
395
|
-
json: {
|
|
396
|
-
dataProvided: {
|
|
397
|
-
entities: [
|
|
398
|
-
{
|
|
399
|
-
type: deviceData.type,
|
|
400
|
-
id: String(deviceData.name)
|
|
401
|
-
}
|
|
402
|
-
],
|
|
403
|
-
attrs: []
|
|
404
|
-
},
|
|
405
|
-
provider: {
|
|
406
|
-
http: {
|
|
407
|
-
url: config.getConfig().providerUrl
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
},
|
|
411
|
-
headers: {
|
|
412
|
-
'fiware-service': deviceData.service,
|
|
413
|
-
'fiware-servicepath': deviceData.subservice
|
|
414
|
-
}
|
|
415
|
-
};
|
|
416
|
-
|
|
417
|
-
options.json.dataProvided.attrs = options.json.dataProvided.attrs
|
|
418
|
-
.concat(formatAttributes(deviceData.lazy), formatAttributes(deviceData.commands))
|
|
419
|
-
.reduce(mergeWithSameName, []);
|
|
420
|
-
|
|
421
|
-
// Check if registration is about lazy
|
|
422
|
-
// Assumming that if lazy attrs there is not commands
|
|
423
|
-
if (deviceData.lazy && deviceData.lazy.length > 0 &&
|
|
424
|
-
(!deviceData.commands || (deviceData.commands && deviceData.commands.length === 0))
|
|
425
|
-
) {
|
|
426
|
-
options.json.provider.supportedForwardingMode = 'query';
|
|
427
|
-
}
|
|
428
|
-
// Check if registration is about command
|
|
429
|
-
// Assumming that if commands there is not lazy atts
|
|
430
|
-
if (deviceData.commands && deviceData.commands.length > 0 &&
|
|
431
|
-
(!deviceData.lazy || (deviceData.lazy && deviceData.lazy.length === 0))
|
|
432
|
-
) {
|
|
433
|
-
options.json.provider.supportedForwardingMode = 'update';
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
if (options.json.dataProvided.attrs.length === 0) {
|
|
437
|
-
logger.debug(context, 'Registration with Context Provider is not needed. Device without lazy atts or commands');
|
|
438
|
-
return callback(null, deviceData);
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
// Check if lazy and commands are present -> 2 registrations should be done
|
|
442
|
-
if (deviceData.lazy && deviceData.lazy.length > 0 && deviceData.commands && deviceData.commands.length > 0) {
|
|
443
|
-
|
|
444
|
-
logger.debug(context, 'Sending v2 device registrations to Context Broker at [%s]', options.url);
|
|
445
|
-
// lazy
|
|
446
|
-
options.json.dataProvided.attrs = options.json.dataProvided.attrs
|
|
447
|
-
.concat(formatAttributes(deviceData.lazy))
|
|
448
|
-
.reduce(mergeWithSameName, []);
|
|
449
|
-
options.json.provider.supportedForwardingMode = 'query';
|
|
450
|
-
logger.debug(context, 'Using the following request:\n\n%s\n\n', JSON.stringify(options, null, 4));
|
|
451
|
-
utils.executeWithSecurity(
|
|
452
|
-
options,
|
|
453
|
-
deviceData,
|
|
454
|
-
createRegistrationHandlerNgsi2(
|
|
455
|
-
unregister,
|
|
456
|
-
deviceData,
|
|
457
|
-
function () {
|
|
458
|
-
// commands
|
|
459
|
-
options.json.dataProvided.attrs = options.json.dataProvided.attrs
|
|
460
|
-
.concat(formatAttributes(deviceData.commands))
|
|
461
|
-
.reduce(mergeWithSameName, []);
|
|
462
|
-
options.json.provider.supportedForwardingMode = 'update';
|
|
463
|
-
logger.debug(context, 'Using the following request:\n\n%s\n\n', JSON.stringify(options, null, 4));
|
|
464
|
-
return utils.executeWithSecurity(options, deviceData,
|
|
465
|
-
createRegistrationHandlerNgsi2(unregister, deviceData, callback));
|
|
466
|
-
}
|
|
467
|
-
)
|
|
468
|
-
);
|
|
469
|
-
} else {
|
|
470
|
-
// Single registration
|
|
471
|
-
logger.debug(context, 'Sending v2 device registration to Context Broker at [%s]', options.url);
|
|
472
|
-
logger.debug(context, 'Using the following request:\n\n%s\n\n', JSON.stringify(options, null, 4));
|
|
473
|
-
utils.executeWithSecurity(options, deviceData, createRegistrationHandlerNgsi2(unregister, deviceData, callback));
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
/**
|
|
478
|
-
* Sends a Context Provider registration or unregistration request to the Context Broker using NGSI-LD.
|
|
479
|
-
*
|
|
480
|
-
* @param {Boolen} unregister Indicates whether this registration is an unregistration or register.
|
|
481
|
-
* @param {Object} deviceData Object containing all the deviceData needed to send the registration.
|
|
482
|
-
*/
|
|
483
|
-
function sendRegistrationsNgsiLD(unregister, deviceData, callback) {
|
|
484
|
-
if (unregister) {
|
|
485
|
-
return sendUnregistrationsNgsiLD(deviceData, callback);
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
const properties = [];
|
|
489
|
-
const lazy = deviceData.lazy || [];
|
|
490
|
-
const commands = deviceData.commands || [];
|
|
491
|
-
|
|
492
|
-
lazy.forEach((element) => {
|
|
493
|
-
properties.push(element.name);
|
|
494
|
-
});
|
|
495
|
-
commands.forEach((element) => {
|
|
496
|
-
properties.push(element.name);
|
|
497
|
-
});
|
|
498
|
-
|
|
499
|
-
if (properties.length === 0) {
|
|
500
|
-
logger.debug(context, 'Registration with Context Provider is not needed. Device without lazy atts or commands');
|
|
501
|
-
return callback(null, deviceData);
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
let cbHost = config.getConfig().contextBroker.url;
|
|
505
|
-
|
|
506
|
-
if (deviceData.cbHost && deviceData.cbHost.indexOf('://') !== -1) {
|
|
507
|
-
cbHost = deviceData.cbHost;
|
|
508
|
-
} else if (deviceData.cbHost && deviceData.cbHost.indexOf('://') === -1) {
|
|
509
|
-
cbHost = 'http://' + deviceData.cbHost;
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
let id = String(deviceData.name);
|
|
513
|
-
if (!id.startsWith(NGSI_LD_URN)) {
|
|
514
|
-
id = NGSI_LD_URN + deviceData.type + ':' + id;
|
|
515
|
-
logger.debug(context, 'Amending id to a valid URN: %s', id);
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
const options = {
|
|
519
|
-
url: cbHost + '/ngsi-ld/v1/csourceRegistrations/',
|
|
520
|
-
method: 'POST',
|
|
521
|
-
json: {
|
|
522
|
-
type: 'ContextSourceRegistration',
|
|
523
|
-
information: [
|
|
524
|
-
{
|
|
525
|
-
entities: [{ type: deviceData.type, id }],
|
|
526
|
-
properties
|
|
527
|
-
}
|
|
528
|
-
],
|
|
529
|
-
endpoint: config.getConfig().providerUrl,
|
|
530
|
-
'@context': config.getConfig().contextBroker.jsonLdContext
|
|
531
|
-
},
|
|
532
|
-
headers: {
|
|
533
|
-
'fiware-service': deviceData.service,
|
|
534
|
-
'fiware-servicepath': deviceData.subservice,
|
|
535
|
-
'NGSILD-Tenant': deviceData.service,
|
|
536
|
-
'NGSILD-Path': deviceData.subservice,
|
|
537
|
-
'Content-Type': 'application/ld+json'
|
|
538
|
-
}
|
|
539
|
-
};
|
|
540
|
-
|
|
541
|
-
logger.debug(context, 'Sending LD device registrations to Context Broker at [%s]', options.url);
|
|
542
|
-
logger.debug(context, 'Using the following request:\n\n%s\n\n', JSON.stringify(options, null, 4));
|
|
543
|
-
|
|
544
|
-
utils.executeWithSecurity(options, deviceData, createRegistrationHandlerNgsiLD(unregister, deviceData, callback));
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
/**
|
|
548
|
-
* Sends a Context Provider registration or unregistration request to the Context Broker. As registrations cannot be
|
|
549
|
-
* removed, an unregistration consists of an update of the existent registration to make reduce its duration to
|
|
550
|
-
* 1 second.
|
|
551
|
-
*
|
|
552
|
-
* The entity type, entity name and lazy attributes list are needed in order to send the registration:
|
|
553
|
-
*
|
|
554
|
-
* @param {Boolen} unregister Indicates whether this registration is an unregistration or register.
|
|
555
|
-
* @param {Object} deviceData Object containing all the deviceData needed to send the registration.
|
|
556
|
-
*/
|
|
557
|
-
function sendRegistrations(unregister, deviceData, callback) {
|
|
558
|
-
switch (config.ngsiVersion()) {
|
|
559
|
-
case 'ld':
|
|
560
|
-
sendRegistrationsNgsiLD(unregister, deviceData, callback);
|
|
561
|
-
break;
|
|
562
|
-
case 'v2':
|
|
563
|
-
sendRegistrationsNgsi2(unregister, deviceData, callback);
|
|
564
|
-
break;
|
|
565
|
-
default:
|
|
566
|
-
sendRegistrationsNgsi1(unregister, deviceData, callback);
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
/**
|
|
571
|
-
* Process the response from a Register Context request for a device, extracting the 'registrationId' and creating the
|
|
572
|
-
* device object that will be stored in the registry.
|
|
573
|
-
*
|
|
574
|
-
* @param {Object} deviceData Object containing all the deviceData needed to send the registration.
|
|
575
|
-
*
|
|
576
|
-
*/
|
|
577
|
-
function processContextRegistration(deviceData, body, callback) {
|
|
578
|
-
const newDevice = _.clone(deviceData);
|
|
579
|
-
|
|
580
|
-
if (body) {
|
|
581
|
-
newDevice.registrationId = body.registrationId;
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
callback(null, newDevice);
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
exports.sendRegistrations = intoTrans(context, sendRegistrations);
|
|
588
|
-
exports.createRegistrationHandler = intoTrans(context, createRegistrationHandler);
|
|
589
|
-
exports.processContextRegistration = processContextRegistration;
|