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
@@ -1,5 +1,5 @@
1
1
  import { JSONObject, KDocument, KHit, SearchResult } from "kuzzle-sdk";
2
- import { AssetModelContent, DeviceModelContent, GroupModelContent, LocaleDetails, MeasureModelContent, MetadataDetails, MetadataGroups, MetadataMappings, TooltipModels } from "./ModelContent";
2
+ import { AssetModelContent, DeviceModelContent, GroupAffinity, GroupModelContent, LocaleDetails, MeasureModelContent, MetadataDetails, MetadataGroups, MetadataMappings, TooltipModels } from "./ModelContent";
3
3
  import { SchemaObject } from "ajv";
4
4
  import { MeasureValuesDetails } from "../../measure/types/MeasureDefinition";
5
5
  interface ModelsControllerRequest {
@@ -8,7 +8,7 @@ interface ModelsControllerRequest {
8
8
  export interface ApiModelGetAssetRequest extends ModelsControllerRequest {
9
9
  action: "getAsset";
10
10
  model: string;
11
- engineGroup: string;
11
+ engineGroups: string[];
12
12
  }
13
13
  export type ApiModelGetAssetResult = KDocument<AssetModelContent>;
14
14
  export interface ApiModelGetDeviceRequest extends ModelsControllerRequest {
@@ -24,12 +24,13 @@ export type ApiModelGetGroupResult = KDocument<GroupModelContent>;
24
24
  export interface ApiModelGetMeasureRequest extends ModelsControllerRequest {
25
25
  action: "getMeasure";
26
26
  type: string;
27
+ engineId?: string;
27
28
  }
28
29
  export type ApiModelGetMeasureResult = KDocument<MeasureModelContent>;
29
30
  export interface ApiModelWriteAssetRequest extends ModelsControllerRequest {
30
31
  action: "writeAsset";
31
32
  body: {
32
- engineGroup: string;
33
+ engineGroups: string[];
33
34
  model: string;
34
35
  metadataDetails?: MetadataDetails;
35
36
  metadataGroups?: MetadataGroups;
@@ -58,7 +59,8 @@ export type ApiModelWriteDeviceResult = KDocument<DeviceModelContent>;
58
59
  export interface ApiModelWriteGroupRequest extends ModelsControllerRequest {
59
60
  action: "writeGroup";
60
61
  body: {
61
- engineGroup: string;
62
+ affinity: GroupAffinity;
63
+ engineGroups: string[];
62
64
  model: string;
63
65
  metadataDetails?: MetadataDetails;
64
66
  metadataGroups?: MetadataGroups;
@@ -71,6 +73,7 @@ export interface ApiModelWriteMeasureRequest extends ModelsControllerRequest {
71
73
  action: "writeMeasure";
72
74
  body: {
73
75
  type: string;
76
+ engineIds?: string[];
74
77
  locales?: {
75
78
  [valueName: string]: LocaleDetails;
76
79
  };
@@ -82,7 +85,7 @@ export interface ApiModelWriteMeasureRequest extends ModelsControllerRequest {
82
85
  export type ApiModelWriteMeasureResult = KDocument<MeasureModelContent>;
83
86
  export interface ApiModelUpdateAssetRequest extends ModelsControllerRequest {
84
87
  action: "updateAsset";
85
- engineGroup: string;
88
+ engineGroups: string[];
86
89
  model: string;
87
90
  body: {
88
91
  metadataDetails?: MetadataDetails;
@@ -119,7 +122,7 @@ export interface ApiModelDeleteMeasureRequest extends ModelsControllerRequest {
119
122
  export type ApiModelDeleteMeasureResult = void;
120
123
  export interface ApiModelListAssetsRequest extends ModelsControllerRequest {
121
124
  action: "listAssets";
122
- engineGroup: string;
125
+ engineGroups: string[];
123
126
  }
124
127
  export type ApiModelListAssetsResult = {
125
128
  models: KDocument<AssetModelContent>[];
@@ -134,7 +137,7 @@ export type ApiModelListDevicesResult = {
134
137
  };
135
138
  export interface ApiModelListGroupsRequest extends ModelsControllerRequest {
136
139
  action: "listGroups";
137
- engineGroup: string;
140
+ engineGroups: string[];
138
141
  }
139
142
  export type ApiModelListGroupsResult = {
140
143
  models: KDocument<GroupModelContent>[];
@@ -142,6 +145,7 @@ export type ApiModelListGroupsResult = {
142
145
  };
143
146
  export interface ApiModelListMeasuresRequest extends ModelsControllerRequest {
144
147
  action: "listMeasures";
148
+ engineId?: string;
145
149
  }
146
150
  export type ApiModelListMeasuresResult = {
147
151
  models: KDocument<MeasureModelContent>[];
@@ -149,7 +153,7 @@ export type ApiModelListMeasuresResult = {
149
153
  };
150
154
  export interface ApiModelSearchAssetsRequest extends ModelsControllerRequest {
151
155
  action: "searchAssets";
152
- engineGroup: string;
156
+ engineGroups: string[];
153
157
  from?: number;
154
158
  size?: number;
155
159
  scrollTTL?: string;
@@ -166,7 +170,7 @@ export interface ApiModelSearchDevicesRequest extends ModelsControllerRequest {
166
170
  export type ApiModelSearchDevicesResult = SearchResult<KHit<DeviceModelContent>>;
167
171
  export interface ApiModelSearchGroupsRequest extends ModelsControllerRequest {
168
172
  action: "searchGroups";
169
- engineGroup: string;
173
+ engineGroups: string[];
170
174
  from?: number;
171
175
  size?: number;
172
176
  scrollTTL?: string;
@@ -175,6 +179,7 @@ export interface ApiModelSearchGroupsRequest extends ModelsControllerRequest {
175
179
  export type ApiModelSearchGroupsResult = SearchResult<KHit<GroupModelContent>>;
176
180
  export interface ApiModelSearchMeasuresRequest extends ModelsControllerRequest {
177
181
  action: "searchMeasures";
182
+ engineId?: string;
178
183
  from?: number;
179
184
  size?: number;
180
185
  scrollTTL?: string;
@@ -1,8 +1,9 @@
1
1
  import { JSONObject, KDocumentContent } from "kuzzle-sdk";
2
- import { NamedMeasures } from "../../../modules/decoder";
2
+ import { NamedMeasures } from "../../decoder";
3
3
  import { MeasureDefinition } from "../../measure";
4
4
  export interface MeasureModelContent extends KDocumentContent {
5
5
  type: "measure";
6
+ engineIds?: string[];
6
7
  measure: MeasureDefinition & {
7
8
  type: string;
8
9
  locales?: {
@@ -23,6 +24,23 @@ export interface MetadataObject {
23
24
  export interface MetadataMappings {
24
25
  [key: string]: MetadataProperty | MetadataObject;
25
26
  }
27
+ export interface GroupAffinity {
28
+ /**
29
+ * Type of elements accepted in the group
30
+ */
31
+ type: Array<"assets" | "devices">;
32
+ /**
33
+ * Models accepted in the group
34
+ */
35
+ models: {
36
+ assets?: string[];
37
+ devices?: string[];
38
+ };
39
+ /**
40
+ * Weather the affinities are a strict restriction or not
41
+ */
42
+ strict: boolean;
43
+ }
26
44
  export interface LocaleDetails {
27
45
  friendlyName: string;
28
46
  description: string;
@@ -136,7 +154,13 @@ export interface TooltipModels {
136
154
  }
137
155
  export interface AssetModelContent extends KDocumentContent {
138
156
  type: "asset";
139
- engineGroup: string;
157
+ engineGroups: string[];
158
+ /**
159
+ * Optional list of engine IDs (tenant IDs) this model is scoped to.
160
+ * When set, the model is only available to the specified tenants.
161
+ * When absent, the model is available to all tenants in the engineGroups.
162
+ */
163
+ engineIds?: string[];
140
164
  asset: {
141
165
  /**
142
166
  * Name of the model
@@ -268,6 +292,9 @@ export interface AssetModelContent extends KDocumentContent {
268
292
  * ]
269
293
  */
270
294
  tooltipModels?: TooltipModels;
295
+ /**
296
+ * Translations specific to the model
297
+ */
271
298
  locales?: {
272
299
  [locale: string]: LocaleDetails;
273
300
  };
@@ -364,12 +391,16 @@ export interface DeviceModelContent extends KDocumentContent {
364
391
  }
365
392
  export interface GroupModelContent extends KDocumentContent {
366
393
  type: "group";
367
- engineGroup: string;
394
+ engineGroups: string[];
368
395
  group: {
369
396
  /**
370
397
  * Name of the model
371
398
  */
372
399
  model: string;
400
+ /**
401
+ * Group types and model affinities
402
+ */
403
+ affinity: GroupAffinity;
373
404
  /**
374
405
  * Metadata mappings.
375
406
  *
@@ -1,6 +1,6 @@
1
1
  import { JSONObject } from "kuzzle-sdk";
2
- import { Decoder, NamedMeasures } from "../../../modules/decoder";
3
- import { LocaleDetails, MetadataDetails, MetadataGroups, MetadataMappings, TooltipModels } from "./ModelContent";
2
+ import { Decoder, NamedMeasures } from "../../decoder";
3
+ import { GroupAffinity, LocaleDetails, MetadataDetails, MetadataGroups, MetadataMappings, TooltipModels } from "./ModelContent";
4
4
  /**
5
5
  * Define an asset model
6
6
  *
@@ -279,6 +279,10 @@ export type DeviceModelDefinition = {
279
279
  *
280
280
  */
281
281
  export type GroupModelDefinition = {
282
+ /**
283
+ * Metadata mappings definition
284
+ */
285
+ affinity: GroupAffinity;
282
286
  /**
283
287
  * Metadata mappings definition
284
288
  */
@@ -2,7 +2,8 @@ import { AssetModelContent, DeviceModelContent, GroupModelContent, MeasureModelC
2
2
  export type AskModelAssetGet = {
3
3
  name: "ask:device-manager:model:asset:get";
4
4
  payload: {
5
- engineGroup: string;
5
+ engineGroups: string[];
6
+ engineId?: string;
6
7
  model: string;
7
8
  };
8
9
  result: AssetModelContent;
@@ -18,6 +19,7 @@ export type AskModelMeasureGet = {
18
19
  name: "ask:device-manager:model:measure:get";
19
20
  payload: {
20
21
  type: string;
22
+ engineId?: string;
21
23
  };
22
24
  result: MeasureModelContent;
23
25
  };
@@ -42,7 +42,7 @@ export type AskEngineUpdateConflict = {
42
42
  export declare class DeviceManagerEngine extends AbstractEngine<DeviceManagerPlugin> {
43
43
  config: DeviceManagerConfiguration;
44
44
  get app(): Backend;
45
- constructor(plugin: Plugin, adminConfigManager: ConfigManager, engineConfigManager: ConfigManager);
45
+ constructor(plugin: Plugin, platformConfigManager: ConfigManager, engineConfigManager: ConfigManager);
46
46
  /**
47
47
  * Return conflicts between the new and already present twin models
48
48
  *
@@ -107,14 +107,14 @@ export declare class DeviceManagerEngine extends AbstractEngine<DeviceManagerPlu
107
107
  */
108
108
  createAssetsHistoryCollection(engineId: string, engineGroup: string): Promise<InternalCollection>;
109
109
  /**
110
- * Create the assets groups collection with the assets groups mappings in the engine
110
+ * Create the groups collection with the groups mappings in the engine
111
111
  *
112
112
  * @param engineId The target engine Id
113
113
  * @param engineGroup The engine group
114
114
  *
115
- * @throws If it failed during the assets groups collection creation
115
+ * @throws If it failed during the groups collection creation
116
116
  */
117
- createAssetsGroupsCollection(engineId: string): Promise<InternalCollection>;
117
+ createGroupsCollection(engineId: string): Promise<InternalCollection>;
118
118
  /**
119
119
  * Generate devices mappings and create the devices collection in the engine
120
120
  *
@@ -124,6 +124,15 @@ export declare class DeviceManagerEngine extends AbstractEngine<DeviceManagerPlu
124
124
  * @throws If it failed during the devices collection creation
125
125
  */
126
126
  createDevicesCollection(engineId: string): Promise<InternalCollection>;
127
+ /**
128
+ * Generate devices mappings and create the devices collection in the engine
129
+ *
130
+ * @param engineId The target engine Id
131
+ * @param engineGroup The engine group
132
+ *
133
+ * @throws If it failed during the devices collection creation
134
+ */
135
+ createPlatformDevicesCollection(): Promise<InternalCollection>;
127
136
  /**
128
137
  * Generate measures mappings and create the measures collection in the engine
129
138
  *
@@ -186,10 +195,10 @@ export declare class DeviceManagerEngine extends AbstractEngine<DeviceManagerPlu
186
195
  */
187
196
  private getModels;
188
197
  /**
189
- * Detach all devices of an index in the admin index
198
+ * Detach all devices of an index in the platform index
190
199
  *
191
200
  * @param engineId The target engine Id
192
201
  * @returns {any}
193
202
  */
194
- private detachDevicesFromAdminIndex;
203
+ private detachDevicesFromPlatformIndex;
195
204
  }
@@ -1,27 +1,29 @@
1
1
  import { Plugin, PluginContext } from "kuzzle";
2
2
  import { JSONObject } from "kuzzle-sdk";
3
3
  import { MeasureDefinition } from "../measure";
4
- import { AssetModelDefinition, DeviceModelDefinition, GroupModelDefinition } from "../model";
4
+ import { DecodersRegister } from "../decoder";
5
+ import { AssetModelDefinition, DeviceModelDefinition, GroupModelDefinition, ModelsRegister } from "../model";
5
6
  import { DeviceManagerConfiguration } from "./types/DeviceManagerConfiguration";
6
7
  export declare class DeviceManagerPlugin extends Plugin {
7
8
  config: DeviceManagerConfiguration;
8
9
  private deviceManagerEngine;
9
- private adminConfigManager;
10
+ private platformConfigManager;
10
11
  private engineConfigManager;
11
12
  private engineController;
12
13
  private assetModule;
13
14
  private deviceModule;
15
+ private groupModule;
14
16
  private decoderModule;
15
17
  private measureModule;
16
18
  private modelModule;
17
- private modelsRegister;
18
- private decodersRegister;
19
+ readonly modelsRegister: ModelsRegister;
20
+ readonly decodersRegister: DecodersRegister;
19
21
  private get sdk();
20
22
  get models(): {
21
23
  /**
22
24
  * Register an asset model
23
25
  *
24
- * @param engineGroup Engine group name
26
+ * @param engineGroups Engine group names
25
27
  * @param model Name of the asset model. Must follow a naming convention in PascalCase.
26
28
  * @param definition Object containing the asset model definition, including:
27
29
  * - measures: Array describing measure names and their types.
@@ -121,7 +123,7 @@ export declare class DeviceManagerPlugin extends Plugin {
121
123
  * );
122
124
  * ```
123
125
  */
124
- registerAsset: (engineGroup: string, model: string, definition: AssetModelDefinition) => void;
126
+ registerAsset: (engineGroups: string[], model: string, definition: AssetModelDefinition) => void;
125
127
  /**
126
128
  * Register a device.
127
129
  *
@@ -229,7 +231,7 @@ export declare class DeviceManagerPlugin extends Plugin {
229
231
  * );
230
232
  * ```
231
233
  */
232
- registerGroup: (engineGroup: string, model: string, definition: GroupModelDefinition) => void;
234
+ registerGroup: (engineGroups: string[], model: string, definition: GroupModelDefinition) => void;
233
235
  /**
234
236
  * Register a new measure
235
237
  *
@@ -253,7 +255,7 @@ export declare class DeviceManagerPlugin extends Plugin {
253
255
  */
254
256
  init(config: JSONObject, context: PluginContext): Promise<void>;
255
257
  /**
256
- * Initialize the administration index of the plugin
258
+ * Initialize the platform index of the plugin
257
259
  */
258
260
  private initDatabase;
259
261
  /**
@@ -6,12 +6,6 @@ export type DeviceManagerConfiguration = {
6
6
  * Useful to start the plugin even if the mappings are not up to date.
7
7
  */
8
8
  ignoreStartupErrors: boolean;
9
- /**
10
- * Should be set to true to historize measures in asset-history collection (deprecated)
11
- *
12
- * Should be enabled only for backward compatibility because it leads to important performance costs.
13
- */
14
- assetsHistorizesMeasures: boolean;
15
9
  engine: {
16
10
  /**
17
11
  * Auto update collection mappings with models
@@ -22,13 +16,13 @@ export type DeviceManagerConfiguration = {
22
16
  autoUpdate: true;
23
17
  };
24
18
  /**
25
- * Administration index name
19
+ * Platform index name
26
20
  */
27
- adminIndex: string;
21
+ platformIndex: string;
28
22
  /**
29
- * Administration collections mappings (in admin index)
23
+ * Collection mappings for the platform index
30
24
  */
31
- adminCollections: {
25
+ platformCollections: {
32
26
  config: {
33
27
  name: string;
34
28
  mappings: JSONObject;
@@ -51,21 +45,21 @@ export type DeviceManagerConfiguration = {
51
45
  mappings: JSONObject;
52
46
  settings?: JSONObject;
53
47
  };
54
- asset: {
48
+ assets: {
55
49
  name: string;
56
50
  mappings: CollectionMappings;
57
51
  settings?: JSONObject;
58
52
  };
59
- assetGroups: {
53
+ groups: {
60
54
  name: string;
61
- mappings: JSONObject;
55
+ mappings: CollectionMappings;
62
56
  settings?: JSONObject;
63
57
  };
64
58
  assetHistory: {
65
59
  name: string;
66
60
  settings?: JSONObject;
67
61
  };
68
- device: {
62
+ devices: {
69
63
  name: string;
70
64
  mappings: CollectionMappings;
71
65
  settings?: JSONObject;
@@ -73,6 +67,7 @@ export type DeviceManagerConfiguration = {
73
67
  measures: {
74
68
  name: string;
75
69
  settings?: JSONObject;
70
+ mappings: CollectionMappings;
76
71
  };
77
72
  };
78
73
  };
@@ -1,7 +1,7 @@
1
1
  export declare enum InternalCollection {
2
2
  ASSETS = "assets",
3
3
  ASSETS_HISTORY = "assets-history",
4
- ASSETS_GROUPS = "assets-groups",
4
+ GROUPS = "groups",
5
5
  DEVICES = "devices",
6
6
  MEASURES = "measures",
7
7
  MODELS = "models",
@@ -1,2 +1,3 @@
1
1
  export * from "./DeviceManagerConfiguration";
2
2
  export * from "./Pipes";
3
+ export * from "./InternalCollection";
@@ -22,10 +22,12 @@ export interface Column {
22
22
  isMeasure?: boolean;
23
23
  isIsoDate?: boolean;
24
24
  }
25
+ export type ExportStreamAugmenter = (result: SearchResult<KHit<KDocumentContentGeneric>>, columns: Column[], engineId: string) => Promise<void>;
25
26
  export declare abstract class AbstractExporter<P extends ExportParams = ExportParams> {
26
27
  protected plugin: DeviceManagerPlugin;
27
28
  protected target: InternalCollection;
28
29
  protected config: ExporterOption;
30
+ protected exportStreamAugmenters: ExportStreamAugmenter[];
29
31
  constructor(plugin: DeviceManagerPlugin, target: InternalCollection, config?: Partial<ExporterOption>);
30
32
  protected get sdk(): import("kuzzle").EmbeddedSDK;
31
33
  protected get ms(): any;
@@ -43,5 +45,5 @@ export declare abstract class AbstractExporter<P extends ExportParams = ExportPa
43
45
  prepareExport(engineId: string, user: User, params: P): Promise<string>;
44
46
  protected formatHit(columns: Column[], hit: KHit<KDocumentContentGeneric>): string[];
45
47
  getExport(engineId: string, exportId: string): Promise<P>;
46
- getExportStream(request: SearchResult<KHit<KDocumentContentGeneric>>, columns: Column[]): Promise<PassThrough>;
48
+ getExportStream(request: SearchResult<KHit<KDocumentContentGeneric>>, columns: Column[], engineId: string): Promise<PassThrough>;
47
49
  }
@@ -1,8 +1,12 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
3
  import { UUID } from "node:crypto";
4
- import { AbstractExporter } from "./AbstractExporter";
4
+ import { DeviceManagerPlugin, InternalCollection } from "../../plugin";
5
+ import { AbstractExporter, ExporterOption } from "./AbstractExporter";
5
6
  export declare class DigitalTwinExporter extends AbstractExporter {
7
+ protected plugin: DeviceManagerPlugin;
8
+ protected target: InternalCollection;
9
+ constructor(plugin: DeviceManagerPlugin, target: InternalCollection, config?: Partial<ExporterOption>);
6
10
  protected exportRedisKey(engineId: string, exportId: string): string;
7
11
  protected getLink(engineId: string, exportId: UUID): string;
8
12
  sendExport(engineId: string, exportId: string): Promise<import("stream").PassThrough>;
@@ -11,4 +15,5 @@ export declare class DigitalTwinExporter extends AbstractExporter {
11
15
  */
12
16
  private getNamedMeasures;
13
17
  private generateMeasureColumns;
18
+ private addMeasuresToExportStream;
14
19
  }
@@ -1,10 +1,18 @@
1
- import { JSONObject } from "kuzzle-sdk";
1
+ import { KuzzleRequest } from "kuzzle";
2
+ import { JSONObject, KDocument } from "kuzzle-sdk";
2
3
  import { MeasureContent } from "../../measure";
3
4
  import { DeviceManagerPlugin, InternalCollection } from "../../plugin";
4
5
  import { ApiDigitalTwinMGetLastMeasuredAtResult } from "../types/DigitalTwinApi";
5
6
  import { BaseService } from "./BaseService";
7
+ import { AssetContent } from "lib/modules/asset";
8
+ import { DeviceContent, DeviceProvisioningContent } from "lib/modules/device";
9
+ import { AssetModelContent, DeviceModelContent } from "lib/modules/model";
10
+ type MeasureSlot = {
11
+ asset: string;
12
+ device: string;
13
+ };
6
14
  export declare class DigitalTwinService extends BaseService {
7
- private targetCollection;
15
+ readonly targetCollection: InternalCollection;
8
16
  private readonly digitalTwinType;
9
17
  constructor(plugin: DeviceManagerPlugin, targetCollection: InternalCollection);
10
18
  protected registerAskEvents(): void;
@@ -12,6 +20,27 @@ export declare class DigitalTwinService extends BaseService {
12
20
  * Gets the last measures of a digital twin
13
21
  */
14
22
  getLastMeasures(engineId: string, digitalTwinId: string, measureCount?: number): Promise<MeasureContent[]>;
23
+ /**
24
+ * Link a device to an asset.
25
+ */
26
+ linkAssetDevice(engineId: string, deviceId: string, assetId: string, measureSlots: {
27
+ asset: string;
28
+ device: string;
29
+ }[], implicitMeasuresLinking: boolean, request: KuzzleRequest): Promise<{
30
+ asset: KDocument<AssetContent>;
31
+ device: KDocument<DeviceContent>;
32
+ }>;
33
+ /**
34
+ * Unlink a device of an asset with lock
35
+ *
36
+ * @param {string} deviceId Id of the device
37
+ * @param {string} assetId Id of the asset
38
+ * @param {KuzzleRequest} request kuzzle request
39
+ */
40
+ unlinkAssetDevice(deviceId: string, assetId: string, measureSlots: MeasureSlot[], allMeasures: undefined | boolean, request: KuzzleRequest): Promise<{
41
+ asset: KDocument<AssetContent>;
42
+ device: KDocument<DeviceContent>;
43
+ }>;
15
44
  /**
16
45
  * Gets the last measures of multiple digital twins
17
46
  */
@@ -19,5 +48,44 @@ export declare class DigitalTwinService extends BaseService {
19
48
  getLastMeasuredAt(engineId: string, digitalTwinId: string): Promise<number>;
20
49
  mGetLastMeasuredAt(engineId: string, digitalTwinIds: string[]): Promise<ApiDigitalTwinMGetLastMeasuredAtResult>;
21
50
  private getAggregationQueryParameters;
51
+ /**
52
+ * Checks if the asset does not already have a linked device using one of the
53
+ * requested measure slots.
54
+ */
55
+ protected checkAssetAlreadyProvidedMeasures(asset: KDocument<AssetContent>, deviceId: string, requestedMeasureNames: MeasureSlot[]): void;
56
+ /**
57
+ * Checks if the device does not already have a linked asset using one of the
58
+ * requested measure slots.
59
+ */
60
+ protected checkDeviceAlreadyProvidingMeasures(device: KDocument<DeviceContent>, assetId: string, requestedMeasureNames: MeasureSlot[]): void;
61
+ /**
62
+ * Goes through the device available measures and add them into the link if:
63
+ * - they are not already provided to the asset by another device
64
+ * - they are not already provided to another asset by the device
65
+ * - they are not already present in the link request
66
+ * - they are declared in the asset model
67
+ */
68
+ protected addAvailableLinkableMeasures(asset: KDocument<AssetContent>, device: KDocument<DeviceContent>, assetModel: AssetModelContent, deviceModel: DeviceModelContent, requestedMeasureSlots: MeasureSlot[]): void;
69
+ /**
70
+ * Internal logic of unlink a device of an asset
71
+ *
72
+ * @param {string} deviceId Id of the device
73
+ * @param {KuzzleRequest} request kuzzle request
74
+ */
75
+ protected _unlinkAssetDevice(deviceId: string, assetId: string, measureSlots: MeasureSlot[], allMeasures: undefined | boolean, request: KuzzleRequest): Promise<{
76
+ asset: KDocument<AssetContent>;
77
+ device: KDocument<DeviceContent>;
78
+ }>;
79
+ /**
80
+ * Retrieve the model document of an asset
81
+ * @param {any} engineGroup:string
82
+ * @param {any} model:string
83
+ * @returns {any}
84
+ */
85
+ protected getAssetModel(engineGroup: string, model: string, engineId?: string): Promise<AssetModelContent>;
86
+ protected getDeviceModel(model: string): Promise<DeviceModelContent>;
22
87
  getEngine(engineId: string): Promise<JSONObject>;
88
+ protected getDeviceProvisioning(deviceId: string): Promise<import("kuzzle").KDocument<DeviceProvisioningContent>>;
89
+ protected checkDeviceAttachedToEngine(device: KDocument<DeviceProvisioningContent>): void;
23
90
  }
91
+ export {};
@@ -1,14 +1,13 @@
1
- import { JSONObject, KDocumentContent } from "kuzzle-sdk";
1
+ import { KDocumentContent } from "kuzzle-sdk";
2
+ import { NamedMeasures } from "../../decoder";
2
3
  import { Metadata } from "./Metadata";
3
- import { DigitalTwinMeasures } from "./DigitalTwinMeasures";
4
4
  import { LocaleDetails } from "lib/modules/model";
5
- export interface DigitalTwinContent<TMeasures extends JSONObject = JSONObject, TMetadata extends Metadata = Metadata> extends KDocumentContent {
5
+ export interface DigitalTwinContent<TMetadata extends Metadata = Metadata> extends KDocumentContent {
6
6
  model: string;
7
7
  modelLocales?: {
8
8
  [locale: string]: LocaleDetails;
9
9
  };
10
10
  reference: string;
11
11
  metadata: TMetadata;
12
- measures: DigitalTwinMeasures<TMeasures>;
13
- lastMeasuredAt: number;
12
+ measureSlots: NamedMeasures;
14
13
  }
@@ -1,3 +1,4 @@
1
+ import { User } from "kuzzle";
1
2
  import { MeasureContent } from "../../measure";
2
3
  export type AskDigitalTwinLastMeasuresGet = {
3
4
  name: "ask:device-manager:asset:get-last-measures" | "ask:device-manager:device:get-last-measures";
@@ -7,3 +8,32 @@ export type AskDigitalTwinLastMeasuresGet = {
7
8
  };
8
9
  result: MeasureContent[];
9
10
  };
11
+ export type AskDigitalTwinLink = {
12
+ name: "ask:device-manager:device:link-asset" | "ask:device-manager:asset:link-device";
13
+ payload: {
14
+ engineId: string;
15
+ assetId: string;
16
+ deviceId: string;
17
+ user: User;
18
+ measureSlots: {
19
+ asset: string;
20
+ device: string;
21
+ }[];
22
+ implicitMeasuresLinking: undefined | boolean;
23
+ };
24
+ result: void;
25
+ };
26
+ export type AskDigitalTwinUnlink = {
27
+ name: `ask:device-manager:asset:unlink-device` | `ask:device-manager:device:unlink-asset`;
28
+ payload: {
29
+ deviceId: string;
30
+ assetId: string;
31
+ measureSlots: {
32
+ asset: string;
33
+ device: string;
34
+ }[];
35
+ allMeasures: undefined | boolean;
36
+ user: User;
37
+ };
38
+ result: void;
39
+ };
@@ -1,4 +1,5 @@
1
- import { Metadata, AssetContent, TemperatureMeasurement, PositionMeasurement, AssetModel } from "../../../index";
1
+ import { Metadata, AssetContent, AssetModel } from "../../../index";
2
+ import { TemperatureMeasurement, PositionMeasurement } from "../measures";
2
3
  declare const modelName = "Container";
3
4
  export interface ContainerMetadata extends Metadata {
4
5
  height: number;
@@ -17,7 +18,7 @@ export type ContainerMeasurements = {
17
18
  position: PositionMeasurement;
18
19
  temperatureWeather: TemperatureMeasurement;
19
20
  };
20
- export interface ContainerAssetContent extends AssetContent<ContainerMeasurements, ContainerMetadata> {
21
+ export interface ContainerAssetContent extends AssetContent<ContainerMetadata> {
21
22
  model: typeof modelName;
22
23
  }
23
24
  export declare const Container: AssetModel;
@@ -1,5 +1,15 @@
1
1
  import { JSONObject } from "kuzzle-sdk";
2
2
  import { Decoder, DecodedPayload } from "../../../index";
3
+ export declare const dummyTempDeviceMeasures: readonly [{
4
+ readonly name: "temperature";
5
+ readonly type: "temperature";
6
+ }, {
7
+ readonly name: "accelerationSensor";
8
+ readonly type: "acceleration";
9
+ }, {
10
+ readonly name: "battery";
11
+ readonly type: "battery";
12
+ }];
3
13
  export declare class DummyTempDecoder extends Decoder {
4
14
  measures: readonly [{
5
15
  readonly name: "temperature";
@@ -1,5 +1,15 @@
1
1
  import { JSONObject } from "kuzzle-sdk";
2
2
  import { Decoder, DecodedPayload } from "../../../index";
3
+ export declare const dummyTempPositionDeviceMeasures: readonly [{
4
+ readonly name: "temperature";
5
+ readonly type: "temperature";
6
+ }, {
7
+ readonly name: "battery";
8
+ readonly type: "battery";
9
+ }, {
10
+ readonly name: "position";
11
+ readonly type: "position";
12
+ }];
3
13
  export declare class DummyTempPositionDecoder extends Decoder {
4
14
  measures: readonly [{
5
15
  readonly name: "temperature";