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,176 +0,0 @@
1
- /*
2
- * Copyright 2016 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::[contacto@tid.es]
22
- */
23
-
24
- /* eslint-disable no-prototype-builtins */
25
-
26
- const async = require('async');
27
- const logger = require('logops');
28
- const apply = async.apply;
29
- const MongoClient = require('mongodb').MongoClient;
30
- const serviceTranslation = {
31
- apikey: 'apikey',
32
- token: 'trust',
33
- cbroker: 'cbHost',
34
- entity_type: 'type',
35
- resource: 'resource',
36
- service: 'service',
37
- service_path: 'subservice',
38
- attributes: 'attributes',
39
- static_attributes: 'staticAttributes'
40
- };
41
- const deviceTranslation = {
42
- device_id: 'id',
43
- entity_name: 'name',
44
- entity_type: 'type',
45
- endpoint: 'endpoint',
46
- timezone: 'timezone',
47
- service: 'service',
48
- service_path: 'subservice',
49
- protocol: 'protocol',
50
- attributes: 'active',
51
- static_attributes: 'staticAttributes',
52
- commands: 'commands',
53
- registration_id: 'registrationId'
54
- };
55
- const context = {
56
- op: 'IoTAgentNGSI.MigrationTool'
57
- };
58
-
59
- function connectToDb(dbConfig, dbName, callback) {
60
- const url = 'mongodb://' + dbConfig.host + ':' + (dbConfig.port || 27017) + '/' + dbName;
61
-
62
- MongoClient.connect(url, { useNewUrlParser: true }, callback);
63
- }
64
-
65
- function generateCollectionTranslator(translationKey) {
66
- function translateItem(item, innerCb) {
67
- const translatedItem = {};
68
-
69
- for (const i in item) {
70
- if (item.hasOwnProperty(i) && translationKey[i]) {
71
- translatedItem[translationKey[i]] = item[i];
72
- } else if (i !== '_id') {
73
- logger.warn(context, 'Attribute [%s] was not found for item translation', i);
74
- }
75
- }
76
-
77
- innerCb(null, translatedItem);
78
- }
79
-
80
- return function translateCollection(docs, innerCb) {
81
- async.map(docs, translateItem, innerCb);
82
- };
83
- }
84
-
85
- function migrate(dbConfig, originDb, targetDb, service, subservice, callback) {
86
- function saveToTargetDb(db, collection, docs, innerCb) {
87
- if (docs.length > 0) {
88
- db.db()
89
- .collection(collection)
90
- /* eslint-disable-next-line no-unused-vars */
91
- .insertMany(docs, function (error, inserts) {
92
- innerCb(error);
93
- });
94
- } else {
95
- innerCb();
96
- }
97
- }
98
-
99
- function setDefaultName(item, innerCb) {
100
- if (!item.name || item.name === '') {
101
- item.name = item.type + ':' + item.id;
102
- }
103
-
104
- innerCb(null, item);
105
- }
106
-
107
- function applyDefaultName(docs, innerCb) {
108
- async.map(docs, setDefaultName, innerCb);
109
- }
110
-
111
- function translateProtocol(item, innerCb) {
112
- if (item.protocol && dbConfig.protocols && dbConfig.protocols[item.protocol]) {
113
- item.protocol = dbConfig.protocols[item.protocol];
114
- }
115
-
116
- innerCb(null, item);
117
- }
118
-
119
- function applyProtocolTranslations(docs, innerCb) {
120
- async.map(docs, translateProtocol, innerCb);
121
- }
122
-
123
- function getCollection(db, name, service, subservice, innerCb) {
124
- const query = {};
125
-
126
- if (service) {
127
- query.service = service;
128
- }
129
-
130
- if (subservice) {
131
- query.service_path = subservice;
132
- }
133
-
134
- db.db().collection(name).find(query).toArray(innerCb);
135
- }
136
-
137
- function closeDb(db, innerCb) {
138
- /* eslint-disable-next-line no-unused-vars */
139
- db.close(function (error) {
140
- innerCb();
141
- });
142
- }
143
-
144
- function startMigration(dbResults, innerCb) {
145
- const originDb = dbResults[0];
146
- const targetDb = dbResults[1];
147
-
148
- async.waterfall(
149
- [
150
- apply(getCollection, originDb, 'SERVICE', service, subservice),
151
- generateCollectionTranslator(serviceTranslation),
152
- apply(saveToTargetDb, targetDb, 'groups'),
153
- apply(getCollection, originDb, 'DEVICE', service, subservice),
154
- generateCollectionTranslator(deviceTranslation),
155
- applyDefaultName,
156
- applyProtocolTranslations,
157
- apply(saveToTargetDb, targetDb, 'devices'),
158
- apply(closeDb, originDb),
159
- apply(closeDb, targetDb)
160
- ],
161
- function (error) {
162
- innerCb(error);
163
- }
164
- );
165
- }
166
-
167
- async.waterfall(
168
- [
169
- apply(async.series, [apply(connectToDb, dbConfig, originDb), apply(connectToDb, dbConfig, targetDb)]),
170
- startMigration
171
- ],
172
- callback
173
- );
174
- }
175
-
176
- exports.migrate = migrate;
@@ -1,310 +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 async = require('async');
29
- const apply = async.apply;
30
- const uuid = require('uuid');
31
- const constants = require('../../constants');
32
- const domain = require('domain');
33
- const alarms = require('../common/alarmManagement');
34
- const errors = require('../../errors');
35
- const logger = require('logops');
36
- const config = require('../../commonConfig');
37
- const ngsiUtils = require('./../ngsi/ngsiUtils');
38
- const registrationUtils = require('./registrationUtils');
39
- const _ = require('underscore');
40
- const utils = require('../northBound/restUtils');
41
- const context = {
42
- op: 'IoTAgentNGSI.Devices-v1'
43
- };
44
-
45
- /**
46
- * Creates the response handler for the initial entity creation request NGSIv1.
47
- * This handler basically deals with the errors that could have been rised during
48
- * the communication with the Context Broker.
49
- *
50
- * @param {Object} deviceData Object containing all the deviceData needed to send the registration.
51
- * @param {Object} newDevice Device object that will be stored in the database.
52
- * @return {function} Handler to pass to the request() function.
53
- */
54
- function createInitialEntityHandlerNgsi1(deviceData, newDevice, callback) {
55
- return function handleInitialEntityResponse(error, response, body) {
56
- if (error) {
57
- logger.error(
58
- context,
59
- 'ORION-001: Connection error creating inital entity in the Context Broker: %s',
60
- error
61
- );
62
-
63
- alarms.raise(constants.ORION_ALARM, error);
64
-
65
- callback(error);
66
- } else if (response && body && response.statusCode === 200) {
67
- const errorField = ngsiUtils.getErrorField(body);
68
-
69
- if (errorField) {
70
- logger.error(context, 'Update error connecting to the Context Broker: %j', errorField);
71
- callback(new errors.BadRequest(JSON.stringify(errorField)));
72
- } else {
73
- alarms.release(constants.ORION_ALARM);
74
- logger.debug(context, 'Initial entity created successfully.');
75
- callback(null, newDevice);
76
- }
77
- } else {
78
- logger.error(
79
- context,
80
- 'Protocol error connecting to the Context Broker [%d]: %s',
81
- response.statusCode,
82
- body
83
- );
84
-
85
- const errorObj = new errors.EntityGenericError(deviceData.id, deviceData.type, body);
86
-
87
- callback(errorObj);
88
- }
89
- };
90
- }
91
-
92
- /**
93
- * Creates the initial entity representing the device in the Context Broker using NGSIv1.
94
- * This is important mainly to allow the rest of the updateContext operations to be performed
95
- * using an UPDATE action instead of an APPEND one.
96
- *
97
- * @param {Object} deviceData Object containing all the deviceData needed to send the registration.
98
- * @param {Object} newDevice Device object that will be stored in the database.
99
- */
100
- function createInitialEntityNgsi1(deviceData, newDevice, callback) {
101
- let cbHost = config.getConfig().contextBroker.url;
102
- if (deviceData.cbHost && deviceData.cbHost.indexOf('://') !== -1) {
103
- cbHost = deviceData.cbHost;
104
- } else if (deviceData.cbHost && deviceData.cbHost.indexOf('://') === -1) {
105
- cbHost = 'http://' + deviceData.cbHost;
106
- }
107
- const options = {
108
- url: cbHost + '/v1/updateContext',
109
- method: 'POST',
110
- json: {
111
- contextElements: [
112
- {
113
- type: deviceData.type,
114
- isPattern: 'false',
115
- id: String(deviceData.name),
116
- attributes: []
117
- }
118
- ],
119
- updateAction: 'APPEND'
120
- },
121
- headers: {
122
- 'fiware-service': deviceData.service,
123
- 'fiware-servicepath': deviceData.subservice,
124
- 'fiware-correlator': (domain.active && domain.active.corr) || uuid.v4()
125
- }
126
- };
127
-
128
- function formatAttributes(originalVector) {
129
- const attributeList = [];
130
-
131
- if (originalVector && originalVector.length) {
132
- for (let i = 0; i < originalVector.length; i++) {
133
- // (#628) check if attribute has entity_name:
134
- // In that case attribute should not be appear in current entity
135
- /*jshint camelcase: false */
136
- if (!originalVector[i].entity_name) {
137
- attributeList.push({
138
- name: originalVector[i].name,
139
- type: originalVector[i].type,
140
- value: constants.getInitialValueForType(originalVector[i].type)
141
- });
142
- }
143
- }
144
- }
145
-
146
- return attributeList;
147
- }
148
-
149
- function formatCommands(originalVector) {
150
- const attributeList = [];
151
-
152
- if (originalVector && originalVector.length) {
153
- for (let i = 0; i < originalVector.length; i++) {
154
- attributeList.push({
155
- name: originalVector[i].name + constants.COMMAND_STATUS_SUFIX,
156
- type: constants.COMMAND_STATUS,
157
- value: 'UNKNOWN'
158
- });
159
- attributeList.push({
160
- name: originalVector[i].name + constants.COMMAND_RESULT_SUFIX,
161
- type: constants.COMMAND_RESULT,
162
- value: ' '
163
- });
164
- }
165
- }
166
-
167
- return attributeList;
168
- }
169
-
170
- options.json.contextElements[0].attributes = [].concat(
171
- formatAttributes(deviceData.active),
172
- deviceData.staticAttributes,
173
- formatCommands(deviceData.commands)
174
- );
175
-
176
- if (
177
- ('timestamp' in deviceData && deviceData.timestamp !== undefined
178
- ? deviceData.timestamp
179
- : config.getConfig().timestamp) &&
180
- !utils.isTimestamped(options.json)
181
- ) {
182
- options.json.contextElements[0].attributes.push({
183
- name: constants.TIMESTAMP_ATTRIBUTE,
184
- type: constants.TIMESTAMP_TYPE,
185
- value: ' '
186
- });
187
- }
188
-
189
- logger.debug(context, 'Creating initial entity in the Context Broker:\n %s', JSON.stringify(options, null, 4));
190
- utils.executeWithSecurity(options, newDevice, createInitialEntityHandlerNgsi1(deviceData, newDevice, callback));
191
- }
192
-
193
- /**
194
- * Updates the register of an existing device identified by the Id and Type in the Context Broker, and the internal
195
- * registry. It uses NGSIv1.
196
- *
197
- * The device id and type are required fields for a registration updated. Only the following attributes will be
198
- * updated: lazy, active and internalId. Any other change will be ignored. The registration for the lazy attributes
199
- * of the updated entity will be updated if existing, and created if not. If new active attributes are created,
200
- * the entity will be updated creating the new attributes.
201
- *
202
- * @param {Object} deviceObj Object with all the device information (mandatory).
203
- */
204
- function updateRegisterDeviceNgsi1(deviceObj, entityInfoUpdated, callback) {
205
- if (!deviceObj.id || !deviceObj.type) {
206
- callback(new errors.MissingAttributes('Id or device missing'));
207
- return;
208
- }
209
-
210
- logger.debug(context, 'Update provisioned v1 device in Device Service');
211
-
212
- function combineWithNewDevice(newDevice, oldDevice, callback) {
213
- if (oldDevice) {
214
- oldDevice.internalId = newDevice.internalId;
215
- oldDevice.lazy = newDevice.lazy;
216
- oldDevice.commands = newDevice.commands;
217
- oldDevice.staticAttributes = newDevice.staticAttributes;
218
- oldDevice.active = newDevice.active;
219
- oldDevice.name = newDevice.name;
220
- oldDevice.type = newDevice.type;
221
- oldDevice.polling = newDevice.polling;
222
- oldDevice.timezone = newDevice.timezone;
223
- if ('timestamp' in newDevice && newDevice.timestamp !== undefined) {
224
- oldDevice.timestamp = newDevice.timestamp;
225
- }
226
- oldDevice.endpoint = newDevice.endpoint || oldDevice.endpoint;
227
-
228
- callback(null, oldDevice);
229
- } else {
230
- callback(new errors.DeviceNotFound(newDevice.id));
231
- }
232
- }
233
-
234
- function getAttributeDifference(oldArray, newArray) {
235
- let oldActiveKeys;
236
- let newActiveKeys;
237
- let updateKeys;
238
- let result;
239
-
240
- if (oldArray && newArray) {
241
- newActiveKeys = _.pluck(newArray, 'name');
242
- oldActiveKeys = _.pluck(oldArray, 'name');
243
-
244
- updateKeys = _.difference(newActiveKeys, oldActiveKeys);
245
-
246
- result = newArray.filter(function (attribute) {
247
- return updateKeys.indexOf(attribute.name) >= 0;
248
- });
249
- } else if (newArray) {
250
- result = newArray;
251
- } else {
252
- result = [];
253
- }
254
-
255
- return result;
256
- }
257
-
258
- function extractDeviceDifference(newDevice, oldDevice, callback) {
259
- const deviceData = {
260
- id: oldDevice.id,
261
- name: oldDevice.name,
262
- type: oldDevice.type,
263
- service: oldDevice.service,
264
- subservice: oldDevice.subservice
265
- };
266
-
267
- deviceData.active = getAttributeDifference(oldDevice.active, newDevice.active);
268
- deviceData.lazy = getAttributeDifference(oldDevice.lazy, newDevice.lazy);
269
- deviceData.commands = getAttributeDifference(oldDevice.commands, newDevice.commands);
270
- deviceData.staticAttributes = getAttributeDifference(oldDevice.staticAttributes, newDevice.staticAttributes);
271
-
272
- function concatenateOldData(attributeArray, oldAttributeArray) {
273
- if (typeof oldAttributeArray !== 'undefined' && oldAttributeArray.length > 0) {
274
- attributeArray = attributeArray.concat(oldAttributeArray);
275
- }
276
- return attributeArray;
277
- }
278
-
279
- if (entityInfoUpdated) {
280
- deviceData.active = concatenateOldData(deviceData.active, oldDevice.active);
281
- deviceData.lazy = concatenateOldData(deviceData.lazy, oldDevice.lazy);
282
- deviceData.commands = concatenateOldData(deviceData.commands, oldDevice.commands);
283
- deviceData.staticAttributes = concatenateOldData(deviceData.staticAttributes, oldDevice.staticAttributes);
284
- if (oldDevice.name !== newDevice.name) {
285
- deviceData.name = newDevice.name;
286
- }
287
- if (oldDevice.type !== newDevice.type) {
288
- deviceData.type = newDevice.type;
289
- }
290
- }
291
-
292
- callback(null, deviceData, oldDevice);
293
- }
294
-
295
- async.waterfall(
296
- [
297
- apply(config.getRegistry().get, deviceObj.id, deviceObj.service, deviceObj.subservice),
298
- apply(extractDeviceDifference, deviceObj),
299
- createInitialEntityNgsi1,
300
- apply(combineWithNewDevice, deviceObj),
301
- apply(registrationUtils.sendRegistrations, false),
302
- apply(registrationUtils.processContextRegistration, deviceObj),
303
- config.getRegistry().update
304
- ],
305
- callback
306
- );
307
- }
308
-
309
- exports.createInitialEntity = createInitialEntityNgsi1;
310
- exports.updateRegisterDevice = updateRegisterDeviceNgsi1;