iotagent-node-lib 2.17.0 → 2.20.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 -2
- package/.nyc_output/76bc24ff-5fac-4b5a-997d-de2799342eb0.json +1 -0
- package/.nyc_output/processinfo/76bc24ff-5fac-4b5a-997d-de2799342eb0.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -1
- package/CHANGES_NEXT_RELEASE +1 -0
- package/README.md +3 -54
- package/doc/advanced-topics.md +121 -85
- package/doc/api.md +52 -52
- package/doc/development.md +13 -6
- package/doc/expressionLanguage.md +514 -312
- package/doc/installationguide.md +66 -64
- package/doc/usermanual.md +48 -16
- package/docker/Mosquitto/Dockerfile +1 -0
- package/docker/Mosquitto/README.md +1 -0
- package/docker/Mosquitto/startMosquitto.sh +9 -4
- package/lib/commonConfig.js +1 -14
- package/lib/errors.js +0 -16
- package/lib/fiware-iotagent-lib.js +4 -2
- package/lib/jexlTranformsMap.js +13 -2
- package/lib/model/Device.js +4 -1
- package/lib/model/Group.js +19 -1
- package/lib/plugins/attributeAlias.js +6 -13
- package/lib/plugins/bidirectionalData.js +1 -21
- package/lib/plugins/expressionParser.js +7 -6
- package/lib/plugins/expressionPlugin.js +11 -25
- package/lib/plugins/jexlParser.js +8 -4
- package/lib/plugins/multiEntity.js +54 -145
- 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 +6 -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 +2 -0
- package/lib/services/devices/deviceService.js +2 -5
- package/lib/services/devices/devices-NGSI-LD.js +1 -1
- package/lib/services/devices/devices-NGSI-v2.js +4 -8
- package/lib/services/devices/registrationUtils.js +1 -134
- package/lib/services/ngsi/entities-NGSI-LD.js +205 -124
- package/lib/services/ngsi/entities-NGSI-v2.js +109 -15
- package/lib/services/ngsi/ngsiService.js +4 -6
- package/lib/services/ngsi/ngsiUtils.js +0 -36
- 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 +24 -12
- package/lib/services/northBound/contextServer.js +1 -4
- package/lib/services/northBound/contextServerUtils.js +0 -81
- package/lib/services/northBound/deviceProvisioningServer.js +31 -7
- package/lib/services/northBound/northboundServer.js +2 -0
- package/lib/services/northBound/restUtils.js +1 -38
- package/lib/templates/updateDevice.json +4 -0
- package/lib/templates/updateDeviceLax.json +4 -0
- package/package.json +10 -16
- package/test/tools/utils.js +2 -0
- package/test/unit/examples/groupProvisioningRequests/multipleGroupsCreation.json +1 -1
- package/test/unit/expressions/jexlExpression-test.js +44 -5
- package/test/unit/general/contextBrokerKeystoneSecurityAccess-test.js +19 -66
- package/test/unit/general/deviceService-test.js +11 -27
- package/test/unit/general/loglevel-api_test.js +6 -11
- package/test/unit/general/startup-test.js +2 -1
- package/test/unit/memoryRegistry/deviceRegistryMemory_test.js +8 -16
- package/test/unit/mongodb/mongodb-group-registry-test.js +1 -1
- package/test/unit/mongodb/mongodb-registry-test.js +38 -114
- 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/expressions/jexlBasedTransformations-test.js +1018 -0
- package/test/unit/ngsi-ld/general/contextBrokerOAuthSecurityAccess-test.js +2 -2
- package/test/unit/ngsi-ld/general/deviceService-test.js +1 -1
- package/test/unit/ngsi-ld/general/https-support-test.js +2 -1
- package/test/unit/ngsi-ld/general/iotam-autoregistration-test.js +2 -1
- package/test/unit/ngsi-ld/general/startup-test.js +1 -0
- package/test/unit/ngsi-ld/lazyAndCommands/active-devices-attribute-update-test.js +3 -1
- package/test/unit/ngsi-ld/lazyAndCommands/command-test.js +2 -1
- package/test/unit/ngsi-ld/lazyAndCommands/lazy-devices-test.js +2 -6
- package/test/unit/ngsi-ld/lazyAndCommands/polling-commands-test.js +2 -1
- package/test/unit/ngsi-ld/ngsiService/active-devices-test.js +1 -0
- package/test/unit/ngsi-ld/ngsiService/autocast-test.js +1 -0
- package/test/unit/ngsi-ld/ngsiService/geoproperties-test.js +1 -0
- package/test/unit/ngsi-ld/ngsiService/subscriptions-test.js +4 -3
- package/test/unit/ngsi-ld/plugins/alias-plugin_test.js +1 -0
- package/test/unit/ngsi-ld/plugins/bidirectional-plugin_test.js +3 -2
- package/test/unit/ngsi-ld/plugins/multientity-plugin_test.js +61 -0
- package/test/unit/ngsi-ld/provisioning/device-provisioning-api_test.js +2 -1
- package/test/unit/ngsi-ld/provisioning/device-registration_test.js +3 -2
- package/test/unit/ngsi-ld/provisioning/device-update-registration_test.js +1 -0
- package/test/unit/ngsi-ld/provisioning/listProvisionedDevices-test.js +42 -54
- package/test/unit/ngsi-ld/provisioning/provisionDeviceMultientity-test.js +2 -1
- package/test/unit/ngsi-ld/provisioning/removeProvisionedDevice-test.js +4 -4
- package/test/unit/ngsi-ld/provisioning/singleConfigurationMode-test.js +3 -5
- package/test/unit/ngsi-ld/provisioning/updateProvisionedDevices-test.js +12 -18
- package/test/unit/ngsi-mixed/provisioning/ngsi-versioning-test.js +3 -1
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerIoTAgent3.json +19 -0
- package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerIoTAgent5.json +19 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin17.json +1 -1
- package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin29.json +22 -0
- 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/updateContextMiddleware1.json +10 -0
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMiddleware2.json +10 -0
- 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/updateContextMultientityTimestampPlugin1.json +6 -6
- package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityTimestampPlugin2.json +3 -3
- package/test/unit/{examples → ngsiv2/examples}/contextRequests/updateProvisionDevice.json +0 -0
- package/test/unit/ngsiv2/expressions/expressionBasedTransformations-test.js +37 -4
- package/test/unit/ngsiv2/expressions/jexlBasedTransformations-test.js +598 -0
- package/test/unit/ngsiv2/general/contextBrokerOAuthSecurityAccess-test.js +3 -2
- package/test/unit/ngsiv2/general/deviceService-test.js +9 -8
- package/test/unit/ngsiv2/general/https-support-test.js +2 -1
- package/test/unit/ngsiv2/general/iotam-autoregistration-test.js +2 -1
- package/test/unit/ngsiv2/general/startup-test.js +1 -0
- package/test/unit/ngsiv2/lazyAndCommands/active-devices-attribute-update-test.js +3 -1
- package/test/unit/ngsiv2/lazyAndCommands/command-test.js +2 -1
- package/test/unit/ngsiv2/lazyAndCommands/lazy-devices-test.js +287 -15
- package/test/unit/ngsiv2/lazyAndCommands/polling-commands-test.js +3 -1
- package/test/unit/ngsiv2/ngsiService/active-devices-test.js +88 -0
- package/test/unit/{ngsiService → ngsiv2/ngsiService}/queryDeviceInformationInCb-test.js +20 -49
- package/test/unit/ngsiv2/ngsiService/subscriptions-test.js +4 -3
- package/test/unit/ngsiv2/plugins/bidirectional-plugin_test.js +3 -2
- package/test/unit/ngsiv2/plugins/multientity-plugin_test.js +526 -0
- package/test/unit/{plugins → ngsiv2/plugins}/translation-inPlugins_test.js +21 -21
- package/test/unit/{provisioning → ngsiv2/provisioning}/device-group-api-test.js +19 -50
- package/test/unit/{provisioning/device-group-utils_test.js → ngsiv2/provisioning/device-group-utils-test.js} +5 -4
- package/test/unit/ngsiv2/provisioning/device-provisioning-api_test.js +2 -1
- package/test/unit/ngsiv2/provisioning/device-registration_test.js +3 -2
- package/test/unit/ngsiv2/provisioning/device-update-registration_test.js +4 -3
- package/test/unit/ngsiv2/provisioning/listProvisionedDevices-test.js +42 -53
- package/test/unit/ngsiv2/provisioning/provisionDeviceMultientity-test.js +2 -1
- package/test/unit/ngsiv2/provisioning/removeProvisionedDevice-test.js +4 -4
- package/test/unit/ngsiv2/provisioning/singleConfigurationMode-test.js +3 -4
- package/test/unit/ngsiv2/provisioning/updateProvisionedDevices-test.js +14 -20
- package/test/unit/plugins/capture-configuration-inPlugins_test.js +3 -1
- package/test/unit/plugins/capture-provision-inPlugins_test.js +8 -18
- package/.eslintcache +0 -1
- package/.nyc_output/dca24ca1-851e-490c-9d34-8d13b3330297.json +0 -1
- package/.nyc_output/processinfo/dca24ca1-851e-490c-9d34-8d13b3330297.json +0 -1
- package/bin/agentConsole.js +0 -257
- package/bin/iotAgentTester.js +0 -44
- package/lib/command/commandLine.js +0 -918
- package/lib/command/migration.js +0 -176
- package/lib/services/devices/devices-NGSI-v1.js +0 -310
- package/lib/services/ngsi/entities-NGSI-v1.js +0 -299
- 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 -26
- 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 -32
- 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/updateContextExpressionPlugin10.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/updateContextExpressionPlugin6.json +0 -17
- package/test/unit/examples/contextRequests/updateContextExpressionPlugin7.json +0 -27
- package/test/unit/examples/contextRequests/updateContextExpressionPlugin8.json +0 -22
- package/test/unit/examples/contextRequests/updateContextExpressionPlugin9.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 -42
- 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/general/migration-test.js +0 -256
- 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,299 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2020 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
|
-
* Modified by: Jason Fox - FIWARE Foundation
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
const request = require('request');
|
|
29
|
-
const statsService = require('./../stats/statsRegistry');
|
|
30
|
-
const async = require('async');
|
|
31
|
-
const apply = async.apply;
|
|
32
|
-
const alarms = require('../common/alarmManagement');
|
|
33
|
-
const errors = require('../../errors');
|
|
34
|
-
const utils = require('../northBound/restUtils');
|
|
35
|
-
const config = require('../../commonConfig');
|
|
36
|
-
const constants = require('../../constants');
|
|
37
|
-
const moment = require('moment-timezone');
|
|
38
|
-
const logger = require('logops');
|
|
39
|
-
const context = {
|
|
40
|
-
op: 'IoTAgentNGSI.Entities-v1'
|
|
41
|
-
};
|
|
42
|
-
const ngsiUtils = require('./ngsiUtils');
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Generate an operation handler for NGSI-based operations (query and update). The handler takes care of identifiying
|
|
46
|
-
* the errors and calling the appropriate callback with a success or a failure depending on how the operation ended.
|
|
47
|
-
*
|
|
48
|
-
* Most of the parameters are passed for debugging purposes mainly.
|
|
49
|
-
*
|
|
50
|
-
* @param {String} operationName Name of the NGSI operation being performed.
|
|
51
|
-
* @param {String} entityName Name of the entity that was the target of the operation.
|
|
52
|
-
* @param {Object} typeInformation Information about the device the entity represents.
|
|
53
|
-
* @param {String} token Security token used to access the entity.
|
|
54
|
-
* @param {Object} options Object holding all the information about the HTTP request.
|
|
55
|
-
|
|
56
|
-
* @return {Function} The generated handler.
|
|
57
|
-
*/
|
|
58
|
-
function generateNGSIOperationHandler(operationName, entityName, typeInformation, token, options, callback) {
|
|
59
|
-
return function (error, response, body) {
|
|
60
|
-
if (error) {
|
|
61
|
-
logger.error(context, 'Error found executing ' + operationName + ' action in Context Broker: %s', error);
|
|
62
|
-
|
|
63
|
-
alarms.raise(constants.ORION_ALARM, error);
|
|
64
|
-
callback(error);
|
|
65
|
-
} else if (body && body.orionError) {
|
|
66
|
-
logger.debug(
|
|
67
|
-
context,
|
|
68
|
-
'Orion error found executing ' + operationName + ' action in Context Broker: %j',
|
|
69
|
-
body.orionError
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
callback(new errors.BadRequest(body.orionError.details));
|
|
73
|
-
} else if (response && body && response.statusCode === 200) {
|
|
74
|
-
const errorField = ngsiUtils.getErrorField(body);
|
|
75
|
-
|
|
76
|
-
logger.debug(
|
|
77
|
-
context,
|
|
78
|
-
'Received the following request from the CB:\n\n%s\n\n',
|
|
79
|
-
JSON.stringify(body, null, 4)
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
if (errorField) {
|
|
83
|
-
logger.error(
|
|
84
|
-
context,
|
|
85
|
-
'Operation ' + operationName + ' error connecting to the Context Broker: %j',
|
|
86
|
-
errorField
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
if (
|
|
90
|
-
errorField.code &&
|
|
91
|
-
errorField.code === '404' &&
|
|
92
|
-
errorField.details &&
|
|
93
|
-
errorField.details.includes(typeInformation.type)
|
|
94
|
-
) {
|
|
95
|
-
callback(new errors.DeviceNotFound(entityName));
|
|
96
|
-
} else if (errorField.code && errorField.code === '404') {
|
|
97
|
-
callback(new errors.AttributeNotFound());
|
|
98
|
-
} else {
|
|
99
|
-
callback(new errors.EntityGenericError(entityName, typeInformation.type, errorField));
|
|
100
|
-
}
|
|
101
|
-
} else {
|
|
102
|
-
logger.debug(context, 'Value updated successfully');
|
|
103
|
-
alarms.release(constants.ORION_ALARM);
|
|
104
|
-
callback(null, body);
|
|
105
|
-
}
|
|
106
|
-
} else if (response && (response.statusCode === 403 || response.statusCode === 401)) {
|
|
107
|
-
logger.debug(context, 'Access forbidden executing ' + operationName + ' operation');
|
|
108
|
-
callback(
|
|
109
|
-
new errors.AccessForbidden(
|
|
110
|
-
token,
|
|
111
|
-
options.headers['fiware-service'],
|
|
112
|
-
options.headers['fiware-servicepath']
|
|
113
|
-
)
|
|
114
|
-
);
|
|
115
|
-
} else {
|
|
116
|
-
logger.debug(context, 'Unknown error executing ' + operationName + ' operation');
|
|
117
|
-
|
|
118
|
-
callback(
|
|
119
|
-
new errors.EntityGenericError(
|
|
120
|
-
entityName,
|
|
121
|
-
typeInformation.type,
|
|
122
|
-
{
|
|
123
|
-
details: body
|
|
124
|
-
},
|
|
125
|
-
response.statusCode
|
|
126
|
-
)
|
|
127
|
-
);
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function addTimestamp(payload, timezone) {
|
|
133
|
-
const timestamp = {
|
|
134
|
-
name: constants.TIMESTAMP_ATTRIBUTE,
|
|
135
|
-
type: constants.TIMESTAMP_TYPE
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
if (!timezone) {
|
|
139
|
-
timestamp.value = new Date().toISOString();
|
|
140
|
-
} else {
|
|
141
|
-
timestamp.value = moment().tz(timezone).format('YYYY-MM-DD[T]HH:mm:ss.SSSZ');
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
function addMetadata(attribute) {
|
|
145
|
-
let timestampFound = false;
|
|
146
|
-
|
|
147
|
-
if (!attribute.metadatas) {
|
|
148
|
-
attribute.metadatas = [];
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
for (let i = 0; i < attribute.metadatas.length; i++) {
|
|
152
|
-
if (
|
|
153
|
-
attribute.metadatas[i].type === constants.TIMESTAMP_TYPE &&
|
|
154
|
-
attribute.metadatas[i].name === constants.TIMESTAMP_ATTRIBUTE
|
|
155
|
-
) {
|
|
156
|
-
attribute.metadatas[i].value = timestamp.value;
|
|
157
|
-
timestampFound = true;
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
if (!timestampFound) {
|
|
163
|
-
attribute.metadatas.push(timestamp);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
return attribute;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
payload.contextElements[0].attributes.map(addMetadata);
|
|
170
|
-
payload.contextElements[0].attributes.push(timestamp);
|
|
171
|
-
return payload;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Makes a query to the Device's entity in the context broker using NGSIv1, with the list of
|
|
176
|
-
* attributes given by the 'attributes' array.
|
|
177
|
-
*
|
|
178
|
-
* @param {String} entityName Name of the entity to query.
|
|
179
|
-
* @param {Array} attributes Attribute array containing the names of the attributes to query.
|
|
180
|
-
* @param {Object} typeInformation Configuration information for the device.
|
|
181
|
-
* @param {String} token User token to identify against the PEP Proxies (optional).
|
|
182
|
-
*/
|
|
183
|
-
function sendQueryValueNgsi1(entityName, attributes, typeInformation, token, callback) {
|
|
184
|
-
const options = ngsiUtils.createRequestObject('/v1/queryContext', typeInformation, token);
|
|
185
|
-
|
|
186
|
-
if (!typeInformation || !typeInformation.type) {
|
|
187
|
-
callback(new errors.TypeNotFound(null, entityName));
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
options.json = {
|
|
192
|
-
entities: [
|
|
193
|
-
{
|
|
194
|
-
type: typeInformation.type,
|
|
195
|
-
isPattern: 'false',
|
|
196
|
-
id: entityName
|
|
197
|
-
}
|
|
198
|
-
],
|
|
199
|
-
attributes
|
|
200
|
-
};
|
|
201
|
-
|
|
202
|
-
logger.debug(context, 'Querying values of the device in the Context Broker at [%s]', options.url);
|
|
203
|
-
logger.debug(context, 'Using the following request:\n\n%s\n\n', JSON.stringify(options, null, 4));
|
|
204
|
-
|
|
205
|
-
request(
|
|
206
|
-
options,
|
|
207
|
-
generateNGSIOperationHandler('query', entityName, typeInformation, token, options, function (error, result) {
|
|
208
|
-
if (error) {
|
|
209
|
-
callback(error);
|
|
210
|
-
} else {
|
|
211
|
-
ngsiUtils.applyMiddlewares(ngsiUtils.queryMiddleware, result, typeInformation, callback);
|
|
212
|
-
}
|
|
213
|
-
})
|
|
214
|
-
);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Makes an update in the Device's entity in the context broker, with the values given in the 'attributes' array. This
|
|
219
|
-
* array should comply to the NGSIv1's attribute format.
|
|
220
|
-
*
|
|
221
|
-
* @param {String} entityName Name of the entity to register.
|
|
222
|
-
* @param {Array} attributes Attribute array containing the values to update.
|
|
223
|
-
* @param {Object} typeInformation Configuration information for the device.
|
|
224
|
-
* @param {String} token User token to identify against the PEP Proxies (optional).
|
|
225
|
-
*/
|
|
226
|
-
function sendUpdateValueNgsi1(entityName, attributes, typeInformation, token, callback) {
|
|
227
|
-
const options = ngsiUtils.createRequestObject('/v1/updateContext', typeInformation, token);
|
|
228
|
-
|
|
229
|
-
if (typeInformation && typeInformation.staticAttributes) {
|
|
230
|
-
attributes = attributes.concat(typeInformation.staticAttributes);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
if (!typeInformation || !typeInformation.type) {
|
|
234
|
-
callback(new errors.TypeNotFound(null, entityName));
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
const payload = {
|
|
239
|
-
contextElements: [
|
|
240
|
-
{
|
|
241
|
-
type: typeInformation.type,
|
|
242
|
-
isPattern: 'false',
|
|
243
|
-
id: entityName,
|
|
244
|
-
attributes
|
|
245
|
-
}
|
|
246
|
-
]
|
|
247
|
-
};
|
|
248
|
-
if (config.getConfig().appendMode === true) {
|
|
249
|
-
payload.updateAction = 'APPEND';
|
|
250
|
-
} else {
|
|
251
|
-
payload.updateAction = 'UPDATE';
|
|
252
|
-
}
|
|
253
|
-
async.waterfall(
|
|
254
|
-
[
|
|
255
|
-
apply(statsService.add, 'measureRequests', 1),
|
|
256
|
-
apply(ngsiUtils.applyMiddlewares, ngsiUtils.updateMiddleware, payload, typeInformation)
|
|
257
|
-
],
|
|
258
|
-
function (error, result) {
|
|
259
|
-
if (error) {
|
|
260
|
-
callback(error);
|
|
261
|
-
} else {
|
|
262
|
-
if (result) {
|
|
263
|
-
options.json = result;
|
|
264
|
-
} else {
|
|
265
|
-
options.json = payload;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
if (
|
|
269
|
-
'timestamp' in typeInformation && typeInformation.timestamp !== undefined
|
|
270
|
-
? typeInformation.timestamp
|
|
271
|
-
: config.getConfig().timestamp
|
|
272
|
-
) {
|
|
273
|
-
if (!utils.isTimestamped(options.json)) {
|
|
274
|
-
options.json = addTimestamp(options.json, typeInformation.timezone);
|
|
275
|
-
} else if (!utils.IsValidTimestamped(options.json)) {
|
|
276
|
-
logger.error(context, 'Invalid timestamp:%s', JSON.stringify(options.json));
|
|
277
|
-
callback(new errors.BadTimestamp(options.json));
|
|
278
|
-
return;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
logger.debug(context, 'Updating device value in the Context Broker at [%s]', options.url);
|
|
283
|
-
logger.debug(
|
|
284
|
-
context,
|
|
285
|
-
'Using the following NGSI-v1 request:\n\n%s\n\n',
|
|
286
|
-
JSON.stringify(options, null, 4)
|
|
287
|
-
);
|
|
288
|
-
|
|
289
|
-
request(
|
|
290
|
-
options,
|
|
291
|
-
generateNGSIOperationHandler('update', entityName, typeInformation, token, options, callback)
|
|
292
|
-
);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
);
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
exports.sendQueryValue = sendQueryValueNgsi1;
|
|
299
|
-
exports.sendUpdateValue = sendUpdateValueNgsi1;
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2020 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
|
-
* Modified by: Jason Fox - FIWARE Foundation
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
const errors = require('../../errors');
|
|
29
|
-
const logger = require('logops');
|
|
30
|
-
const config = require('../../commonConfig');
|
|
31
|
-
const utils = require('../northBound/restUtils');
|
|
32
|
-
const context = {
|
|
33
|
-
op: 'IoTAgentNGSI.Subscription-v1'
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Generate a new subscription request handler using NGSIv1, based on the device and triggers given to the function.
|
|
38
|
-
*
|
|
39
|
-
* @param {Object} device Object containing all the information about a particular device.
|
|
40
|
-
* @param {Object} triggers Array with the names of the attributes that would trigger the subscription.
|
|
41
|
-
* @param {Boolean} store If set, store the subscription result in the device. Otherwise, return the ID.
|
|
42
|
-
* @param {Function} callback Callback to be called when the subscription handler ends.
|
|
43
|
-
* @return {Function} Returns a request handler for the given data.
|
|
44
|
-
*/
|
|
45
|
-
function createSubscriptionHandlerNgsi1(device, triggers, store, callback) {
|
|
46
|
-
return function (error, response, body) {
|
|
47
|
-
if (error || !body) {
|
|
48
|
-
logger.debug(
|
|
49
|
-
context,
|
|
50
|
-
'Transport error found subscribing device with id [%s] to entity [%s]',
|
|
51
|
-
device.id,
|
|
52
|
-
device.name
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
callback(error);
|
|
56
|
-
} else if (response.statusCode !== 200 && response.statusCode !== 201) {
|
|
57
|
-
logger.debug(
|
|
58
|
-
context,
|
|
59
|
-
'Unknown error subscribing device with id [%s] to entity [%s]: $s',
|
|
60
|
-
response.statusCode
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
callback(
|
|
64
|
-
new errors.EntityGenericError(
|
|
65
|
-
device.name,
|
|
66
|
-
device.type,
|
|
67
|
-
{
|
|
68
|
-
details: body
|
|
69
|
-
},
|
|
70
|
-
response.statusCode
|
|
71
|
-
)
|
|
72
|
-
);
|
|
73
|
-
} else if (body && body.orionError) {
|
|
74
|
-
logger.debug(
|
|
75
|
-
context,
|
|
76
|
-
'Orion found subscribing device with id [%s] to entity [%s]: %s',
|
|
77
|
-
device.id,
|
|
78
|
-
device.name,
|
|
79
|
-
body.orionError
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
callback(new errors.BadRequest(body.orionError.details));
|
|
83
|
-
} else if (store) {
|
|
84
|
-
if (!device.subscriptions) {
|
|
85
|
-
device.subscriptions = [];
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
device.subscriptions.push({
|
|
89
|
-
id: body.subscribeResponse.subscriptionId,
|
|
90
|
-
triggers
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
config.getRegistry().update(device, callback);
|
|
94
|
-
} else {
|
|
95
|
-
callback(null, body.subscribeResponse.subscriptionId);
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Makes a subscription for the given device's entity using NGSIv1, triggered by the given attributes.
|
|
102
|
-
* The contents of the notification can be selected using the "content" array (that can be left blank
|
|
103
|
-
* to notify the complete entity).
|
|
104
|
-
*
|
|
105
|
-
* @param {Object} device Object containing all the information about a particular device.
|
|
106
|
-
* @param {Object} triggers Array with the names of the attributes that would trigger the subscription
|
|
107
|
-
* @param {Object} content Array with the names of the attributes to retrieve in the notification.
|
|
108
|
-
*/
|
|
109
|
-
function subscribeNgsi1(device, triggers, content, callback) {
|
|
110
|
-
const options = {
|
|
111
|
-
method: 'POST',
|
|
112
|
-
headers: {
|
|
113
|
-
'fiware-service': device.service,
|
|
114
|
-
'fiware-servicepath': device.subservice
|
|
115
|
-
},
|
|
116
|
-
json: {
|
|
117
|
-
entities: [
|
|
118
|
-
{
|
|
119
|
-
type: device.type,
|
|
120
|
-
isPattern: 'false',
|
|
121
|
-
id: device.name
|
|
122
|
-
}
|
|
123
|
-
],
|
|
124
|
-
reference: config.getConfig().providerUrl + '/notify',
|
|
125
|
-
duration: config.getConfig().deviceRegistrationDuration || 'P100Y',
|
|
126
|
-
notifyConditions: [
|
|
127
|
-
{
|
|
128
|
-
type: 'ONCHANGE',
|
|
129
|
-
condValues: triggers
|
|
130
|
-
}
|
|
131
|
-
]
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
let store = true;
|
|
135
|
-
|
|
136
|
-
if (content) {
|
|
137
|
-
options.json.attributes = content;
|
|
138
|
-
store = false;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
if (device.cbHost && device.cbHost.indexOf('://') !== -1) {
|
|
142
|
-
options.uri = device.cbHost + '/v1/subscribeContext';
|
|
143
|
-
} else if (device.cbHost && device.cbHost.indexOf('://') === -1) {
|
|
144
|
-
options.uri = 'http://' + device.cbHost + '/v1/subscribeContext';
|
|
145
|
-
} else {
|
|
146
|
-
options.uri = config.getConfig().contextBroker.url + '/v1/subscribeContext';
|
|
147
|
-
}
|
|
148
|
-
utils.executeWithSecurity(options, device, createSubscriptionHandlerNgsi1(device, triggers, store, callback));
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Generate a new unsubscription request handler using NGSIv1, based on the device and subscription ID
|
|
153
|
-
* given to the function.
|
|
154
|
-
*
|
|
155
|
-
* @param {Object} device Object containing all the information about a particular device.
|
|
156
|
-
* @param {String} id ID of the subscription to remove.
|
|
157
|
-
* @param {Function} callback Callback to be called when the subscription handler ends.
|
|
158
|
-
* @return {Function} Returns a request handler for the given data.
|
|
159
|
-
*/
|
|
160
|
-
function createUnsubscribeHandlerNgsi1(device, id, callback) {
|
|
161
|
-
return function (error, response, body) {
|
|
162
|
-
if (error || !body) {
|
|
163
|
-
logger.debug(
|
|
164
|
-
context,
|
|
165
|
-
'Transport error found subscribing device with id [%s] to entity [%s]',
|
|
166
|
-
device.id,
|
|
167
|
-
device.name
|
|
168
|
-
);
|
|
169
|
-
|
|
170
|
-
callback(error);
|
|
171
|
-
} else if (response.statusCode !== 200 && response.statusCode !== 201) {
|
|
172
|
-
logger.debug(
|
|
173
|
-
context,
|
|
174
|
-
'Unknown error subscribing device with id [%s] to entity [%s]: $s',
|
|
175
|
-
response.statusCode
|
|
176
|
-
);
|
|
177
|
-
|
|
178
|
-
callback(
|
|
179
|
-
new errors.EntityGenericError(
|
|
180
|
-
device.name,
|
|
181
|
-
device.type,
|
|
182
|
-
{
|
|
183
|
-
details: body
|
|
184
|
-
},
|
|
185
|
-
response.statusCode
|
|
186
|
-
)
|
|
187
|
-
);
|
|
188
|
-
} else if (body && body.orionError) {
|
|
189
|
-
logger.debug(
|
|
190
|
-
context,
|
|
191
|
-
'Orion found subscribing device with id [%s] to entity [%s]: %s',
|
|
192
|
-
device.id,
|
|
193
|
-
device.name,
|
|
194
|
-
body.orionError
|
|
195
|
-
);
|
|
196
|
-
|
|
197
|
-
callback(new errors.BadRequest(body.orionError.details));
|
|
198
|
-
} else {
|
|
199
|
-
device.subscriptions.splice(device.subscriptions.indexOf(id), 1);
|
|
200
|
-
config.getRegistry().update(device, callback);
|
|
201
|
-
}
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Remove the subscription with the given ID from the Context Broker and from the device repository using NGSIv1.
|
|
207
|
-
*
|
|
208
|
-
* @param {Object} device Object containing all the information about a particular device.
|
|
209
|
-
* @param {String} id ID of the subscription to remove.
|
|
210
|
-
*/
|
|
211
|
-
function unsubscribeNgsi1(device, id, callback) {
|
|
212
|
-
const options = {
|
|
213
|
-
method: 'POST',
|
|
214
|
-
headers: {
|
|
215
|
-
'fiware-service': device.service,
|
|
216
|
-
'fiware-servicepath': device.subservice
|
|
217
|
-
},
|
|
218
|
-
json: {
|
|
219
|
-
subscriptionId: id
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
|
-
|
|
223
|
-
if (device.cbHost && device.cbHost.indexOf('://') !== -1) {
|
|
224
|
-
options.uri = device.cbHost + '/v1/unsubscribeContext';
|
|
225
|
-
} else if (device.cbHost && device.cbHost.indexOf('://') === -1) {
|
|
226
|
-
options.uri = 'http://' + device.cbHost + '/v1/unsubscribeContext';
|
|
227
|
-
} else {
|
|
228
|
-
options.uri = config.getConfig().contextBroker.url + '/v1/unsubscribeContext';
|
|
229
|
-
}
|
|
230
|
-
utils.executeWithSecurity(options, device, createUnsubscribeHandlerNgsi1(device, id, callback));
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
exports.subscribe = subscribeNgsi1;
|
|
234
|
-
exports.unsubscribe = unsubscribeNgsi1;
|