iotagent-node-lib 2.15.1 → 2.19.0

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