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.
Files changed (347) hide show
  1. package/.github/workflows/ci.yml +17 -2
  2. package/.nyc_output/76bc24ff-5fac-4b5a-997d-de2799342eb0.json +1 -0
  3. package/.nyc_output/processinfo/76bc24ff-5fac-4b5a-997d-de2799342eb0.json +1 -0
  4. package/.nyc_output/processinfo/index.json +1 -1
  5. package/CHANGES_NEXT_RELEASE +1 -0
  6. package/README.md +3 -54
  7. package/doc/advanced-topics.md +121 -85
  8. package/doc/api.md +52 -52
  9. package/doc/development.md +13 -6
  10. package/doc/expressionLanguage.md +514 -312
  11. package/doc/installationguide.md +66 -64
  12. package/doc/usermanual.md +48 -16
  13. package/docker/Mosquitto/Dockerfile +1 -0
  14. package/docker/Mosquitto/README.md +1 -0
  15. package/docker/Mosquitto/startMosquitto.sh +9 -4
  16. package/lib/commonConfig.js +1 -14
  17. package/lib/errors.js +0 -16
  18. package/lib/fiware-iotagent-lib.js +4 -2
  19. package/lib/jexlTranformsMap.js +13 -2
  20. package/lib/model/Device.js +4 -1
  21. package/lib/model/Group.js +19 -1
  22. package/lib/plugins/attributeAlias.js +6 -13
  23. package/lib/plugins/bidirectionalData.js +1 -21
  24. package/lib/plugins/expressionParser.js +7 -6
  25. package/lib/plugins/expressionPlugin.js +11 -25
  26. package/lib/plugins/jexlParser.js +8 -4
  27. package/lib/plugins/multiEntity.js +54 -145
  28. package/lib/plugins/pluginUtils.js +12 -48
  29. package/lib/plugins/timestampProcessPlugin.js +1 -46
  30. package/lib/request-shim.js +111 -0
  31. package/lib/services/common/domain.js +6 -2
  32. package/lib/services/common/genericMiddleware.js +6 -2
  33. package/lib/services/common/iotManagerService.js +1 -1
  34. package/lib/services/common/securityServiceKeystone.js +1 -1
  35. package/lib/services/common/securityServiceOAuth2.js +3 -2
  36. package/lib/services/devices/deviceRegistryMongoDB.js +2 -0
  37. package/lib/services/devices/deviceService.js +2 -5
  38. package/lib/services/devices/devices-NGSI-LD.js +1 -1
  39. package/lib/services/devices/devices-NGSI-v2.js +4 -8
  40. package/lib/services/devices/registrationUtils.js +1 -134
  41. package/lib/services/ngsi/entities-NGSI-LD.js +205 -124
  42. package/lib/services/ngsi/entities-NGSI-v2.js +109 -15
  43. package/lib/services/ngsi/ngsiService.js +4 -6
  44. package/lib/services/ngsi/ngsiUtils.js +0 -36
  45. package/lib/services/ngsi/subscriptionService.js +1 -4
  46. package/lib/services/northBound/contextServer-NGSI-LD.js +7 -2
  47. package/lib/services/northBound/contextServer-NGSI-v2.js +24 -12
  48. package/lib/services/northBound/contextServer.js +1 -4
  49. package/lib/services/northBound/contextServerUtils.js +0 -81
  50. package/lib/services/northBound/deviceProvisioningServer.js +31 -7
  51. package/lib/services/northBound/northboundServer.js +2 -0
  52. package/lib/services/northBound/restUtils.js +1 -38
  53. package/lib/templates/updateDevice.json +4 -0
  54. package/lib/templates/updateDeviceLax.json +4 -0
  55. package/package.json +10 -16
  56. package/test/tools/utils.js +2 -0
  57. package/test/unit/examples/groupProvisioningRequests/multipleGroupsCreation.json +1 -1
  58. package/test/unit/expressions/jexlExpression-test.js +44 -5
  59. package/test/unit/general/contextBrokerKeystoneSecurityAccess-test.js +19 -66
  60. package/test/unit/general/deviceService-test.js +11 -27
  61. package/test/unit/general/loglevel-api_test.js +6 -11
  62. package/test/unit/general/startup-test.js +2 -1
  63. package/test/unit/memoryRegistry/deviceRegistryMemory_test.js +8 -16
  64. package/test/unit/mongodb/mongodb-group-registry-test.js +1 -1
  65. package/test/unit/mongodb/mongodb-registry-test.js +38 -114
  66. package/test/unit/ngsi-ld/examples/contextRequests/createMinimumProvisionedDevice.json +0 -7
  67. package/test/unit/ngsi-ld/examples/contextRequests/createProvisionedDevice.json +0 -7
  68. package/test/unit/ngsi-ld/examples/contextRequests/createProvisionedDeviceMultientity.json +0 -7
  69. package/test/unit/ngsi-ld/examples/contextRequests/createProvisionedDeviceWithGroupAndStatic.json +0 -14
  70. package/test/unit/ngsi-ld/examples/contextRequests/createProvisionedDeviceWithGroupAndStatic2.json +0 -14
  71. package/test/unit/ngsi-ld/examples/contextRequests/createProvisionedDeviceWithGroupAndStatic3.json +1 -15
  72. package/test/unit/ngsi-ld/examples/contextRequests/createTimeInstantMinimumDevice.json +0 -7
  73. package/test/unit/ngsi-ld/examples/contextRequests/updateContextAliasPlugin6.json +0 -7
  74. package/test/unit/ngsi-ld/examples/contextRequests/updateContextAutocast5.json +0 -7
  75. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin12a.json +7 -0
  76. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin13.json +13 -13
  77. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin16.json +0 -7
  78. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin17.json +0 -7
  79. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin1a.json +18 -0
  80. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin29.json +18 -0
  81. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin31.json +15 -0
  82. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin32.json +17 -0
  83. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin33.json +18 -0
  84. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin34.json +17 -0
  85. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin4a.json +36 -0
  86. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin5.json +0 -7
  87. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin7.json +16 -16
  88. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin8a.json +18 -0
  89. package/test/unit/ngsi-ld/examples/contextRequests/updateContextGeoproperties3.json +0 -7
  90. package/test/unit/ngsi-ld/examples/contextRequests/updateContextMultientityPlugin15.json +25 -0
  91. package/test/unit/ngsi-ld/examples/contextRequests/updateContextMultientityTimestampPlugin1.json +6 -6
  92. package/test/unit/ngsi-ld/examples/contextRequests/updateContextMultientityTimestampPlugin2.json +3 -3
  93. package/test/unit/ngsi-ld/examples/contextRequests/updateProvisionActiveAttributes1.json +0 -7
  94. package/test/unit/ngsi-ld/examples/contextRequests/updateProvisionCommands1.json +0 -7
  95. package/test/unit/ngsi-ld/examples/contextRequests/updateProvisionDeviceStatic.json +0 -7
  96. package/test/unit/ngsi-ld/examples/contextRequests/updateProvisionMinimumDevice.json +0 -7
  97. package/test/unit/ngsi-ld/expressions/jexlBasedTransformations-test.js +1018 -0
  98. package/test/unit/ngsi-ld/general/contextBrokerOAuthSecurityAccess-test.js +2 -2
  99. package/test/unit/ngsi-ld/general/deviceService-test.js +1 -1
  100. package/test/unit/ngsi-ld/general/https-support-test.js +2 -1
  101. package/test/unit/ngsi-ld/general/iotam-autoregistration-test.js +2 -1
  102. package/test/unit/ngsi-ld/general/startup-test.js +1 -0
  103. package/test/unit/ngsi-ld/lazyAndCommands/active-devices-attribute-update-test.js +3 -1
  104. package/test/unit/ngsi-ld/lazyAndCommands/command-test.js +2 -1
  105. package/test/unit/ngsi-ld/lazyAndCommands/lazy-devices-test.js +2 -6
  106. package/test/unit/ngsi-ld/lazyAndCommands/polling-commands-test.js +2 -1
  107. package/test/unit/ngsi-ld/ngsiService/active-devices-test.js +1 -0
  108. package/test/unit/ngsi-ld/ngsiService/autocast-test.js +1 -0
  109. package/test/unit/ngsi-ld/ngsiService/geoproperties-test.js +1 -0
  110. package/test/unit/ngsi-ld/ngsiService/subscriptions-test.js +4 -3
  111. package/test/unit/ngsi-ld/plugins/alias-plugin_test.js +1 -0
  112. package/test/unit/ngsi-ld/plugins/bidirectional-plugin_test.js +3 -2
  113. package/test/unit/ngsi-ld/plugins/multientity-plugin_test.js +61 -0
  114. package/test/unit/ngsi-ld/provisioning/device-provisioning-api_test.js +2 -1
  115. package/test/unit/ngsi-ld/provisioning/device-registration_test.js +3 -2
  116. package/test/unit/ngsi-ld/provisioning/device-update-registration_test.js +1 -0
  117. package/test/unit/ngsi-ld/provisioning/listProvisionedDevices-test.js +42 -54
  118. package/test/unit/ngsi-ld/provisioning/provisionDeviceMultientity-test.js +2 -1
  119. package/test/unit/ngsi-ld/provisioning/removeProvisionedDevice-test.js +4 -4
  120. package/test/unit/ngsi-ld/provisioning/singleConfigurationMode-test.js +3 -5
  121. package/test/unit/ngsi-ld/provisioning/updateProvisionedDevices-test.js +12 -18
  122. package/test/unit/ngsi-mixed/provisioning/ngsi-versioning-test.js +3 -1
  123. package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerIoTAgent3.json +19 -0
  124. package/test/unit/ngsiv2/examples/contextAvailabilityRequests/registerIoTAgent5.json +19 -0
  125. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin17.json +1 -1
  126. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin29.json +22 -0
  127. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin30.json +6 -0
  128. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin31.json +18 -0
  129. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin32.json +16 -0
  130. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin33.json +22 -0
  131. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin34.json +12 -0
  132. package/test/unit/ngsiv2/examples/contextRequests/updateContextMiddleware1.json +10 -0
  133. package/test/unit/ngsiv2/examples/contextRequests/updateContextMiddleware2.json +10 -0
  134. package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin11.json +13 -0
  135. package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin12.json +33 -0
  136. package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin13.json +33 -0
  137. package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin14.json +33 -0
  138. package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin15.json +25 -0
  139. package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin16.json +25 -0
  140. package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityTimestampPlugin1.json +6 -6
  141. package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityTimestampPlugin2.json +3 -3
  142. package/test/unit/{examples → ngsiv2/examples}/contextRequests/updateProvisionDevice.json +0 -0
  143. package/test/unit/ngsiv2/expressions/expressionBasedTransformations-test.js +37 -4
  144. package/test/unit/ngsiv2/expressions/jexlBasedTransformations-test.js +598 -0
  145. package/test/unit/ngsiv2/general/contextBrokerOAuthSecurityAccess-test.js +3 -2
  146. package/test/unit/ngsiv2/general/deviceService-test.js +9 -8
  147. package/test/unit/ngsiv2/general/https-support-test.js +2 -1
  148. package/test/unit/ngsiv2/general/iotam-autoregistration-test.js +2 -1
  149. package/test/unit/ngsiv2/general/startup-test.js +1 -0
  150. package/test/unit/ngsiv2/lazyAndCommands/active-devices-attribute-update-test.js +3 -1
  151. package/test/unit/ngsiv2/lazyAndCommands/command-test.js +2 -1
  152. package/test/unit/ngsiv2/lazyAndCommands/lazy-devices-test.js +287 -15
  153. package/test/unit/ngsiv2/lazyAndCommands/polling-commands-test.js +3 -1
  154. package/test/unit/ngsiv2/ngsiService/active-devices-test.js +88 -0
  155. package/test/unit/{ngsiService → ngsiv2/ngsiService}/queryDeviceInformationInCb-test.js +20 -49
  156. package/test/unit/ngsiv2/ngsiService/subscriptions-test.js +4 -3
  157. package/test/unit/ngsiv2/plugins/bidirectional-plugin_test.js +3 -2
  158. package/test/unit/ngsiv2/plugins/multientity-plugin_test.js +526 -0
  159. package/test/unit/{plugins → ngsiv2/plugins}/translation-inPlugins_test.js +21 -21
  160. package/test/unit/{provisioning → ngsiv2/provisioning}/device-group-api-test.js +19 -50
  161. package/test/unit/{provisioning/device-group-utils_test.js → ngsiv2/provisioning/device-group-utils-test.js} +5 -4
  162. package/test/unit/ngsiv2/provisioning/device-provisioning-api_test.js +2 -1
  163. package/test/unit/ngsiv2/provisioning/device-registration_test.js +3 -2
  164. package/test/unit/ngsiv2/provisioning/device-update-registration_test.js +4 -3
  165. package/test/unit/ngsiv2/provisioning/listProvisionedDevices-test.js +42 -53
  166. package/test/unit/ngsiv2/provisioning/provisionDeviceMultientity-test.js +2 -1
  167. package/test/unit/ngsiv2/provisioning/removeProvisionedDevice-test.js +4 -4
  168. package/test/unit/ngsiv2/provisioning/singleConfigurationMode-test.js +3 -4
  169. package/test/unit/ngsiv2/provisioning/updateProvisionedDevices-test.js +14 -20
  170. package/test/unit/plugins/capture-configuration-inPlugins_test.js +3 -1
  171. package/test/unit/plugins/capture-provision-inPlugins_test.js +8 -18
  172. package/.eslintcache +0 -1
  173. package/.nyc_output/dca24ca1-851e-490c-9d34-8d13b3330297.json +0 -1
  174. package/.nyc_output/processinfo/dca24ca1-851e-490c-9d34-8d13b3330297.json +0 -1
  175. package/bin/agentConsole.js +0 -257
  176. package/bin/iotAgentTester.js +0 -44
  177. package/lib/command/commandLine.js +0 -918
  178. package/lib/command/migration.js +0 -176
  179. package/lib/services/devices/devices-NGSI-v1.js +0 -310
  180. package/lib/services/ngsi/entities-NGSI-v1.js +0 -299
  181. package/lib/services/ngsi/subscription-NGSI-v1.js +0 -234
  182. package/lib/services/northBound/contextServer-NGSI-v1.js +0 -526
  183. package/lib/templates/notificationTemplateNgsi1.json +0 -75
  184. package/lib/templates/updateContextNgsi1.json +0 -50
  185. package/test/unit/examples/contextAvailabilityRequests/registerIoTAgent1.json +0 -21
  186. package/test/unit/examples/contextAvailabilityRequests/registerIoTAgent2.json +0 -21
  187. package/test/unit/examples/contextAvailabilityRequests/registerIoTAgent3.json +0 -25
  188. package/test/unit/examples/contextAvailabilityRequests/registerIoTAgent4.json +0 -22
  189. package/test/unit/examples/contextAvailabilityRequests/registerIoTAgentAttributeUpdates.json +0 -16
  190. package/test/unit/examples/contextAvailabilityRequests/registerIoTAgentCommands.json +0 -21
  191. package/test/unit/examples/contextAvailabilityRequests/registerNewDevice1.json +0 -21
  192. package/test/unit/examples/contextAvailabilityRequests/registerNewDevice2.json +0 -21
  193. package/test/unit/examples/contextAvailabilityRequests/registerProvisionedDevice.json +0 -25
  194. package/test/unit/examples/contextAvailabilityRequests/registerProvisionedDevice2.json +0 -21
  195. package/test/unit/examples/contextAvailabilityRequests/registerProvisionedDeviceWithGroup.json +0 -33
  196. package/test/unit/examples/contextAvailabilityRequests/registerProvisionedDeviceWithGroup2.json +0 -33
  197. package/test/unit/examples/contextAvailabilityRequests/unregisterDevice1.json +0 -22
  198. package/test/unit/examples/contextAvailabilityRequests/unregisterDevice3.json +0 -26
  199. package/test/unit/examples/contextAvailabilityRequests/unregisterProvisionedDevice.json +0 -26
  200. package/test/unit/examples/contextAvailabilityRequests/updateCommands1.json +0 -22
  201. package/test/unit/examples/contextAvailabilityRequests/updateIoTAgent1.json +0 -22
  202. package/test/unit/examples/contextAvailabilityRequests/updateIoTAgent2.json +0 -26
  203. package/test/unit/examples/contextAvailabilityRequests/updateIoTAgent3.json +0 -26
  204. package/test/unit/examples/contextAvailabilityResponses/registerIoTAgent1Failed.json +0 -8
  205. package/test/unit/examples/contextAvailabilityResponses/registerIoTAgent1Success.json +0 -4
  206. package/test/unit/examples/contextAvailabilityResponses/registerNewDevice1Success.json +0 -4
  207. package/test/unit/examples/contextAvailabilityResponses/registerNewDevice2Success.json +0 -4
  208. package/test/unit/examples/contextAvailabilityResponses/registerProvisionedDeviceSuccess.json +0 -4
  209. package/test/unit/examples/contextAvailabilityResponses/unregisterDevice1Failed.json +0 -8
  210. package/test/unit/examples/contextAvailabilityResponses/unregisterDevice1Success.json +0 -4
  211. package/test/unit/examples/contextAvailabilityResponses/updateCommands1Success.json +0 -4
  212. package/test/unit/examples/contextAvailabilityResponses/updateIoTAgent1Success.json +0 -6
  213. package/test/unit/examples/contextProviderResponses/queryInformationResponse.json +0 -22
  214. package/test/unit/examples/contextProviderResponses/queryInformationResponseEmptyAttributes.json +0 -22
  215. package/test/unit/examples/contextProviderResponses/queryInformationStaticAttributesResponse.json +0 -27
  216. package/test/unit/examples/contextProviderResponses/updateInformationResponse.json +0 -22
  217. package/test/unit/examples/contextProviderResponses/updateInformationResponse2.json +0 -22
  218. package/test/unit/examples/contextRequests/contextSubscriptionRequest.json +0 -20
  219. package/test/unit/examples/contextRequests/contextSubscriptionRequest2.json +0 -20
  220. package/test/unit/examples/contextRequests/createBidirectionalDevice.json +0 -17
  221. package/test/unit/examples/contextRequests/createDatetimeProvisionedDevice.json +0 -17
  222. package/test/unit/examples/contextRequests/createGeopointProvisionedDevice.json +0 -17
  223. package/test/unit/examples/contextRequests/createMinimumProvisionedDevice.json +0 -17
  224. package/test/unit/examples/contextRequests/createProvisionedDevice.json +0 -32
  225. package/test/unit/examples/contextRequests/createProvisionedDeviceMultientity.json +0 -32
  226. package/test/unit/examples/contextRequests/createProvisionedDeviceWithGroup.json +0 -47
  227. package/test/unit/examples/contextRequests/createProvisionedDeviceWithGroupAndStatic.json +0 -52
  228. package/test/unit/examples/contextRequests/createProvisionedDeviceWithGroupAndStatic2.json +0 -52
  229. package/test/unit/examples/contextRequests/createTimeinstantDevice.json +0 -17
  230. package/test/unit/examples/contextRequests/queryContext1.json +0 -13
  231. package/test/unit/examples/contextRequests/queryContext2.json +0 -13
  232. package/test/unit/examples/contextRequests/queryContextAliasPlugin1.json +0 -10
  233. package/test/unit/examples/contextRequests/queryContextCompressTimestamp1.json +0 -13
  234. package/test/unit/examples/contextRequests/updateActiveAttributes.json +0 -32
  235. package/test/unit/examples/contextRequests/updateContext1.json +0 -22
  236. package/test/unit/examples/contextRequests/updateContext2.json +0 -22
  237. package/test/unit/examples/contextRequests/updateContext3.json +0 -17
  238. package/test/unit/examples/contextRequests/updateContext3WithStatic.json +0 -22
  239. package/test/unit/examples/contextRequests/updateContext4.json +0 -22
  240. package/test/unit/examples/contextRequests/updateContext5.json +0 -19
  241. package/test/unit/examples/contextRequests/updateContextAliasPlugin.json +0 -22
  242. package/test/unit/examples/contextRequests/updateContextAliasPlugin2.json +0 -17
  243. package/test/unit/examples/contextRequests/updateContextAppendMode.json +0 -22
  244. package/test/unit/examples/contextRequests/updateContextCommandError.json +0 -22
  245. package/test/unit/examples/contextRequests/updateContextCommandExpired.json +0 -22
  246. package/test/unit/examples/contextRequests/updateContextCommandFinish.json +0 -22
  247. package/test/unit/examples/contextRequests/updateContextCommandStatus.json +0 -17
  248. package/test/unit/examples/contextRequests/updateContextCompressTimestamp1.json +0 -22
  249. package/test/unit/examples/contextRequests/updateContextCompressTimestamp2.json +0 -29
  250. package/test/unit/examples/contextRequests/updateContextExpressionPlugin1.json +0 -17
  251. package/test/unit/examples/contextRequests/updateContextExpressionPlugin10.json +0 -17
  252. package/test/unit/examples/contextRequests/updateContextExpressionPlugin2.json +0 -27
  253. package/test/unit/examples/contextRequests/updateContextExpressionPlugin3.json +0 -17
  254. package/test/unit/examples/contextRequests/updateContextExpressionPlugin4.json +0 -17
  255. package/test/unit/examples/contextRequests/updateContextExpressionPlugin5.json +0 -27
  256. package/test/unit/examples/contextRequests/updateContextExpressionPlugin6.json +0 -17
  257. package/test/unit/examples/contextRequests/updateContextExpressionPlugin7.json +0 -27
  258. package/test/unit/examples/contextRequests/updateContextExpressionPlugin8.json +0 -22
  259. package/test/unit/examples/contextRequests/updateContextExpressionPlugin9.json +0 -27
  260. package/test/unit/examples/contextRequests/updateContextMiddleware1.json +0 -22
  261. package/test/unit/examples/contextRequests/updateContextMultiEntityPlugin3.json +0 -35
  262. package/test/unit/examples/contextRequests/updateContextMultientityPlugin1.json +0 -30
  263. package/test/unit/examples/contextRequests/updateContextMultientityPlugin2.json +0 -30
  264. package/test/unit/examples/contextRequests/updateContextProcessTimestamp1.json +0 -29
  265. package/test/unit/examples/contextRequests/updateContextStaticAttributes.json +0 -22
  266. package/test/unit/examples/contextRequests/updateContextTimestamp.json +0 -41
  267. package/test/unit/examples/contextRequests/updateContextTimestampOverride.json +0 -22
  268. package/test/unit/examples/contextRequests/updateContextTimestampOverrideWithoutMilis.json +0 -22
  269. package/test/unit/examples/contextRequests/updateContextTimestampTimezone.json +0 -41
  270. package/test/unit/examples/contextRequests/updateProvisionActiveAttributes1.json +0 -17
  271. package/test/unit/examples/contextRequests/updateProvisionCommands1.json +0 -27
  272. package/test/unit/examples/contextRequests/updateProvisionDeviceStatic.json +0 -38
  273. package/test/unit/examples/contextRequests/updateProvisionMinimumDevice.json +0 -17
  274. package/test/unit/examples/contextResponses/contextSubscriptionRequest2Success.json +0 -7
  275. package/test/unit/examples/contextResponses/contextSubscriptionRequestSuccess.json +0 -7
  276. package/test/unit/examples/contextResponses/createBidirectionalDeviceSuccess.json +0 -22
  277. package/test/unit/examples/contextResponses/createDatetimeProvisionedDeviceSuccess.json +0 -22
  278. package/test/unit/examples/contextResponses/createGeopointProvisionedDeviceSuccess.json +0 -22
  279. package/test/unit/examples/contextResponses/createProvisionedDeviceSuccess.json +0 -22
  280. package/test/unit/examples/contextResponses/createTimeinstantSuccess.json +0 -22
  281. package/test/unit/examples/contextResponses/queryContext1Success.json +0 -27
  282. package/test/unit/examples/contextResponses/queryContext2Error.json +0 -7
  283. package/test/unit/examples/contextResponses/queryContext2UnknownError.json +0 -6
  284. package/test/unit/examples/contextResponses/queryContext3Error.json +0 -34
  285. package/test/unit/examples/contextResponses/queryContextAliasPlugin1Success.json +0 -27
  286. package/test/unit/examples/contextResponses/queryContextCompressTimestamp1Success.json +0 -27
  287. package/test/unit/examples/contextResponses/updateActiveAttributesSuccess.json +0 -42
  288. package/test/unit/examples/contextResponses/updateContext1Failed.json +0 -7
  289. package/test/unit/examples/contextResponses/updateContext1Success.json +0 -27
  290. package/test/unit/examples/contextResponses/updateContext2Failed.json +0 -35
  291. package/test/unit/examples/contextResponses/updateContextAliasPlugin2Success.json +0 -27
  292. package/test/unit/examples/contextResponses/updateContextAliasPluginSuccess.json +0 -27
  293. package/test/unit/examples/contextResponses/updateContextCommandFinishSuccess.json +0 -27
  294. package/test/unit/examples/contextResponses/updateContextCommandStatusSuccess.json +0 -22
  295. package/test/unit/examples/contextResponses/updateContextCompressTimestamp1Success.json +0 -27
  296. package/test/unit/examples/contextResponses/updateContextCompressTimestamp2Success.json +0 -34
  297. package/test/unit/examples/contextResponses/updateContextEvents1Success.json +0 -27
  298. package/test/unit/examples/contextResponses/updateContextExpressionPlugin1Success.json +0 -22
  299. package/test/unit/examples/contextResponses/updateContextExpressionPlugin2Success.json +0 -22
  300. package/test/unit/examples/contextResponses/updateContextExpressionPlugin3Success.json +0 -22
  301. package/test/unit/examples/contextResponses/updateContextExpressionPlugin5Success.json +0 -32
  302. package/test/unit/examples/contextResponses/updateContextMultientityPlugin1Success.json +0 -40
  303. package/test/unit/examples/contextResponses/updateContextMultientityPlugin2Success.json +0 -40
  304. package/test/unit/examples/contextResponses/updateContextMultientityPlugin3Success.json +0 -40
  305. package/test/unit/examples/contextResponses/updateContextProcessTimestamp1Success.json +0 -27
  306. package/test/unit/examples/contextResponses/updateProvisionActiveAttributes1Success.json +0 -22
  307. package/test/unit/examples/contextResponses/updateProvisionCommands1Success.json +0 -32
  308. package/test/unit/examples/contextResponses/updateProvisionMinimumDeviceSuccess.json +0 -22
  309. package/test/unit/examples/subscriptionRequests/bidirectionalNotification.json +0 -24
  310. package/test/unit/examples/subscriptionRequests/bidirectionalSubscriptionRemove.json +0 -3
  311. package/test/unit/examples/subscriptionRequests/bidirectionalSubscriptionRequest.json +0 -22
  312. package/test/unit/examples/subscriptionRequests/errorNotification.json +0 -24
  313. package/test/unit/examples/subscriptionRequests/simpleNotification.json +0 -24
  314. package/test/unit/examples/subscriptionRequests/simpleSubscriptionRemove.json +0 -3
  315. package/test/unit/examples/subscriptionRequests/simpleSubscriptionRequest.json +0 -19
  316. package/test/unit/examples/subscriptionRequests/simpleSubscriptionRequest1.json +0 -19
  317. package/test/unit/examples/subscriptionResponses/bidirectionalSubscriptionSuccess.json +0 -6
  318. package/test/unit/examples/subscriptionResponses/simpleSubscriptionSuccess.json +0 -6
  319. package/test/unit/expressions/expressionBasedTransformations-test.js +0 -328
  320. package/test/unit/expressions/expressionCombinedTransformations-test.js +0 -306
  321. package/test/unit/expressions/jexlBasedTransformations-test.js +0 -334
  322. package/test/unit/general/contextBrokerOAuthSecurityAccess-test.js +0 -902
  323. package/test/unit/general/https-support-test.js +0 -286
  324. package/test/unit/general/iotam-autoregistration-test.js +0 -368
  325. package/test/unit/general/migration-test.js +0 -256
  326. package/test/unit/lazyAndCommands/active-devices-attribute-update-test.js +0 -168
  327. package/test/unit/lazyAndCommands/command-test.js +0 -341
  328. package/test/unit/lazyAndCommands/lazy-devices-test.js +0 -878
  329. package/test/unit/lazyAndCommands/polling-commands-test.js +0 -421
  330. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin20.json +0 -25
  331. package/test/unit/ngsiService/active-devices-test.js +0 -692
  332. package/test/unit/ngsiService/staticAttributes-test.js +0 -148
  333. package/test/unit/ngsiService/subscriptions-test.js +0 -345
  334. package/test/unit/plugins/alias-plugin_test.js +0 -158
  335. package/test/unit/plugins/bidirectional-plugin_test.js +0 -564
  336. package/test/unit/plugins/compress-timestamp-plugin_test.js +0 -257
  337. package/test/unit/plugins/event-plugin_test.js +0 -119
  338. package/test/unit/plugins/multientity-plugin_test.js +0 -248
  339. package/test/unit/plugins/timestamp-processing-plugin_test.js +0 -119
  340. package/test/unit/provisioning/device-provisioning-api_test.js +0 -748
  341. package/test/unit/provisioning/device-registration_test.js +0 -432
  342. package/test/unit/provisioning/device-update-registration_test.js +0 -326
  343. package/test/unit/provisioning/listProvisionedDevices-test.js +0 -488
  344. package/test/unit/provisioning/provisionDeviceMultientity-test.js +0 -123
  345. package/test/unit/provisioning/removeProvisionedDevice-test.js +0 -244
  346. package/test/unit/provisioning/singleConfigurationMode-test.js +0 -346
  347. 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;