kuzzle-device-manager-types 2.11.0-dev.1 → 3.0.0-3-dev.1

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 (85) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/lib/modules/asset/AssetModule.d.ts +1 -4
  3. package/dist/lib/modules/asset/AssetService.d.ts +7 -4
  4. package/dist/lib/modules/asset/AssetsController.d.ts +25 -7
  5. package/dist/lib/modules/asset/exports.d.ts +0 -4
  6. package/dist/lib/modules/asset/index.d.ts +1 -3
  7. package/dist/lib/modules/asset/types/AssetApi.d.ts +124 -9
  8. package/dist/lib/modules/asset/types/AssetContent.d.ts +9 -16
  9. package/dist/lib/modules/asset/types/AssetHistoryContent.d.ts +4 -11
  10. package/dist/lib/modules/decoder/DecodedPayload.d.ts +2 -0
  11. package/dist/lib/modules/decoder/Decoder.d.ts +1 -1
  12. package/dist/lib/modules/decoder/DecodersController.d.ts +4 -1
  13. package/dist/lib/modules/decoder/PayloadService.d.ts +1 -0
  14. package/dist/lib/modules/device/DeviceService.d.ts +6 -47
  15. package/dist/lib/modules/device/DevicesController.d.ts +5 -5
  16. package/dist/lib/modules/device/collections/deviceMappings.d.ts +6 -0
  17. package/dist/lib/modules/device/roles/RoleDevicesAdmin.d.ts +2 -2
  18. package/dist/lib/modules/device/types/DeviceApi.d.ts +69 -41
  19. package/dist/lib/modules/device/types/DeviceContent.d.ts +56 -5
  20. package/dist/lib/modules/device/types/DeviceEvents.d.ts +9 -24
  21. package/dist/lib/modules/group/GroupsController.d.ts +37 -0
  22. package/dist/lib/modules/group/GroupsModule.d.ts +10 -0
  23. package/dist/lib/modules/group/GroupsService.d.ts +118 -0
  24. package/dist/lib/modules/group/collections/groupsMappings.d.ts +2 -0
  25. package/dist/lib/modules/group/exports.d.ts +5 -0
  26. package/dist/lib/modules/group/index.d.ts +4 -0
  27. package/dist/lib/modules/{asset/roles/RoleAssetsGroupsAdmin.d.ts → group/roles/RoleGroupsAdmin.d.ts} +3 -3
  28. package/dist/lib/modules/{asset/roles/RoleAssetsGroupsReader.d.ts → group/roles/RoleGroupsReader.d.ts} +3 -3
  29. package/dist/lib/modules/group/types/GroupContent.d.ts +10 -0
  30. package/dist/lib/modules/group/types/GroupsApi.d.ts +141 -0
  31. package/dist/lib/modules/measure/MeasureService.d.ts +11 -43
  32. package/dist/lib/modules/measure/MeasureSourcesBuilder.d.ts +1 -2
  33. package/dist/lib/modules/measure/MeasureTargetBuilder.d.ts +1 -1
  34. package/dist/lib/modules/measure/collections/measuresMappings.d.ts +2 -91
  35. package/dist/lib/modules/measure/exports.d.ts +0 -1
  36. package/dist/lib/modules/measure/index.d.ts +0 -1
  37. package/dist/lib/modules/measure/types/MeasureContent.d.ts +9 -2
  38. package/dist/lib/modules/measure/types/MeasureEvents.d.ts +6 -149
  39. package/dist/lib/modules/measure/types/MeasureSources.d.ts +5 -0
  40. package/dist/lib/modules/measure/types/MeasureTarget.d.ts +1 -1
  41. package/dist/lib/modules/model/ModelService.d.ts +20 -14
  42. package/dist/lib/modules/model/ModelsController.d.ts +1 -1
  43. package/dist/lib/modules/model/ModelsRegister.d.ts +6 -5
  44. package/dist/lib/modules/model/types/ModelApi.d.ts +14 -9
  45. package/dist/lib/modules/model/types/ModelContent.d.ts +34 -3
  46. package/dist/lib/modules/model/types/ModelDefinition.d.ts +6 -2
  47. package/dist/lib/modules/model/types/ModelEvents.d.ts +3 -1
  48. package/dist/lib/modules/plugin/DeviceManagerEngine.d.ts +15 -6
  49. package/dist/lib/modules/plugin/DeviceManagerPlugin.d.ts +10 -8
  50. package/dist/lib/modules/plugin/types/DeviceManagerConfiguration.d.ts +9 -14
  51. package/dist/lib/modules/plugin/types/InternalCollection.d.ts +1 -1
  52. package/dist/lib/modules/plugin/types/exports.d.ts +1 -0
  53. package/dist/lib/modules/shared/services/AbstractExporter.d.ts +3 -1
  54. package/dist/lib/modules/shared/services/DigitalTwinExporter.d.ts +6 -1
  55. package/dist/lib/modules/shared/services/DigitalTwinService.d.ts +70 -2
  56. package/dist/lib/modules/shared/types/DigitalTwinContent.d.ts +4 -5
  57. package/dist/lib/modules/shared/types/DigitalTwinEvents.d.ts +30 -0
  58. package/dist/tests/application/assets/Container.d.ts +3 -2
  59. package/dist/tests/application/decoders/DummyTempDecoder.d.ts +10 -0
  60. package/dist/tests/application/decoders/DummyTempPositionDecoder.d.ts +10 -0
  61. package/dist/tests/application/decoders/EmptyTempDecoder.d.ts +8 -0
  62. package/dist/tests/application/devices/EmptyTemp.d.ts +2 -0
  63. package/dist/tests/application/devices/index.d.ts +1 -0
  64. package/dist/tests/application/groups/AssetRestricted.d.ts +8 -0
  65. package/dist/tests/application/groups/DeviceRestricted.d.ts +8 -0
  66. package/dist/tests/application/groups/Parking.d.ts +2 -2
  67. package/dist/tests/application/groups/index.d.ts +2 -0
  68. package/dist/tests/application/measures/BatteryMeasure.d.ts +5 -0
  69. package/dist/tests/application/measures/HumidityMeasure.d.ts +5 -0
  70. package/dist/tests/application/measures/MovementMeasure.d.ts +5 -0
  71. package/dist/{lib/modules/measure → tests/application}/measures/PositionMeasure.d.ts +2 -2
  72. package/dist/tests/application/measures/TemperatureMeasure.d.ts +5 -0
  73. package/dist/tests/application/measures/index.d.ts +5 -0
  74. package/dist/tests/application/tests/controller.d.ts +0 -1
  75. package/package.json +1 -1
  76. package/dist/lib/modules/asset/AssetsGroupsController.d.ts +0 -24
  77. package/dist/lib/modules/asset/AssetsGroupsService.d.ts +0 -49
  78. package/dist/lib/modules/asset/collections/assetsGroupsMapping.d.ts +0 -2
  79. package/dist/lib/modules/asset/types/AssetGroupContent.d.ts +0 -11
  80. package/dist/lib/modules/asset/types/AssetGroupsApi.d.ts +0 -59
  81. package/dist/lib/modules/measure/measures/BatteryMeasure.d.ts +0 -5
  82. package/dist/lib/modules/measure/measures/HumidityMeasure.d.ts +0 -5
  83. package/dist/lib/modules/measure/measures/MovementMeasure.d.ts +0 -5
  84. package/dist/lib/modules/measure/measures/TemperatureMeasure.d.ts +0 -5
  85. package/dist/lib/modules/measure/measures/index.d.ts +0 -5
package/dist/index.d.ts CHANGED
@@ -5,3 +5,4 @@ export * from "./lib/modules/measure/exports";
5
5
  export * from "./lib/modules/decoder/exports";
6
6
  export * from "./lib/modules/shared/exports";
7
7
  export * from "./lib/modules/model/exports";
8
+ export * from "./lib/modules/group/exports";
@@ -1,13 +1,10 @@
1
- import { Module } from "../shared/Module";
2
1
  import { DeviceManagerPlugin } from "../plugin";
2
+ import { Module } from "../shared/Module";
3
3
  export declare class AssetModule extends Module {
4
4
  private assetService;
5
5
  private assetHistoryService;
6
6
  private assetController;
7
- private assetGroupsController;
8
- private assetsGroupsService;
9
7
  private logger;
10
- private assetsGroupsLogger;
11
8
  constructor(plugin: DeviceManagerPlugin);
12
9
  init(): Promise<void>;
13
10
  }
@@ -2,13 +2,13 @@ import { KuzzleRequest, User } from "kuzzle";
2
2
  import { JSONObject, KDocument, KHit, SearchResult, mReplaceResponse } from "kuzzle-sdk";
3
3
  import { DeviceManagerPlugin } from "../plugin";
4
4
  import { DigitalTwinService, Metadata, SearchParams } from "../shared";
5
+ import { KuzzleLogger } from "kuzzle-logger";
5
6
  import { AssetHistoryService } from "./AssetHistoryService";
6
- import { ApiAssetMigrateTenantResult, ApiAssetUpdateModelLocales } from "./types/AssetApi";
7
+ import { ApiAssetMigrateTenantResult, ApiAssetUnlinkDevicesResult, ApiAssetUpdateModelLocales } from "./types/AssetApi";
7
8
  import { AssetContent } from "./types/AssetContent";
8
- import { KuzzleLogger } from "kuzzle-logger";
9
9
  export declare class AssetService extends DigitalTwinService {
10
+ readonly assetHistoryService: AssetHistoryService;
10
11
  readonly logger: KuzzleLogger;
11
- private assetHistoryService;
12
12
  constructor(plugin: DeviceManagerPlugin, assetHistoryService: AssetHistoryService, assetLogger: KuzzleLogger);
13
13
  registerAskEvents(): void;
14
14
  get(engineId: string, assetId: string, request: KuzzleRequest): Promise<KDocument<AssetContent>>;
@@ -34,7 +34,8 @@ export declare class AssetService extends DigitalTwinService {
34
34
  */
35
35
  delete(engineId: string, assetId: string, request: KuzzleRequest): Promise<void>;
36
36
  search(engineId: string, searchParams: SearchParams, request: KuzzleRequest): Promise<SearchResult<KHit<AssetContent>>>;
37
- migrateTenant(user: User, assetsList: string[], engineId: string, newEngineId: string): Promise<ApiAssetMigrateTenantResult>;
37
+ unlinkDevices(assetId: string, allMeasures: boolean, deviceIds: string[], measureSlots: string[], request: KuzzleRequest): Promise<ApiAssetUnlinkDevicesResult>;
38
+ migrateTenant(user: User, assetsList: string[], engineId: string, newEngineId: string, includeDevices: boolean, request: KuzzleRequest): Promise<ApiAssetMigrateTenantResult>;
38
39
  /**
39
40
  * Replace an asset metadata
40
41
  */
@@ -48,5 +49,7 @@ export declare class AssetService extends DigitalTwinService {
48
49
  * @param model
49
50
  */
50
51
  updateModelLocales(request: KuzzleRequest, model: string): Promise<ApiAssetUpdateModelLocales[]>;
52
+ addMeasureSlot(assetId: string, measureSlot: AssetContent["measureSlots"][0], engineId: string, request: KuzzleRequest): Promise<KDocument<AssetContent>>;
53
+ removeMeasureSlot(assetId: string, measureSlotName: string, engineId: string, request: KuzzleRequest): Promise<KDocument<AssetContent>>;
51
54
  private refreshModel;
52
55
  }
@@ -1,14 +1,16 @@
1
1
  import { ControllerDefinition, KuzzleRequest } from "kuzzle";
2
+ import { MeasureExporter } from "../measure";
2
3
  import { DeviceManagerPlugin } from "../plugin";
4
+ import { DigitalTwinExporter } from "../shared";
3
5
  import { AssetService } from "./AssetService";
4
- import { ApiAssetCreateResult, ApiAssetUpsertResult, ApiAssetDeleteResult, ApiAssetGetMeasuresResult, ApiAssetGetResult, ApiAssetSearchResult, ApiAssetUpdateResult, ApiAssetMigrateTenantResult, ApiAssetMetadataReplaceResult, ApiAssetGetLastMeasuresResult, ApiAssetMGetLastMeasuredAtResult, ApiAssetMGetLastMeasuresResult, ApiAssetGetLastMeasuredAtResult, ApiAssetUpdateModelLocales } from "./types/AssetApi";
6
+ import { ApiAssetCreateResult, ApiAssetUpsertResult, ApiAssetDeleteResult, ApiAssetGetMeasuresResult, ApiAssetGetResult, ApiAssetSearchResult, ApiAssetUpdateResult, ApiAssetMigrateTenantResult, ApiAssetMetadataReplaceResult, ApiAssetGetLastMeasuresResult, ApiAssetMGetLastMeasuredAtResult, ApiAssetMGetLastMeasuresResult, ApiAssetGetLastMeasuredAtResult, ApiAssetUpdateModelLocales, ApiAssetLinkDevicesResult, ApiAssetUnlinkDevicesResult, ApiAssetAddMeasureSlotResult, ApiAssetRemoveMeasureSlotResult } from "./types/AssetApi";
5
7
  import { KuzzleLogger } from "kuzzle-logger";
6
8
  export declare class AssetsController {
7
- private plugin;
8
- private assetService;
9
+ readonly plugin: DeviceManagerPlugin;
10
+ readonly assetService: AssetService;
9
11
  definition: ControllerDefinition;
10
- private exporter;
11
- private measureExporter;
12
+ readonly exporter: DigitalTwinExporter;
13
+ readonly measureExporter: MeasureExporter;
12
14
  readonly logger: KuzzleLogger;
13
15
  constructor(plugin: DeviceManagerPlugin, assetService: AssetService, assetlogger: KuzzleLogger);
14
16
  get(request: KuzzleRequest): Promise<ApiAssetGetResult>;
@@ -31,8 +33,8 @@ export declare class AssetsController {
31
33
  * @throws If the asset does not exists
32
34
  */
33
35
  private getTypeFromMeasureSlot;
34
- mMeasureIngest(request: KuzzleRequest): Promise<void>;
35
- measureIngest(request: KuzzleRequest): Promise<void>;
36
+ mIngestMeasure(request: KuzzleRequest): Promise<void>;
37
+ ingestMeasure(request: KuzzleRequest): Promise<void>;
36
38
  exportMeasures(request: KuzzleRequest): Promise<any>;
37
39
  export(request: KuzzleRequest): Promise<any>;
38
40
  migrateTenant(request: KuzzleRequest): Promise<ApiAssetMigrateTenantResult>;
@@ -44,4 +46,20 @@ export declare class AssetsController {
44
46
  * @param request
45
47
  */
46
48
  updateModelLocales(request: KuzzleRequest): Promise<ApiAssetUpdateModelLocales[]>;
49
+ /**
50
+ * Link an asset to devices.
51
+ */
52
+ linkDevices(request: KuzzleRequest): Promise<ApiAssetLinkDevicesResult>;
53
+ /**
54
+ * Unlink assets from a device.
55
+ */
56
+ unlinkDevices(request: KuzzleRequest): Promise<ApiAssetUnlinkDevicesResult>;
57
+ /**
58
+ * Remove a measure slot from an asset
59
+ */
60
+ addMeasureSlot(request: KuzzleRequest): Promise<ApiAssetAddMeasureSlotResult>;
61
+ /**
62
+ * Remove a measure slot from an asset
63
+ */
64
+ removeMeasureSlot(request: KuzzleRequest): Promise<ApiAssetRemoveMeasureSlotResult>;
47
65
  }
@@ -2,11 +2,7 @@ export * from "./types/AssetContent";
2
2
  export * from "./types/AssetHistoryContent";
3
3
  export * from "./types/AssetEvents";
4
4
  export * from "./types/AssetApi";
5
- export * from "./types/AssetGroupContent";
6
- export * from "./types/AssetGroupsApi";
7
5
  export * from "./roles/RoleAssetsAdmin";
8
6
  export * from "./roles/RoleAssetsReader";
9
- export * from "./roles/RoleAssetsGroupsAdmin";
10
- export * from "./roles/RoleAssetsGroupsReader";
11
7
  export * from "./collections/assetsMappings";
12
8
  export * from "./collections/assetsHistoryMappings";
@@ -1,6 +1,6 @@
1
1
  export * from "./collections/assetsMappings";
2
2
  export * from "./collections/assetsHistoryMappings";
3
- export * from "./collections/assetsGroupsMapping";
3
+ export * from "../group/collections/groupsMappings";
4
4
  export * from "./types/AssetContent";
5
5
  export * from "./types/AssetHistoryContent";
6
6
  export * from "./types/AssetEvents";
@@ -9,5 +9,3 @@ export * from "./model/AssetSerializer";
9
9
  export * from "./AssetModule";
10
10
  export * from "./roles/RoleAssetsAdmin";
11
11
  export * from "./roles/RoleAssetsReader";
12
- export * from "./roles/RoleAssetsGroupsAdmin";
13
- export * from "./roles/RoleAssetsGroupsReader";
@@ -1,17 +1,13 @@
1
1
  import { JSONObject, KDocument, KHit, SearchResult, UpdateByQueryResponse } from "kuzzle-sdk";
2
- import { MeasureContent, Measurement } from "../../../modules/measure";
2
+ import { MeasureContent, Measurement } from "../../measure";
3
3
  import { ApiDigitalTwinGetLastMeasuredAtRequest, ApiDigitalTwinGetLastMeasuredAtResult, ApiDigitalTwinGetLastMeasuresRequest, ApiDigitalTwinGetLastMeasuresResult, ApiDigitalTwinMGetLastMeasuredAtRequest, ApiDigitalTwinMGetLastMeasuredAtResult, ApiDigitalTwinMGetLastMeasuresRequest, ApiDigitalTwinMGetLastMeasuresResult, Metadata } from "../../shared";
4
4
  import { AssetContent } from "./AssetContent";
5
5
  type AssetsControllerName = "device-manager/assets";
6
6
  import { ApiMeasureSource } from "../../measure/types/MeasureSources";
7
+ import { DeviceContent } from "lib/modules/device";
7
8
  interface AssetsControllerRequest {
8
9
  controller: AssetsControllerName;
9
10
  engineId: string;
10
- /**
11
- * ? Request parameter used by SoftTenant module
12
- * ! Not used directly in this plugin
13
- */
14
- softTenantId?: string | string[] | null;
15
11
  }
16
12
  export interface ApiAssetGetRequest extends AssetsControllerRequest {
17
13
  action: "get";
@@ -92,13 +88,13 @@ export type ApiAssetGetMeasuresResult = {
92
88
  };
93
89
  type TypelessApiMeasureSource = Omit<ApiMeasureSource, "type">;
94
90
  export interface ApiAssetMeasureIngestRequest extends AssetsControllerRequest {
95
- action: "measureIngest";
91
+ action: "ingestMeasure";
96
92
  assetId: string;
97
93
  engineId: string;
98
94
  slotName: string;
99
95
  body: {
100
96
  dataSource: TypelessApiMeasureSource;
101
- measuredAt: number | string;
97
+ measuredAt: number;
102
98
  values: JSONObject;
103
99
  };
104
100
  }
@@ -107,7 +103,7 @@ type APIDecodedMeasurement = Omit<Measurement, "type"> & {
107
103
  slotName: string;
108
104
  };
109
105
  export interface ApiAssetmMeasureIngestRequest extends AssetsControllerRequest {
110
- action: "mMeasureIngest";
106
+ action: "mIngestMeasure";
111
107
  assetId: string;
112
108
  engineId: string;
113
109
  body: {
@@ -158,6 +154,7 @@ export interface ApiAssetMigrateTenantRequest extends AssetsControllerRequest {
158
154
  body: {
159
155
  assetsList: string[];
160
156
  newEngineId: string;
157
+ includeDevices?: boolean;
161
158
  };
162
159
  }
163
160
  export type ApiAssetMigrateTenantResult = {
@@ -172,4 +169,122 @@ export type ApiAssetUpdateModelLocales = {
172
169
  engineIndex: string;
173
170
  result: UpdateByQueryResponse<AssetContent>;
174
171
  };
172
+ export interface ApiAssetlinkDevicesRequest extends AssetsControllerRequest {
173
+ action: "linkDevices";
174
+ _id: string;
175
+ refresh?: string;
176
+ body: {
177
+ linkedMeasures: Array<{
178
+ deviceId: string;
179
+ /**
180
+ * This option allows to not specify the names of all the measures that should
181
+ * be linked to the asset.
182
+ *
183
+ * The algorithm will go through all the measures names provided by the device
184
+ * and add the one who are present with the same name in the asset.
185
+ *
186
+ * It will not add the measure if:
187
+ * - it has been specified in the link request
188
+ * - it was already present in the asset
189
+ *
190
+ * @example
191
+ * if the device provide a measure of type "temperature" with the name "temp"
192
+ * if the asset has declared a measure of type "temperature" with the name "temp"
193
+ * then the measure will be automatically added in the link and will later be propagated to the asset
194
+ */
195
+ implicitMeasuresLinking?: boolean;
196
+ /**
197
+ * Names of the linked measures.
198
+ *
199
+ * Array<{ asset: string, device: string }>
200
+ *
201
+ * @example
202
+ *
203
+ * [
204
+ * { asset: "externalTemperature", device: "temperature" }
205
+ * ]
206
+ */
207
+ measureSlots?: Array<{
208
+ asset: string;
209
+ device: string;
210
+ }>;
211
+ }>;
212
+ };
213
+ }
214
+ export type ApiAssetLinkDevicesResult = {
215
+ asset: KDocument<AssetContent>;
216
+ devices: KDocument<DeviceContent>[];
217
+ };
218
+ export interface ApiAssetUnlinkDevicesRequest extends AssetsControllerRequest {
219
+ action: "unlinkDevices";
220
+ _id: string;
221
+ strict?: boolean;
222
+ refresh?: string;
223
+ body: {
224
+ /**
225
+ * This options allows to unlink all the measures of the asset
226
+ */
227
+ allMeasures?: boolean;
228
+ /**
229
+ * Names of the measure slots of the asset to unlink.
230
+ *
231
+ * string[]
232
+ *
233
+ * @example
234
+ *
235
+ * ['externalTemperature','position']
236
+ */
237
+ measureSlots?: string[];
238
+ /**
239
+ * Ids of the devices to unlink.
240
+ *
241
+ * string[]
242
+ *
243
+ * @example
244
+ *
245
+ * ['First-asset','Second-asset']
246
+ */
247
+ devices?: string[];
248
+ };
249
+ }
250
+ export type ApiAssetUnlinkDevicesResult = {
251
+ asset: KDocument<AssetContent>;
252
+ devices: KDocument<DeviceContent>[];
253
+ };
254
+ export interface ApiAssetAddMeasureSlotRequest extends AssetsControllerRequest {
255
+ action: "addMeasureSlot";
256
+ _id: string;
257
+ body: {
258
+ /**
259
+ * Measure slot containing the name of the slot and it's type of measurement
260
+ *
261
+ * { name: string , type: string}
262
+ *
263
+ * @example
264
+ *
265
+ * { name: "externalTemperature", type: "temperature" }
266
+ */
267
+ measureSlot: {
268
+ name: string;
269
+ type: string;
270
+ };
271
+ };
272
+ }
273
+ export type ApiAssetAddMeasureSlotResult = KDocument<AssetContent>;
274
+ export interface ApiAssetRemoveMeasureSlotRequest extends AssetsControllerRequest {
275
+ action: "removeMeasureSlot";
276
+ _id: string;
277
+ body: {
278
+ /**
279
+ * Name of the measure slot to be removed
280
+ *
281
+ *
282
+ * @example
283
+ *
284
+ * measureSlot: "externalTemperature",
285
+ */
286
+ measureSlot: string;
287
+ };
288
+ }
289
+ export type ApiAssetRemoveMeasureSlotResult = KDocument<AssetContent>;
175
290
  export {};
@@ -1,17 +1,16 @@
1
- import { JSONObject } from "kuzzle-sdk";
2
1
  import { DigitalTwinContent, Metadata } from "../../shared";
3
2
  /**
4
3
  * Asset document content
5
4
  */
6
- export interface AssetContent<TMeasures extends JSONObject = any, TMetadata extends Metadata = any> extends DigitalTwinContent<TMeasures, TMetadata> {
5
+ export interface AssetContent<TMetadata extends Metadata = any> extends DigitalTwinContent<TMetadata> {
7
6
  /**
8
- * Link with attached device
7
+ * Link with attached devices
9
8
  */
10
- linkedDevices: Array<{
9
+ linkedMeasures: Array<{
11
10
  /**
12
11
  * Device ID
13
12
  */
14
- _id: string;
13
+ deviceId: string;
15
14
  /**
16
15
  * Names of the linked measures
17
16
  *
@@ -20,27 +19,21 @@ export interface AssetContent<TMeasures extends JSONObject = any, TMetadata exte
20
19
  * @example
21
20
  *
22
21
  * [
23
- * { asset: "externalTemperature", device: "temperature", type: "temperature" }
22
+ * { asset: "externalTemperature", device: "temperature" }
24
23
  * ]
25
24
  */
26
- measureNames: Array<{
25
+ measureSlots: Array<{
27
26
  asset: string;
28
27
  device: string;
29
- type: string;
30
28
  }>;
31
29
  }>;
32
30
  /**
33
- * Id's of asset groups
31
+ * Path's of asset groups
34
32
  */
35
33
  groups: Array<{
36
- id: string;
34
+ path: string;
37
35
  date: number;
38
36
  }>;
39
- /**
40
- * Id's of soft tenants
41
- * ! Not used directly in this plugin
42
- */
43
- softTenant?: Array<string>;
44
37
  }
45
38
  /**
46
39
  * Asset description used to contextualize each measure data point
@@ -54,4 +47,4 @@ export type AssetMeasureContext<TMetadata extends Metadata = Metadata> = {
54
47
  * Name of the measure for the Asset
55
48
  */
56
49
  measureName: string;
57
- } & Pick<AssetContent<JSONObject, TMetadata>, "model" | "reference" | "metadata" | "groups" | "softTenant">;
50
+ } & Pick<AssetContent<TMetadata>, "model" | "reference" | "metadata" | "groups">;
@@ -1,16 +1,9 @@
1
- import { JSONObject, KDocumentContent } from "kuzzle-sdk";
1
+ import { KDocumentContent } from "kuzzle-sdk";
2
2
  import { Metadata } from "../../shared";
3
3
  import { AssetContent } from "./AssetContent";
4
4
  export type AssetHistoryMetadata = {
5
5
  names: string[];
6
6
  };
7
- export type AssetHistoryEventMeasure = {
8
- name: "measure";
9
- measure: {
10
- names: string[];
11
- };
12
- metadata?: AssetHistoryMetadata;
13
- };
14
7
  export type AssetHistoryEventMetadata = {
15
8
  name: "metadata";
16
9
  metadata: AssetHistoryMetadata;
@@ -27,11 +20,11 @@ export type AssetHistoryEventUnlink = {
27
20
  deviceId: string;
28
21
  };
29
22
  };
30
- export type AssetHistoryEvent = AssetHistoryEventMeasure | AssetHistoryEventMetadata | AssetHistoryEventLink | AssetHistoryEventUnlink;
23
+ export type AssetHistoryEvent = AssetHistoryEventMetadata | AssetHistoryEventLink | AssetHistoryEventUnlink;
31
24
  /**
32
25
  * Asset History document content
33
26
  */
34
- export interface AssetHistoryContent<TAssetHistoryEvent extends AssetHistoryEvent = any, TMeasures extends JSONObject = any, TMetadata extends Metadata = any> extends KDocumentContent {
27
+ export interface AssetHistoryContent<TAssetHistoryEvent extends AssetHistoryEvent = any, TMetadata extends Metadata = any> extends KDocumentContent {
35
28
  /**
36
29
  * Name of the event who caused the historization
37
30
  *
@@ -48,7 +41,7 @@ export interface AssetHistoryContent<TAssetHistoryEvent extends AssetHistoryEven
48
41
  /**
49
42
  * Asset content after the event
50
43
  */
51
- asset: AssetContent<TMeasures, TMetadata>;
44
+ asset: AssetContent<TMetadata>;
52
45
  /**
53
46
  * Timestamp of the event according to its type
54
47
  *
@@ -43,5 +43,7 @@ export declare class DecodedPayload<TDecoder extends Decoder = Decoder> {
43
43
  * Get the metadata for a device
44
44
  */
45
45
  getMetadata(deviceReference: string): JSONObject;
46
+ hasMeasurements(): boolean;
47
+ hasMetadata(): boolean;
46
48
  private validateMeasurement;
47
49
  }
@@ -1,8 +1,8 @@
1
1
  import { HttpRoute, KuzzleRequest } from "kuzzle";
2
2
  import { JSONObject } from "kuzzle-sdk";
3
+ import { KuzzleLogger } from "kuzzle-logger";
3
4
  import { DecodedPayload } from "./DecodedPayload";
4
5
  import { DecoderContent } from "./types/DecoderContent";
5
- import { KuzzleLogger } from "kuzzle-logger";
6
6
  /**
7
7
  * Array of measures declaration
8
8
  *
@@ -6,8 +6,8 @@ import { KuzzleLogger } from "kuzzle-logger";
6
6
  export declare class DecodersController {
7
7
  private payloadService;
8
8
  private decodersRegister;
9
- readonly logger: KuzzleLogger;
10
9
  definition: ControllerDefinition;
10
+ readonly logger: KuzzleLogger;
11
11
  constructor(payloadService: PayloadService, decodersRegister: DecodersRegister, logger: KuzzleLogger);
12
12
  /**
13
13
  * List all available decoders
@@ -17,6 +17,9 @@ export declare class DecodersController {
17
17
  * Clean payload collection for a time period
18
18
  */
19
19
  prunePayloads(request: KuzzleRequest): Promise<ApiDecoderPrunePayloadsResult>;
20
+ /**
21
+ * Route request to appropriate decoder
22
+ */
20
23
  route(request: KuzzleRequest): Promise<{
21
24
  valid: boolean;
22
25
  }>;
@@ -36,4 +36,5 @@ export declare class PayloadService extends BaseService {
36
36
  deviceModel?: string;
37
37
  }): Promise<number>;
38
38
  receiveUnknown(deviceModel: string, payload: JSONObject, apiAction: string): Promise<void>;
39
+ private getDeviceMeasureSource;
39
40
  }
@@ -3,25 +3,21 @@ import { JSONObject, KDocument, KHit, SearchResult } from "kuzzle-sdk";
3
3
  import { DecodedMeasurement } from "../measure";
4
4
  import { DeviceManagerPlugin } from "../plugin";
5
5
  import { DigitalTwinService, Metadata, SearchParams } from "../shared";
6
- import { AssetContent } from "./../asset";
7
- import { ApiDeviceLinkAssetRequest } from "./types/DeviceApi";
8
- import { DeviceContent } from "./types/DeviceContent";
6
+ import { DeviceProvisioningContent, DeviceContent } from "./types/DeviceContent";
7
+ import { ApiDeviceUnlinkAssetsResult } from "./exports";
9
8
  import { KuzzleLogger } from "kuzzle-logger";
10
9
  export declare class DeviceService extends DigitalTwinService {
11
10
  readonly logger: KuzzleLogger;
12
11
  constructor(plugin: DeviceManagerPlugin, logger: KuzzleLogger);
13
12
  registerAskEvents(): void;
14
13
  private _create;
14
+ private _createDeviceProvisioning;
15
15
  /**
16
16
  * Create a new device.
17
17
  *
18
- * @todo creating a device in the "device-manager" index should be a separate
19
- * method since in this case "engineId" is not really an engine ID but still
20
- * required as an argument (in part to check the tenant rights)
21
18
  */
22
19
  create(model: string, reference: string, metadata: JSONObject, request: KuzzleRequest): Promise<KDocument<DeviceContent>>;
23
20
  get(engineId: string, deviceId: string, request: KuzzleRequest): Promise<KDocument<DeviceContent>>;
24
- private getInternalDevices;
25
21
  /**
26
22
  * Replace a device metadata
27
23
  */
@@ -33,13 +29,13 @@ export declare class DeviceService extends DigitalTwinService {
33
29
  update(engineId: string, deviceId: string, metadata: Metadata, request: KuzzleRequest): Promise<KDocument<DeviceContent>>;
34
30
  delete(engineId: string, deviceId: string, request: KuzzleRequest): Promise<void>;
35
31
  search(engineId: string, searchParams: SearchParams, request: KuzzleRequest): Promise<SearchResult<KHit<DeviceContent>>>;
32
+ unlinkAssets(deviceId: string, allMeasures: boolean, assetIds: string[], measureSlots: string[], request: KuzzleRequest): Promise<ApiDeviceUnlinkAssetsResult>;
36
33
  /**
37
34
  * Internal logic to attach the device to an engine
38
35
  *
39
36
  * @param engineId Engine id to attach to
40
37
  * @param deviceId Device id to attach
41
38
  * @param options.refresh Wait for ES indexation
42
- * @param options.strict If true, throw if an operation isn't possible
43
39
  */
44
40
  private _attachEngine;
45
41
  /**
@@ -57,46 +53,9 @@ export declare class DeviceService extends DigitalTwinService {
57
53
  * @param {string} deviceId Id of the device
58
54
  * @param {KuzzleRequest} request kuzzle request
59
55
  */
60
- detachEngine(deviceId: string, request: KuzzleRequest): Promise<KDocument<DeviceContent>>;
61
- /**
62
- * Link a device to an asset.
63
- */
64
- linkAsset(engineId: string, deviceId: string, assetId: string, measureNames: ApiDeviceLinkAssetRequest["body"]["measureNames"], implicitMeasuresLinking: boolean, request: KuzzleRequest): Promise<{
65
- asset: KDocument<AssetContent>;
66
- device: KDocument<DeviceContent>;
67
- }>;
56
+ detachEngine(deviceId: string, request: KuzzleRequest): Promise<KDocument<DeviceProvisioningContent>>;
68
57
  receiveMeasures(engineId: string, deviceId: string, measures: DecodedMeasurement[], payloadUuids: string[], request: KuzzleRequest): Promise<void>;
69
- /**
70
- * Checks if the asset does not already have a linked device using one of the
71
- * requested measure names.
72
- */
73
- private checkAlreadyProvidedMeasures;
74
- /**
75
- * Goes through the device available measures and add them into the link if:
76
- * - they are not already provided by another device
77
- * - they are not already present in the link request
78
- * - they are declared in the asset model
79
- */
80
- private generateMissingAssetMeasureNames;
81
- /**
82
- * Internal logic of unlink a device of an asset
83
- *
84
- * @param {string} deviceId Id of the device
85
- * @param {KuzzleRequest} request kuzzle request
86
- */
87
- private _unlinkAsset;
88
- /**
89
- * Unlink a device of an asset with lock
90
- *
91
- * @param {string} deviceId Id of the device
92
- * @param {KuzzleRequest} request kuzzle request
93
- */
94
- unlinkAsset(deviceId: string, request: KuzzleRequest): Promise<{
95
- asset: KDocument<AssetContent>;
96
- device: KDocument<DeviceContent>;
97
- }>;
98
58
  private checkEngineExists;
99
59
  private checkAttachedToEngine;
100
- private getDeviceModel;
101
- private getAssetModel;
60
+ private refreshModel;
102
61
  }
@@ -1,7 +1,7 @@
1
1
  import { ControllerDefinition, KuzzleRequest } from "kuzzle";
2
2
  import { DeviceManagerPlugin } from "../plugin";
3
3
  import { DeviceService } from "./DeviceService";
4
- import { ApiDeviceAttachEngineResult, ApiDeviceCreateResult, ApiDeviceDeleteResult, ApiDeviceDetachEngineResult, ApiDeviceGetResult, ApiDeviceLinkAssetResult, ApiDeviceSearchResult, ApiDeviceUnlinkAssetResult, ApiDeviceUpdateResult, ApiDeviceGetMeasuresResult, ApiDeviceUpsertResult, ApiDeviceGetLastMeasuresResult, ApiDeviceMGetLastMeasuresResult, ApiDeviceGetLastMeasuredAtResult, ApiDeviceMGetLastMeasuredAtResult, ApiDeviceMetadataReplaceResult } from "./types/DeviceApi";
4
+ import { ApiDeviceAttachEngineResult, ApiDeviceCreateResult, ApiDeviceDeleteResult, ApiDeviceDetachEngineResult, ApiDeviceGetResult, ApiDeviceLinkAssetsResult, ApiDeviceSearchResult, ApiDeviceUnlinkAssetsResult, ApiDeviceUpdateResult, ApiDeviceGetMeasuresResult, ApiDeviceUpsertResult, ApiDeviceGetLastMeasuresResult, ApiDeviceMGetLastMeasuresResult, ApiDeviceGetLastMeasuredAtResult, ApiDeviceMGetLastMeasuredAtResult, ApiDeviceMetadataReplaceResult } from "./types/DeviceApi";
5
5
  import { KuzzleLogger } from "kuzzle-logger";
6
6
  export declare class DevicesController {
7
7
  private plugin;
@@ -30,13 +30,13 @@ export declare class DevicesController {
30
30
  */
31
31
  detachEngine(request: KuzzleRequest): Promise<ApiDeviceDetachEngineResult>;
32
32
  /**
33
- * Link a device to an asset.
33
+ * Link a device to several assets.
34
34
  */
35
- linkAsset(request: KuzzleRequest): Promise<ApiDeviceLinkAssetResult>;
35
+ linkAssets(request: KuzzleRequest): Promise<ApiDeviceLinkAssetsResult>;
36
36
  /**
37
- * Unlink a device from an asset.
37
+ * Unlink assets from a device.
38
38
  */
39
- unlinkAsset(request: KuzzleRequest): Promise<ApiDeviceUnlinkAssetResult>;
39
+ unlinkAssets(request: KuzzleRequest): Promise<ApiDeviceUnlinkAssetsResult>;
40
40
  getMeasures(request: KuzzleRequest): Promise<ApiDeviceGetMeasuresResult>;
41
41
  getLastMeasures(request: KuzzleRequest): Promise<ApiDeviceGetLastMeasuresResult>;
42
42
  mGetLastMeasures(request: KuzzleRequest): Promise<ApiDeviceMGetLastMeasuresResult>;
@@ -5,3 +5,9 @@ import { CollectionMappings } from "kuzzle";
5
5
  * Those mappings does not contains the `measures` and `metadata` mappings.
6
6
  */
7
7
  export declare const devicesMappings: CollectionMappings;
8
+ /**
9
+ * Mappings for the "devices" collection of the platform index.
10
+ *
11
+ * Those mappings does not contains the `measures`, `groups` and `metadata` mappings.
12
+ */
13
+ export declare const devicesPlatformMappings: CollectionMappings;
@@ -10,9 +10,9 @@ import { KuzzleRole } from "../../shared/types/KuzzleRole";
10
10
  create: true,
11
11
  delete: true,
12
12
  get: true,
13
- linkAsset: true,
13
+ linkAssets: true,
14
14
  search: true,
15
- unlinkAsset: true,
15
+ unlinkAssets: true,
16
16
  update: true,
17
17
  getMeasures: true,
18
18
  exportMeasures: true,