kuzzle-device-manager-types 3.0.0-next.1 → 3.0.0-next.10

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 (108) hide show
  1. package/dist/bin/migration/migration_platform_index.d.ts +2 -0
  2. package/dist/bin/migration/migration_tenant_index.d.ts +2 -0
  3. package/dist/bin/migration/utils.d.ts +18 -0
  4. package/dist/index.d.ts +1 -0
  5. package/dist/lib/modules/asset/AssetModule.d.ts +0 -1
  6. package/dist/lib/modules/asset/AssetService.d.ts +10 -3
  7. package/dist/lib/modules/asset/AssetsController.d.ts +15 -1
  8. package/dist/lib/modules/asset/exports.d.ts +0 -4
  9. package/dist/lib/modules/asset/index.d.ts +1 -3
  10. package/dist/lib/modules/asset/types/AssetApi.d.ts +88 -2
  11. package/dist/lib/modules/asset/types/AssetContent.d.ts +9 -11
  12. package/dist/lib/modules/asset/types/AssetHistoryContent.d.ts +4 -11
  13. package/dist/lib/modules/decoder/DecodedPayload.d.ts +2 -0
  14. package/dist/lib/modules/decoder/types/DecoderApi.d.ts +0 -1
  15. package/dist/lib/modules/device/DeviceService.d.ts +12 -40
  16. package/dist/lib/modules/device/DevicesController.d.ts +5 -5
  17. package/dist/lib/modules/device/collections/deviceMappings.d.ts +6 -0
  18. package/dist/lib/modules/device/roles/RoleDevicesAdmin.d.ts +2 -2
  19. package/dist/lib/modules/device/types/DeviceApi.d.ts +68 -42
  20. package/dist/lib/modules/device/types/DeviceContent.d.ts +55 -4
  21. package/dist/lib/modules/device/types/DeviceEvents.d.ts +0 -23
  22. package/dist/lib/modules/group/GroupsController.d.ts +35 -0
  23. package/dist/lib/modules/group/GroupsModule.d.ts +6 -0
  24. package/dist/lib/modules/group/GroupsService.d.ts +116 -0
  25. package/dist/lib/modules/group/collections/groupsMappings.d.ts +2 -0
  26. package/dist/lib/modules/group/exports.d.ts +5 -0
  27. package/dist/lib/modules/group/index.d.ts +4 -0
  28. package/dist/lib/modules/{asset/roles/RoleAssetsGroupsAdmin.d.ts → group/roles/RoleGroupsAdmin.d.ts} +3 -3
  29. package/dist/lib/modules/{asset/roles/RoleAssetsGroupsReader.d.ts → group/roles/RoleGroupsReader.d.ts} +3 -3
  30. package/dist/lib/modules/group/types/GroupContent.d.ts +10 -0
  31. package/dist/lib/modules/group/types/GroupsApi.d.ts +141 -0
  32. package/dist/lib/modules/measure/MeasureExporter.d.ts +2 -0
  33. package/dist/lib/modules/measure/MeasureService.d.ts +11 -38
  34. package/dist/lib/modules/measure/MeasureSourcesBuilder.d.ts +1 -2
  35. package/dist/lib/modules/measure/collections/measuresMappings.d.ts +2 -83
  36. package/dist/lib/modules/measure/exports.d.ts +0 -1
  37. package/dist/lib/modules/measure/index.d.ts +0 -1
  38. package/dist/lib/modules/measure/types/MeasureDefinition.d.ts +4 -0
  39. package/dist/lib/modules/measure/types/MeasureEvents.d.ts +5 -148
  40. package/dist/lib/modules/measure/types/MeasureSources.d.ts +1 -0
  41. package/dist/lib/modules/model/ModelService.d.ts +16 -4
  42. package/dist/lib/modules/model/ModelsConflicts.d.ts +9 -1
  43. package/dist/lib/modules/model/ModelsController.d.ts +6 -1
  44. package/dist/lib/modules/model/ModelsRegister.d.ts +19 -2
  45. package/dist/lib/modules/model/types/ModelApi.d.ts +50 -1
  46. package/dist/lib/modules/model/types/ModelContent.d.ts +157 -2
  47. package/dist/lib/modules/model/types/ModelDefinition.d.ts +110 -2
  48. package/dist/lib/modules/model/types/ModelEvents.d.ts +8 -1
  49. package/dist/lib/modules/plugin/DeviceManagerEngine.d.ts +32 -6
  50. package/dist/lib/modules/plugin/DeviceManagerPlugin.d.ts +57 -3
  51. package/dist/lib/modules/plugin/types/DeviceManagerConfiguration.d.ts +9 -7
  52. package/dist/lib/modules/plugin/types/InternalCollection.d.ts +1 -1
  53. package/dist/lib/modules/plugin/types/exports.d.ts +1 -0
  54. package/dist/lib/modules/shared/errors/index.d.ts +1 -0
  55. package/dist/lib/modules/shared/exports.d.ts +1 -5
  56. package/dist/lib/modules/shared/index.d.ts +3 -11
  57. package/dist/lib/modules/shared/services/AbstractExporter.d.ts +2 -0
  58. package/dist/lib/modules/shared/services/DigitalTwinExporter.d.ts +2 -0
  59. package/dist/lib/modules/shared/services/DigitalTwinService.d.ts +70 -0
  60. package/dist/lib/modules/shared/types/DigitalTwinContent.d.ts +6 -5
  61. package/dist/lib/modules/shared/types/DigitalTwinEvents.d.ts +30 -0
  62. package/dist/lib/modules/shared/types/Models.d.ts +18 -0
  63. package/dist/lib/modules/shared/types/exports.d.ts +6 -0
  64. package/dist/lib/modules/shared/types/index.d.ts +9 -0
  65. package/dist/lib/modules/shared/utils/index.d.ts +5 -0
  66. package/dist/tests/application/assets/Container.d.ts +7 -4
  67. package/dist/tests/application/assets/MagicHouse.d.ts +2 -2
  68. package/dist/tests/application/assets/Room.d.ts +2 -2
  69. package/dist/tests/application/assets/StreetLamp.d.ts +2 -2
  70. package/dist/tests/application/assets/Warehouse.d.ts +2 -2
  71. package/dist/tests/application/assets/index.d.ts +1 -0
  72. package/dist/tests/application/decoders/EmptyTempDecoder.d.ts +8 -0
  73. package/dist/tests/application/devices/DummyTemp.d.ts +2 -0
  74. package/dist/tests/application/devices/DummyTempPosition.d.ts +2 -0
  75. package/dist/tests/application/devices/EmptyTemp.d.ts +2 -0
  76. package/dist/tests/application/devices/index.d.ts +3 -0
  77. package/dist/tests/application/groups/AssetRestricted.d.ts +8 -0
  78. package/dist/tests/application/groups/DeviceRestricted.d.ts +8 -0
  79. package/dist/tests/application/groups/Parking.d.ts +14 -0
  80. package/dist/tests/application/groups/index.d.ts +3 -0
  81. package/dist/tests/application/measures/{AccelerationMeasure.d.ts → Acceleration.d.ts} +2 -2
  82. package/dist/tests/application/measures/BatteryMeasure.d.ts +5 -0
  83. package/dist/tests/application/measures/Brightness.d.ts +2 -0
  84. package/dist/tests/application/measures/CO2.d.ts +2 -0
  85. package/dist/tests/application/measures/HumidityMeasure.d.ts +5 -0
  86. package/dist/tests/application/measures/Illuminance.d.ts +2 -0
  87. package/dist/tests/application/measures/Magicule.d.ts +2 -2
  88. package/dist/tests/application/measures/MovementMeasure.d.ts +5 -0
  89. package/dist/{lib/modules/measure → tests/application}/measures/PositionMeasure.d.ts +2 -2
  90. package/dist/tests/application/measures/PowerConsumption.d.ts +2 -0
  91. package/dist/tests/application/measures/TemperatureMeasure.d.ts +5 -0
  92. package/dist/tests/application/measures/index.d.ts +11 -0
  93. package/dist/tests/application/models.d.ts +2 -0
  94. package/package.json +1 -1
  95. package/dist/lib/modules/asset/AssetsGroupsController.d.ts +0 -20
  96. package/dist/lib/modules/asset/collections/assetsGroupsMapping.d.ts +0 -2
  97. package/dist/lib/modules/asset/types/AssetGroupContent.d.ts +0 -8
  98. package/dist/lib/modules/asset/types/AssetGroupsApi.d.ts +0 -59
  99. package/dist/lib/modules/measure/measures/BatteryMeasure.d.ts +0 -5
  100. package/dist/lib/modules/measure/measures/HumidityMeasure.d.ts +0 -5
  101. package/dist/lib/modules/measure/measures/MovementMeasure.d.ts +0 -5
  102. package/dist/lib/modules/measure/measures/TemperatureMeasure.d.ts +0 -5
  103. package/dist/lib/modules/measure/measures/index.d.ts +0 -5
  104. package/dist/tests/application/decoders/index.d.ts +0 -2
  105. package/dist/tests/application/measures/BrightnessMeasure.d.ts +0 -2
  106. package/dist/tests/application/measures/CO2Measure.d.ts +0 -2
  107. package/dist/tests/application/measures/IlluminanceMeasure.d.ts +0 -2
  108. package/dist/tests/application/measures/PowerConsumptionMeasure.d.ts +0 -2
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,18 @@
1
+ import { JSONObject } from "kuzzle-sdk";
2
+ export declare function transformDocuments(collection: string, indexPath: string, callBack: (string: any) => JSONObject, endCallBack?: () => void): void;
3
+ export declare function clearProperties(obj: any, properties: any): {};
4
+ export interface ModelRegistry {
5
+ assets: {
6
+ [key: string]: {
7
+ type: string;
8
+ name: string;
9
+ }[];
10
+ };
11
+ devices: {
12
+ [key: string]: {
13
+ type: string;
14
+ name: string;
15
+ }[];
16
+ };
17
+ }
18
+ export declare function retrieveModelMeasureSlots(pathToPlatformIndex: string, callBack: (models: ModelRegistry) => void): void;
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";
@@ -3,6 +3,5 @@ export declare class AssetModule extends Module {
3
3
  private assetService;
4
4
  private assetHistoryService;
5
5
  private assetController;
6
- private assetGroupsController;
7
6
  init(): Promise<void>;
8
7
  }
@@ -3,7 +3,7 @@ import { JSONObject, KDocument, KHit, SearchResult, mReplaceResponse } from "kuz
3
3
  import { DeviceManagerPlugin } from "../plugin";
4
4
  import { DigitalTwinService, Metadata, SearchParams } from "../shared";
5
5
  import { AssetHistoryService } from "./AssetHistoryService";
6
- import { ApiAssetMigrateTenantResult } from "./types/AssetApi";
6
+ import { ApiAssetMigrateTenantResult, ApiAssetUpdateModelLocales } from "./types/AssetApi";
7
7
  import { AssetContent } from "./types/AssetContent";
8
8
  export declare class AssetService extends DigitalTwinService {
9
9
  private assetHistoryService;
@@ -22,6 +22,7 @@ export declare class AssetService extends DigitalTwinService {
22
22
  * Update or Create an asset metadata
23
23
  */
24
24
  upsert(engineId: string, model: string, reference: string, metadata: Metadata, request: KuzzleRequest): Promise<KDocument<AssetContent>>;
25
+ private _create;
25
26
  /**
26
27
  * Create an asset metadata
27
28
  */
@@ -31,13 +32,19 @@ export declare class AssetService extends DigitalTwinService {
31
32
  */
32
33
  delete(engineId: string, assetId: string, request: KuzzleRequest): Promise<void>;
33
34
  search(engineId: string, searchParams: SearchParams, request: KuzzleRequest): Promise<SearchResult<KHit<AssetContent>>>;
34
- migrateTenant(user: User, assetsList: string[], engineId: string, newEngineId: string): Promise<ApiAssetMigrateTenantResult>;
35
+ migrateTenant(user: User, assetsList: string[], engineId: string, newEngineId: string, includeDevices: boolean, request: KuzzleRequest): Promise<ApiAssetMigrateTenantResult>;
35
36
  /**
36
37
  * Replace an asset metadata
37
38
  */
38
39
  mReplaceAndHistorize(engineId: string, assets: KDocument<AssetContent>[], removedMetadata: string[], { refresh }: {
39
40
  refresh: any;
40
41
  }): Promise<mReplaceResponse>;
41
- private getEngine;
42
+ /**
43
+ * Retrieve locales with the specified model and search all assets related to the model to update the locales.
44
+ * The operation is historized.
45
+ * @param request
46
+ * @param model
47
+ */
48
+ updateModelLocales(request: KuzzleRequest, model: string): Promise<ApiAssetUpdateModelLocales[]>;
42
49
  private refreshModel;
43
50
  }
@@ -1,7 +1,7 @@
1
1
  import { ControllerDefinition, KuzzleRequest } from "kuzzle";
2
2
  import { DeviceManagerPlugin } from "../plugin";
3
3
  import { AssetService } from "./AssetService";
4
- import { ApiAssetCreateResult, ApiAssetUpsertResult, ApiAssetDeleteResult, ApiAssetGetMeasuresResult, ApiAssetGetResult, ApiAssetSearchResult, ApiAssetUpdateResult, ApiAssetMigrateTenantResult, ApiAssetMetadataReplaceResult, ApiAssetGetLastMeasuresResult, ApiAssetMGetLastMeasuredAtResult, ApiAssetMGetLastMeasuresResult, ApiAssetGetLastMeasuredAtResult } from "./types/AssetApi";
4
+ import { ApiAssetCreateResult, ApiAssetUpsertResult, ApiAssetDeleteResult, ApiAssetGetMeasuresResult, ApiAssetGetResult, ApiAssetSearchResult, ApiAssetUpdateResult, ApiAssetMigrateTenantResult, ApiAssetMetadataReplaceResult, ApiAssetGetLastMeasuresResult, ApiAssetMGetLastMeasuredAtResult, ApiAssetMGetLastMeasuresResult, ApiAssetGetLastMeasuredAtResult, ApiAssetUpdateModelLocales, ApiAssetLinkDevicesResult, ApiAssetUnlinkDevicesResult } from "./types/AssetApi";
5
5
  export declare class AssetsController {
6
6
  private plugin;
7
7
  private assetService;
@@ -36,4 +36,18 @@ export declare class AssetsController {
36
36
  migrateTenant(request: KuzzleRequest): Promise<ApiAssetMigrateTenantResult>;
37
37
  getLastMeasuredAt(request: KuzzleRequest): Promise<ApiAssetGetLastMeasuredAtResult>;
38
38
  mGetLastMeasuredAt(request: KuzzleRequest): Promise<ApiAssetMGetLastMeasuredAtResult>;
39
+ /**
40
+ * Update modelLocales of all assets related to the specified asset model.
41
+ * This operation is done to make the search assets feature up to date
42
+ * @param request
43
+ */
44
+ updateModelLocales(request: KuzzleRequest): Promise<ApiAssetUpdateModelLocales[]>;
45
+ /**
46
+ * Link an asset to devices.
47
+ */
48
+ linkDevices(request: KuzzleRequest): Promise<ApiAssetLinkDevicesResult>;
49
+ /**
50
+ * Unlink assets from a device.
51
+ */
52
+ unlinkDevices(request: KuzzleRequest): Promise<ApiAssetUnlinkDevicesResult>;
39
53
  }
@@ -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,9 +1,10 @@
1
- import { JSONObject, KDocument, KHit, SearchResult } from "kuzzle-sdk";
1
+ import { JSONObject, KDocument, KHit, SearchResult, UpdateByQueryResponse } from "kuzzle-sdk";
2
2
  import { MeasureContent, Measurement } from "../../../modules/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;
@@ -33,7 +34,6 @@ export interface ApiAssetMetadataReplaceRequest extends AssetsControllerRequest
33
34
  export type ApiAssetMetadataReplaceResult = KDocument<AssetContent>;
34
35
  export interface ApiAssetUpsertRequest extends AssetsControllerRequest {
35
36
  action: "upsert";
36
- _id: string;
37
37
  refresh?: string;
38
38
  body: {
39
39
  model: string;
@@ -156,6 +156,7 @@ export interface ApiAssetMigrateTenantRequest extends AssetsControllerRequest {
156
156
  body: {
157
157
  assetsList: string[];
158
158
  newEngineId: string;
159
+ includeDevices?: boolean;
159
160
  };
160
161
  }
161
162
  export type ApiAssetMigrateTenantResult = {
@@ -166,4 +167,89 @@ export type ApiAssetGetLastMeasuredAtRequest = ApiDigitalTwinGetLastMeasuredAtRe
166
167
  export type ApiAssetGetLastMeasuredAtResult = ApiDigitalTwinGetLastMeasuredAtResult;
167
168
  export type ApiAssetMGetLastMeasuredAtRequest = ApiDigitalTwinMGetLastMeasuredAtRequest<AssetsControllerName>;
168
169
  export type ApiAssetMGetLastMeasuredAtResult = ApiDigitalTwinMGetLastMeasuredAtResult;
170
+ export type ApiAssetUpdateModelLocales = {
171
+ engineIndex: string;
172
+ result: UpdateByQueryResponse<AssetContent>;
173
+ };
174
+ export interface ApiAssetlinkDevicesRequest extends AssetsControllerRequest {
175
+ action: "linkDevices";
176
+ _id: string;
177
+ refresh?: string;
178
+ body: {
179
+ linkedMeasures: Array<{
180
+ deviceId: string;
181
+ /**
182
+ * This option allows to not specify the names of all the measures that should
183
+ * be linked to the asset.
184
+ *
185
+ * The algorithm will go through all the measures names provided by the device
186
+ * and add the one who are present with the same name in the asset.
187
+ *
188
+ * It will not add the measure if:
189
+ * - it has been specified in the link request
190
+ * - it was already present in the asset
191
+ *
192
+ * @example
193
+ * if the device provide a measure of type "temperature" with the name "temp"
194
+ * if the asset has declared a measure of type "temperature" with the name "temp"
195
+ * then the measure will be automatically added in the link and will later be propagated to the asset
196
+ */
197
+ implicitMeasuresLinking?: boolean;
198
+ /**
199
+ * Names of the linked measures.
200
+ *
201
+ * Array<{ asset: string, device: string }>
202
+ *
203
+ * @example
204
+ *
205
+ * [
206
+ * { asset: "externalTemperature", device: "temperature" }
207
+ * ]
208
+ */
209
+ measureSlots?: Array<{
210
+ asset: string;
211
+ device: string;
212
+ }>;
213
+ }>;
214
+ };
215
+ }
216
+ export type ApiAssetLinkDevicesResult = {
217
+ asset: KDocument<AssetContent>;
218
+ devices: KDocument<DeviceContent>[];
219
+ };
220
+ export interface ApiAssetUnlinkDevicesRequest extends AssetsControllerRequest {
221
+ action: "unlinkDevices";
222
+ _id: string;
223
+ strict?: boolean;
224
+ refresh?: string;
225
+ body: {
226
+ linkedMeasures: Array<{
227
+ deviceId: string;
228
+ /**
229
+ * This option allows to not specify the names of all the measures that should
230
+ * be unlinked from the asset.
231
+ */
232
+ allMeasures?: boolean;
233
+ /**
234
+ * Names of the linked measures.
235
+ *
236
+ * Array<{ asset: string, device: string }>
237
+ *
238
+ * @example
239
+ *
240
+ * [
241
+ * { asset: "externalTemperature", device: "temperature" }
242
+ * ]
243
+ */
244
+ measureSlots?: Array<{
245
+ asset: string;
246
+ device: string;
247
+ }>;
248
+ }>;
249
+ };
250
+ }
251
+ export type ApiAssetUnlinkDevicesResult = {
252
+ asset: KDocument<AssetContent>;
253
+ devices: KDocument<DeviceContent>[];
254
+ };
169
255
  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,20 +19,19 @@ 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
37
  }
@@ -49,4 +47,4 @@ export type AssetMeasureContext<TMetadata extends Metadata = Metadata> = {
49
47
  * Name of the measure for the Asset
50
48
  */
51
49
  measureName: string;
52
- } & Pick<AssetContent<JSONObject, TMetadata>, "model" | "reference" | "metadata" | "groups">;
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
  }
@@ -4,7 +4,6 @@ interface DecodersControllerRequest {
4
4
  }
5
5
  export interface ApiDecoderListRequest extends DecodersControllerRequest {
6
6
  action: "list";
7
- _id: string;
8
7
  }
9
8
  export type ApiDecoderListResult = {
10
9
  decoders: DecoderContent[];
@@ -3,22 +3,18 @@ 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";
9
7
  export declare class DeviceService extends DigitalTwinService {
10
8
  constructor(plugin: DeviceManagerPlugin);
11
9
  registerAskEvents(): void;
10
+ private _create;
11
+ private _createDeviceProvisioning;
12
12
  /**
13
13
  * Create a new device.
14
14
  *
15
- * @todo creating a device in the "device-manager" index should be a separate
16
- * method since in this case "engineId" is not really an engine ID but still
17
- * required as an argument (in part to check the tenant rights)
18
15
  */
19
16
  create(model: string, reference: string, metadata: JSONObject, request: KuzzleRequest): Promise<KDocument<DeviceContent>>;
20
17
  get(engineId: string, deviceId: string, request: KuzzleRequest): Promise<KDocument<DeviceContent>>;
21
- private getInternalDevices;
22
18
  /**
23
19
  * Replace a device metadata
24
20
  */
@@ -30,6 +26,14 @@ export declare class DeviceService extends DigitalTwinService {
30
26
  update(engineId: string, deviceId: string, metadata: Metadata, request: KuzzleRequest): Promise<KDocument<DeviceContent>>;
31
27
  delete(engineId: string, deviceId: string, request: KuzzleRequest): Promise<void>;
32
28
  search(engineId: string, searchParams: SearchParams, request: KuzzleRequest): Promise<SearchResult<KHit<DeviceContent>>>;
29
+ /**
30
+ * Internal logic to attach the device to an engine
31
+ *
32
+ * @param engineId Engine id to attach to
33
+ * @param deviceId Device id to attach
34
+ * @param options.refresh Wait for ES indexation
35
+ */
36
+ private _attachEngine;
33
37
  /**
34
38
  * Attach the device to an engine
35
39
  *
@@ -45,41 +49,9 @@ export declare class DeviceService extends DigitalTwinService {
45
49
  * @param {string} deviceId Id of the device
46
50
  * @param {KuzzleRequest} request kuzzle request
47
51
  */
48
- detachEngine(deviceId: string, request: KuzzleRequest): Promise<KDocument<DeviceContent>>;
49
- /**
50
- * Link a device to an asset.
51
- */
52
- linkAsset(engineId: string, deviceId: string, assetId: string, measureNames: ApiDeviceLinkAssetRequest["body"]["measureNames"], implicitMeasuresLinking: boolean, request: KuzzleRequest): Promise<{
53
- asset: KDocument<AssetContent>;
54
- device: KDocument<DeviceContent>;
55
- }>;
52
+ detachEngine(deviceId: string, request: KuzzleRequest): Promise<KDocument<DeviceProvisioningContent>>;
56
53
  receiveMeasures(engineId: string, deviceId: string, measures: DecodedMeasurement[], payloadUuids: string[], request: KuzzleRequest): Promise<void>;
57
- /**
58
- * Checks if the asset does not already have a linked device using one of the
59
- * requested measure names.
60
- */
61
- private checkAlreadyProvidedMeasures;
62
- /**
63
- * Goes through the device available measures and add them into the link if:
64
- * - they are not already provided by another device
65
- * - they are not already present in the link request
66
- * - they are declared in the asset model
67
- */
68
- private generateMissingAssetMeasureNames;
69
- /**
70
- * Unlink a device of an asset
71
- *
72
- * @param {string} deviceId Id of the device
73
- * @param {KuzzleRequest} request kuzzle request
74
- */
75
- unlinkAsset(deviceId: string, request: KuzzleRequest): Promise<{
76
- asset: KDocument<AssetContent>;
77
- device: KDocument<DeviceContent>;
78
- }>;
79
54
  private checkEngineExists;
80
55
  private checkAttachedToEngine;
81
- private getEngine;
82
- private getDeviceModel;
83
- private getAssetModel;
84
56
  private refreshModel;
85
57
  }
@@ -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
  export declare class DevicesController {
6
6
  private plugin;
7
7
  private deviceService;
@@ -28,13 +28,13 @@ export declare class DevicesController {
28
28
  */
29
29
  detachEngine(request: KuzzleRequest): Promise<ApiDeviceDetachEngineResult>;
30
30
  /**
31
- * Link a device to an asset.
31
+ * Link a device to several assets.
32
32
  */
33
- linkAsset(request: KuzzleRequest): Promise<ApiDeviceLinkAssetResult>;
33
+ linkAssets(request: KuzzleRequest): Promise<ApiDeviceLinkAssetsResult>;
34
34
  /**
35
- * Unlink a device from an asset.
35
+ * Unlink assets from a device.
36
36
  */
37
- unlinkAsset(request: KuzzleRequest): Promise<ApiDeviceUnlinkAssetResult>;
37
+ unlinkAssets(request: KuzzleRequest): Promise<ApiDeviceUnlinkAssetsResult>;
38
38
  getMeasures(request: KuzzleRequest): Promise<ApiDeviceGetMeasuresResult>;
39
39
  getLastMeasures(request: KuzzleRequest): Promise<ApiDeviceGetLastMeasuresResult>;
40
40
  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,
@@ -25,7 +25,6 @@ export type ApiDeviceUpdateResult = KDocument<DeviceContent>;
25
25
  export type ApiDeviceMetadataReplaceResult = KDocument<DeviceContent>;
26
26
  export interface ApiDeviceUpsertRequest extends DevicesControllerRequest {
27
27
  action: "upsert";
28
- _id: string;
29
28
  refresh?: string;
30
29
  body: {
31
30
  model: string;
@@ -60,14 +59,39 @@ export interface ApiDeviceSearchRequest extends DevicesControllerRequest {
60
59
  body: JSONObject;
61
60
  }
62
61
  export type ApiDeviceSearchResult = SearchResult<KHit<DeviceContent>>;
63
- export interface ApiDeviceUnlinkAssetRequest extends DevicesControllerRequest {
64
- action: "unlinkAsset";
62
+ export interface ApiDeviceUnlinkAssetsRequest extends DevicesControllerRequest {
63
+ action: "unlinkAssets";
65
64
  _id: string;
66
65
  strict?: boolean;
67
66
  refresh?: string;
67
+ body: {
68
+ linkedMeasures: Array<{
69
+ assetId: string;
70
+ /**
71
+ * This option allows to not specify the names of all the measures that should
72
+ * be unlinked from the asset.
73
+ */
74
+ allMeasures?: boolean;
75
+ /**
76
+ * Names of the linked measures.
77
+ *
78
+ * Array<{ asset: string, device: string }>
79
+ *
80
+ * @example
81
+ *
82
+ * [
83
+ * { asset: "externalTemperature", device: "temperature" }
84
+ * ]
85
+ */
86
+ measureSlots?: Array<{
87
+ asset: string;
88
+ device: string;
89
+ }>;
90
+ }>;
91
+ };
68
92
  }
69
- export type ApiDeviceUnlinkAssetResult = {
70
- asset: KDocument<AssetContent>;
93
+ export type ApiDeviceUnlinkAssetsResult = {
94
+ assets: KDocument<AssetContent>[];
71
95
  device: KDocument<DeviceContent>;
72
96
  };
73
97
  export interface ApiDeviceAttachEngineRequest extends DevicesControllerRequest {
@@ -82,48 +106,50 @@ export interface ApiDeviceDetachEngineRequest extends DevicesControllerRequest {
82
106
  refresh?: string;
83
107
  }
84
108
  export type ApiDeviceDetachEngineResult = void;
85
- export interface ApiDeviceLinkAssetRequest extends DevicesControllerRequest {
86
- action: "linkAsset";
109
+ export interface ApiDeviceLinkAssetsRequest extends DevicesControllerRequest {
110
+ action: "linkAssets";
87
111
  _id: string;
88
112
  refresh?: string;
89
- assetId: string;
90
- /**
91
- * This option allows to not specify the names of all the measures that should
92
- * be linked to the asset.
93
- *
94
- * The algorithm will go through all the measures names provided by the device
95
- * and add the one who are present with the same name in the asset.
96
- *
97
- * It will not add the measure if:
98
- * - it has been specified in the link request
99
- * - it was already present in the asset
100
- *
101
- * @example
102
- * if the device provide a measure of type "temperature" with the name "temp"
103
- * if the asset has declared a measure of type "temperature" with the name "temp"
104
- * then the measure will be automatically added in the link and will later be propagated to the asset
105
- */
106
- implicitMeasuresLinking?: boolean;
107
- body?: {
108
- /**
109
- * Names of the linked measures.
110
- *
111
- * Array<{ asset: string, device: string }>
112
- *
113
- * @example
114
- *
115
- * [
116
- * { asset: "externalTemperature", device: "temperature" }
117
- * ]
118
- */
119
- measureNames?: Array<{
120
- asset: string;
121
- device: string;
113
+ body: {
114
+ linkedMeasures: Array<{
115
+ assetId: string;
116
+ /**
117
+ * This option allows to not specify the names of all the measures that should
118
+ * be linked to the asset.
119
+ *
120
+ * The algorithm will go through all the measures names provided by the device
121
+ * and add the one who are present with the same name in the asset.
122
+ *
123
+ * It will not add the measure if:
124
+ * - it has been specified in the link request
125
+ * - it was already present in the asset
126
+ *
127
+ * @example
128
+ * if the device provide a measure of type "temperature" with the name "temp"
129
+ * if the asset has declared a measure of type "temperature" with the name "temp"
130
+ * then the measure will be automatically added in the link and will later be propagated to the asset
131
+ */
132
+ implicitMeasuresLinking?: boolean;
133
+ /**
134
+ * Names of the linked measures.
135
+ *
136
+ * Array<{ asset: string, device: string }>
137
+ *
138
+ * @example
139
+ *
140
+ * [
141
+ * { asset: "externalTemperature", device: "temperature" }
142
+ * ]
143
+ */
144
+ measureSlots?: Array<{
145
+ asset: string;
146
+ device: string;
147
+ }>;
122
148
  }>;
123
149
  };
124
150
  }
125
- export type ApiDeviceLinkAssetResult = {
126
- asset: KDocument<AssetContent>;
151
+ export type ApiDeviceLinkAssetsResult = {
152
+ assets: KDocument<AssetContent>[];
127
153
  device: KDocument<DeviceContent>;
128
154
  };
129
155
  export interface ApiDeviceGetMeasuresRequest extends DevicesControllerRequest {