iotagent-node-lib 2.18.0 → 2.21.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 (141) hide show
  1. package/.github/workflows/ci.yml +1 -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 -0
  5. package/.readthedocs.yml +3 -1
  6. package/CHANGES_NEXT_RELEASE +1 -0
  7. package/README.md +5 -56
  8. package/doc/advanced-topics.md +121 -85
  9. package/doc/api.md +63 -54
  10. package/doc/development.md +8 -9
  11. package/doc/expressionLanguage.md +517 -316
  12. package/doc/installationguide.md +66 -64
  13. package/doc/northboundinteractions.md +40 -33
  14. package/doc/requirements.txt +4 -0
  15. package/{docs → doc}/roadmap.md +21 -6
  16. package/doc/usermanual.md +50 -18
  17. package/docker/Mosquitto/Dockerfile +28 -11
  18. package/docker/Mosquitto/README.md +8 -6
  19. package/docker/Mosquitto/startMosquitto.sh +14 -4
  20. package/lib/fiware-iotagent-lib.js +4 -2
  21. package/lib/jexlTranformsMap.js +11 -1
  22. package/lib/model/Device.js +4 -1
  23. package/lib/model/Group.js +19 -1
  24. package/lib/plugins/expressionParser.js +6 -4
  25. package/lib/plugins/expressionPlugin.js +63 -22
  26. package/lib/plugins/jexlParser.js +3 -1
  27. package/lib/plugins/multiEntity.js +2 -21
  28. package/lib/request-shim.js +111 -0
  29. package/lib/services/common/domain.js +6 -2
  30. package/lib/services/common/genericMiddleware.js +6 -2
  31. package/lib/services/common/iotManagerService.js +1 -1
  32. package/lib/services/common/securityServiceKeystone.js +1 -1
  33. package/lib/services/common/securityServiceOAuth2.js +3 -2
  34. package/lib/services/devices/deviceRegistryMemory.js +13 -2
  35. package/lib/services/devices/deviceRegistryMongoDB.js +16 -7
  36. package/lib/services/devices/deviceService.js +26 -2
  37. package/lib/services/devices/devices-NGSI-LD.js +1 -1
  38. package/lib/services/devices/devices-NGSI-v2.js +2 -6
  39. package/lib/services/devices/registrationUtils.js +0 -2
  40. package/lib/services/ngsi/entities-NGSI-LD.js +97 -11
  41. package/lib/services/ngsi/entities-NGSI-v2.js +95 -8
  42. package/lib/services/ngsi/ngsiService.js +5 -4
  43. package/lib/services/northBound/contextServer-NGSI-LD.js +3 -2
  44. package/lib/services/northBound/contextServer-NGSI-v2.js +32 -27
  45. package/lib/services/northBound/contextServerUtils.js +1 -1
  46. package/lib/services/northBound/deviceProvisioningServer.js +31 -6
  47. package/lib/services/northBound/northboundServer.js +2 -0
  48. package/lib/services/northBound/restUtils.js +1 -1
  49. package/lib/templates/createDevice.json +12 -0
  50. package/lib/templates/updateDevice.json +12 -0
  51. package/package.json +9 -15
  52. package/test/tools/utils.js +2 -0
  53. package/test/unit/expressions/jexlExpression-test.js +5 -5
  54. package/test/unit/general/contextBrokerKeystoneSecurityAccess-test.js +1 -1
  55. package/test/unit/general/deviceService-test.js +2 -5
  56. package/test/unit/general/loglevel-api_test.js +6 -11
  57. package/test/unit/general/startup-test.js +1 -0
  58. package/test/unit/memoryRegistry/deviceRegistryMemory_test.js +1 -0
  59. package/test/unit/mongodb/mongodb-group-registry-test.js +1 -1
  60. package/test/unit/mongodb/mongodb-registry-test.js +2 -1
  61. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin12a.json +7 -0
  62. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin13.json +13 -13
  63. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin1a.json +18 -0
  64. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin29.json +18 -0
  65. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin31.json +15 -0
  66. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin32.json +17 -0
  67. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin33.json +18 -0
  68. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin34.json +17 -0
  69. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin4a.json +36 -0
  70. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin7.json +16 -16
  71. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin8a.json +18 -0
  72. package/test/unit/ngsi-ld/examples/contextRequests/updateContextMultientityPlugin15.json +25 -0
  73. package/test/unit/ngsi-ld/expressions/jexlBasedTransformations-test.js +1018 -0
  74. package/test/unit/ngsi-ld/general/contextBrokerOAuthSecurityAccess-test.js +2 -2
  75. package/test/unit/ngsi-ld/general/deviceService-test.js +1 -1
  76. package/test/unit/ngsi-ld/general/https-support-test.js +2 -1
  77. package/test/unit/ngsi-ld/general/iotam-autoregistration-test.js +2 -1
  78. package/test/unit/ngsi-ld/general/startup-test.js +1 -0
  79. package/test/unit/ngsi-ld/lazyAndCommands/active-devices-attribute-update-test.js +3 -1
  80. package/test/unit/ngsi-ld/lazyAndCommands/command-test.js +2 -1
  81. package/test/unit/ngsi-ld/lazyAndCommands/lazy-devices-test.js +2 -6
  82. package/test/unit/ngsi-ld/lazyAndCommands/polling-commands-test.js +2 -1
  83. package/test/unit/ngsi-ld/ngsiService/active-devices-test.js +1 -0
  84. package/test/unit/ngsi-ld/ngsiService/autocast-test.js +1 -0
  85. package/test/unit/ngsi-ld/ngsiService/geoproperties-test.js +1 -0
  86. package/test/unit/ngsi-ld/ngsiService/subscriptions-test.js +4 -3
  87. package/test/unit/ngsi-ld/plugins/alias-plugin_test.js +1 -0
  88. package/test/unit/ngsi-ld/plugins/bidirectional-plugin_test.js +3 -2
  89. package/test/unit/ngsi-ld/plugins/multientity-plugin_test.js +61 -0
  90. package/test/unit/ngsi-ld/provisioning/device-provisioning-api_test.js +2 -1
  91. package/test/unit/ngsi-ld/provisioning/device-registration_test.js +3 -2
  92. package/test/unit/ngsi-ld/provisioning/device-update-registration_test.js +1 -0
  93. package/test/unit/ngsi-ld/provisioning/listProvisionedDevices-test.js +42 -54
  94. package/test/unit/ngsi-ld/provisioning/provisionDeviceMultientity-test.js +2 -1
  95. package/test/unit/ngsi-ld/provisioning/removeProvisionedDevice-test.js +4 -4
  96. package/test/unit/ngsi-ld/provisioning/singleConfigurationMode-test.js +3 -5
  97. package/test/unit/ngsi-ld/provisioning/updateProvisionedDevices-test.js +12 -18
  98. package/test/unit/ngsi-mixed/provisioning/ngsi-versioning-test.js +3 -1
  99. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin17.json +1 -1
  100. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin32.json +16 -0
  101. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin33.json +22 -0
  102. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin34.json +12 -0
  103. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin35.json +2 -0
  104. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin36.json +1 -0
  105. package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin15.json +25 -0
  106. package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin16.json +25 -0
  107. package/test/unit/ngsiv2/expressions/expressionBasedTransformations-test.js +4 -4
  108. package/test/unit/ngsiv2/expressions/jexlBasedTransformations-test.js +561 -0
  109. package/test/unit/ngsiv2/general/contextBrokerOAuthSecurityAccess-test.js +3 -2
  110. package/test/unit/ngsiv2/general/deviceService-test.js +9 -8
  111. package/test/unit/ngsiv2/general/https-support-test.js +2 -1
  112. package/test/unit/ngsiv2/general/iotam-autoregistration-test.js +2 -1
  113. package/test/unit/ngsiv2/general/startup-test.js +1 -0
  114. package/test/unit/ngsiv2/lazyAndCommands/active-devices-attribute-update-test.js +3 -1
  115. package/test/unit/ngsiv2/lazyAndCommands/command-test.js +2 -1
  116. package/test/unit/ngsiv2/lazyAndCommands/lazy-devices-test.js +14 -18
  117. package/test/unit/ngsiv2/lazyAndCommands/polling-commands-test.js +3 -1
  118. package/test/unit/ngsiv2/ngsiService/active-devices-test.js +1 -0
  119. package/test/unit/ngsiv2/ngsiService/queryDeviceInformationInCb-test.js +0 -1
  120. package/test/unit/ngsiv2/ngsiService/subscriptions-test.js +4 -3
  121. package/test/unit/ngsiv2/plugins/bidirectional-plugin_test.js +3 -2
  122. package/test/unit/ngsiv2/plugins/multientity-plugin_test.js +210 -0
  123. package/test/unit/ngsiv2/plugins/translation-inPlugins_test.js +1 -1
  124. package/test/unit/ngsiv2/provisioning/device-group-api-test.js +3 -2
  125. package/test/unit/ngsiv2/provisioning/device-group-utils-test.js +2 -1
  126. package/test/unit/ngsiv2/provisioning/device-provisioning-api_test.js +2 -1
  127. package/test/unit/ngsiv2/provisioning/device-registration_test.js +3 -2
  128. package/test/unit/ngsiv2/provisioning/device-update-registration_test.js +4 -3
  129. package/test/unit/ngsiv2/provisioning/listProvisionedDevices-test.js +42 -53
  130. package/test/unit/ngsiv2/provisioning/provisionDeviceMultientity-test.js +2 -1
  131. package/test/unit/ngsiv2/provisioning/removeProvisionedDevice-test.js +4 -4
  132. package/test/unit/ngsiv2/provisioning/singleConfigurationMode-test.js +3 -4
  133. package/test/unit/ngsiv2/provisioning/updateProvisionedDevices-test.js +13 -19
  134. package/test/unit/plugins/capture-configuration-inPlugins_test.js +3 -1
  135. package/test/unit/plugins/capture-provision-inPlugins_test.js +2 -1
  136. package/bin/agentConsole.js +0 -257
  137. package/bin/iotAgentTester.js +0 -44
  138. package/lib/command/commandLine.js +0 -918
  139. package/lib/command/migration.js +0 -176
  140. package/test/unit/general/migration-test.js +0 -256
  141. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin20.json +0 -25
@@ -27,10 +27,11 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const nock = require('nock');
32
33
  const async = require('async');
33
- const request = require('request');
34
+
34
35
  let contextBrokerMock;
35
36
  const iotAgentConfig = {
36
37
  logLevel: 'FATAL',
@@ -119,7 +120,7 @@ describe('NGSI-LD - Device provisioning API: Update provisioned devices', functi
119
120
  // registration and creating a new one.
120
121
  contextBrokerMock
121
122
  .matchHeader('fiware-service', 'smartgondor')
122
- .delete('/ngsi-ld/v1/csourceRegistrations/6719a7f5254b058441165849')
123
+ .delete('/ngsi-ld/v1/csourceRegistrations/6719a7f5254b058441165849', '')
123
124
  .reply(204);
124
125
 
125
126
  const nockBody3 = utils.readExampleFile(
@@ -178,7 +179,7 @@ describe('NGSI-LD - Device provisioning API: Update provisioned devices', functi
178
179
 
179
180
  contextBrokerMock
180
181
  .matchHeader('fiware-service', 'smartgondor')
181
- .delete('/ngsi-ld/v1/csourceRegistrations/6319a7f5254b05844116584d')
182
+ .delete('/ngsi-ld/v1/csourceRegistrations/6319a7f5254b05844116584d', '')
182
183
  .reply(204);
183
184
 
184
185
  contextBrokerMock
@@ -223,10 +224,8 @@ describe('NGSI-LD - Device provisioning API: Update provisioned devices', functi
223
224
 
224
225
  request(options, function (error, response, body) {
225
226
  /* jshint camelcase:false */
226
-
227
- const parsedBody = JSON.parse(body);
228
- parsedBody.entity_name.should.equal('ANewLightName');
229
- parsedBody.timezone.should.equal('Europe/Madrid');
227
+ body.entity_name.should.equal('ANewLightName');
228
+ body.timezone.should.equal('Europe/Madrid');
230
229
  done();
231
230
  });
232
231
  });
@@ -246,9 +245,8 @@ describe('NGSI-LD - Device provisioning API: Update provisioned devices', functi
246
245
  request(options, function (error, response, body) {
247
246
  /* jshint camelcase:false */
248
247
 
249
- const parsedBody = JSON.parse(body);
250
- parsedBody.entity_type.should.equal('TheLightType');
251
- parsedBody.service.should.equal('smartgondor');
248
+ body.entity_type.should.equal('TheLightType');
249
+ body.service.should.equal('smartgondor');
252
250
  done();
253
251
  });
254
252
  });
@@ -353,10 +351,8 @@ describe('NGSI-LD - Device provisioning API: Update provisioned devices', functi
353
351
  should.not.exist(error);
354
352
  response.statusCode.should.equal(200);
355
353
 
356
- const parsedBody = JSON.parse(body);
357
-
358
- parsedBody.attributes.length.should.equal(1);
359
- parsedBody.attributes[0].name.should.equal('newAttribute');
354
+ body.attributes.length.should.equal(1);
355
+ body.attributes[0].name.should.equal('newAttribute');
360
356
  done();
361
357
  });
362
358
  });
@@ -421,10 +417,8 @@ describe('NGSI-LD - Device provisioning API: Update provisioned devices', functi
421
417
  should.not.exist(error);
422
418
  response.statusCode.should.equal(200);
423
419
 
424
- const parsedBody = JSON.parse(body);
425
-
426
- parsedBody.static_attributes.length.should.equal(3);
427
- parsedBody.static_attributes[0].name.should.equal('cellID');
420
+ body.static_attributes.length.should.equal(3);
421
+ body.static_attributes[0].name.should.equal('cellID');
428
422
  done();
429
423
  });
430
424
  });
@@ -26,7 +26,9 @@
26
26
  /* eslint-disable no-unused-vars */
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
- const request = require('request');
29
+ const utils = require('../../../tools/utils');
30
+ const request = utils.request;
31
+
30
32
  const should = require('should');
31
33
  const iotAgentConfig = {
32
34
  logLevel: 'FATAL',
@@ -1,5 +1,5 @@
1
1
  {
2
- "pressure25":{
2
+ "pressure_25":{
3
3
  "type": "Number",
4
4
  "value": 52
5
5
  },
@@ -0,0 +1,16 @@
1
+ {
2
+ "location": {
3
+ "type": "geo:json",
4
+ "value": {
5
+ "coordinates": [
6
+ 13,
7
+ 52
8
+ ],
9
+ "type": "Point"
10
+ }
11
+ },
12
+ "TimeInstant": {
13
+ "type": "DateTime",
14
+ "value": "1970-01-01T00:00:00.001Z"
15
+ }
16
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "location": {
3
+ "type": "geo:json",
4
+ "value": {
5
+ "coordinates": [
6
+ 13,
7
+ 52
8
+ ],
9
+ "type": "Point"
10
+ },
11
+ "metadata": {
12
+ "TimeInstant": {
13
+ "type": "DateTime",
14
+ "value": "2015-08-05T07:35:01.468Z"
15
+ }
16
+ }
17
+ },
18
+ "TimeInstant": {
19
+ "type": "DateTime",
20
+ "value": "2015-08-05T07:35:01.468Z"
21
+ }
22
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "location": {
3
+ "type": "geo:json",
4
+ "value": {
5
+ "coordinates": [
6
+ 13,
7
+ 52
8
+ ],
9
+ "type": "Point"
10
+ }
11
+ }
12
+ }
@@ -0,0 +1 @@
1
+ {"myattr":{"type": "String","value": "location"}}
@@ -0,0 +1,25 @@
1
+ {
2
+ "actionType": "update",
3
+ "entities": [
4
+ {
5
+ "id": "gps1",
6
+ "type": "GPS"
7
+ },
8
+ {
9
+ "explicit": {
10
+ "type": "number",
11
+ "value": 52
12
+ },
13
+ "type": "GPS",
14
+ "id": "SO5"
15
+ },
16
+ {
17
+ "explicit": {
18
+ "type": "number",
19
+ "value": 13
20
+ },
21
+ "type": "GPS",
22
+ "id": "SO6"
23
+ }
24
+ ]
25
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "actionType": "update",
3
+ "entities": [
4
+ {
5
+ "id": "gps1",
6
+ "type": "GPS"
7
+ },
8
+ {
9
+ "attr1": {
10
+ "type": "number",
11
+ "value": 52
12
+ },
13
+ "type": "GPS",
14
+ "id": "SO5"
15
+ },
16
+ {
17
+ "attr2": {
18
+ "type": "number",
19
+ "value": 13
20
+ },
21
+ "type": "GPS",
22
+ "id": "SO6"
23
+ }
24
+ ]
25
+ }
@@ -151,8 +151,8 @@ const iotAgentConfig = {
151
151
  expression: '${trim(@pressure)}'
152
152
  },
153
153
  {
154
- object_id: 'p25',
155
- name: 'pressure25',
154
+ object_id: 'p_25',
155
+ name: 'pressure_25',
156
156
  type: 'Number'
157
157
  },
158
158
  {
@@ -169,7 +169,7 @@ const iotAgentConfig = {
169
169
  {
170
170
  name: 'weather',
171
171
  type: 'Summary',
172
- expression: 'Humidity ${@humidity12 / 2} and pressure ${@pressure25 * 20}'
172
+ expression: 'Humidity ${@humidity12 / 2} and pressure ${@pressure_25 * 20}'
173
173
  },
174
174
  {
175
175
  object_id: 'a',
@@ -276,7 +276,7 @@ describe('NGSI-v2 - Expression-based transformations plugin', function () {
276
276
 
277
277
  const values = [
278
278
  {
279
- name: 'p25',
279
+ name: 'p_25',
280
280
  type: 'Number',
281
281
  value: 52
282
282
  },