kuzzle-device-manager-types 2.4.3 → 2.5.0-beta.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 (24) hide show
  1. package/dist/lib/modules/asset/AssetsController.d.ts +12 -0
  2. package/dist/lib/modules/asset/types/AssetApi.d.ts +30 -1
  3. package/dist/lib/modules/measure/MeasureService.d.ts +53 -3
  4. package/dist/lib/modules/measure/MeasureSourcesBuilder.d.ts +10 -0
  5. package/dist/lib/modules/measure/MeasureTargetBuilder.d.ts +3 -0
  6. package/dist/lib/modules/measure/MeasureValidationError.d.ts +12 -0
  7. package/dist/lib/modules/measure/collections/measuresMappings.d.ts +4 -0
  8. package/dist/lib/modules/measure/types/MeasureContent.d.ts +32 -20
  9. package/dist/lib/modules/measure/types/MeasureDefinition.d.ts +19 -0
  10. package/dist/lib/modules/measure/types/MeasureEvents.d.ts +126 -0
  11. package/dist/lib/modules/measure/types/MeasureSources.d.ts +20 -0
  12. package/dist/lib/modules/measure/types/MeasureTarget.d.ts +18 -0
  13. package/dist/lib/modules/model/MappingsConflictsError.d.ts +4 -3
  14. package/dist/lib/modules/model/MeasuresDuplicates.d.ts +3 -0
  15. package/dist/lib/modules/model/MeasuresNamesDuplicatesError.d.ts +7 -0
  16. package/dist/lib/modules/model/ModelService.d.ts +5 -3
  17. package/dist/lib/modules/model/types/ModelApi.d.ts +2 -0
  18. package/dist/lib/modules/plugin/DeviceManagerEngine.d.ts +1 -0
  19. package/dist/lib/modules/plugin/DeviceManagerPlugin.d.ts +1 -1
  20. package/dist/lib/modules/shared/errors/SchemaValidationError.d.ts +8 -0
  21. package/dist/lib/modules/shared/utils/AJValidator.d.ts +26 -0
  22. package/dist/tests/application/assets/MagicHouse.d.ts +2 -0
  23. package/dist/tests/application/measures/Magicule.d.ts +5 -0
  24. package/package.json +1 -1
@@ -19,6 +19,18 @@ export declare class AssetsController {
19
19
  getMeasures(request: KuzzleRequest): Promise<ApiAssetGetMeasuresResult>;
20
20
  getLastMeasures(request: KuzzleRequest): Promise<ApiAssetGetLastMeasuresResult>;
21
21
  mGetLastMeasures(request: KuzzleRequest): Promise<ApiAssetMGetLastMeasuresResult>;
22
+ /**
23
+ *
24
+ * @param indexId The asset index
25
+ * @param assetId The target asset ID
26
+ * @param measureName The measureName to get the type from
27
+ * @param engineGroup The target engine group
28
+ * @returns The measure type if used in the asset, null otherwise
29
+ * @throws If the asset does not exists
30
+ */
31
+ private getTypeFromMeasureSlot;
32
+ mMeasureIngest(request: KuzzleRequest): Promise<void>;
33
+ measureIngest(request: KuzzleRequest): Promise<void>;
22
34
  exportMeasures(request: KuzzleRequest): Promise<any>;
23
35
  export(request: KuzzleRequest): Promise<any>;
24
36
  migrateTenant(request: KuzzleRequest): Promise<ApiAssetMigrateTenantResult>;
@@ -1,8 +1,9 @@
1
1
  import { JSONObject, KDocument, KHit, SearchResult } from "kuzzle-sdk";
2
- import { MeasureContent } from "../../../modules/measure";
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
+ import { ApiMeasureSource } from "../../measure/types/MeasureSources";
6
7
  interface AssetsControllerRequest {
7
8
  controller: AssetsControllerName;
8
9
  engineId: string;
@@ -85,6 +86,34 @@ export type ApiAssetGetMeasuresResult = {
85
86
  measures: Array<KDocument<MeasureContent<JSONObject>>>;
86
87
  total: number;
87
88
  };
89
+ type TypelessApiMeasureSource = Omit<ApiMeasureSource, "type">;
90
+ export interface ApiAssetMeasureIngestRequest extends AssetsControllerRequest {
91
+ action: "measureIngest";
92
+ assetId: string;
93
+ engineId: string;
94
+ engineGroup?: string;
95
+ slotName: string;
96
+ body: {
97
+ dataSource: TypelessApiMeasureSource;
98
+ measuredAt: number;
99
+ values: JSONObject;
100
+ };
101
+ }
102
+ export type ApiAssetMeasureIngestResult = void;
103
+ type APIDecodedMeasurement = Omit<Measurement, "type"> & {
104
+ slotName: string;
105
+ };
106
+ export interface ApiAssetmMeasureIngestRequest extends AssetsControllerRequest {
107
+ action: "mMeasureIngest";
108
+ assetId: string;
109
+ engineId: string;
110
+ engineGroup?: string;
111
+ body: {
112
+ dataSource: TypelessApiMeasureSource;
113
+ measurements: APIDecodedMeasurement[];
114
+ };
115
+ }
116
+ export type ApiAssetmMeasureIngestResult = void;
88
117
  export type ApiAssetGetLastMeasuresRequest = ApiDigitalTwinGetLastMeasuresRequest<AssetsControllerName>;
89
118
  export type ApiAssetGetLastMeasuresResult = ApiDigitalTwinGetLastMeasuresResult;
90
119
  export type ApiAssetMGetLastMeasuresRequest = ApiDigitalTwinMGetLastMeasuresRequest<AssetsControllerName>;
@@ -3,8 +3,21 @@ import { DeviceContent } from "../device";
3
3
  import { DeviceManagerPlugin } from "../plugin";
4
4
  import { BaseService, Metadata } from "../shared";
5
5
  import { DecodedMeasurement } from "./types/MeasureContent";
6
+ import { ApiMeasureSource } from "./types/MeasureSources";
7
+ import { ApiMeasureTarget } from "./types/MeasureTarget";
6
8
  export declare class MeasureService extends BaseService {
7
9
  constructor(plugin: DeviceManagerPlugin);
10
+ /**
11
+ * Register new measures from an API, updates :
12
+ * - asset
13
+ * - engine measures
14
+ *
15
+ * This method represents the ingestion pipeline:
16
+ * - trigger events `before` (measure enrichment)
17
+ * - save documents (measures and asset)
18
+ * - trigger events `after`
19
+ */
20
+ ingestApi(source: ApiMeasureSource, target: ApiMeasureTarget, measurements: DecodedMeasurement<JSONObject>[], payloadUuids: string[]): Promise<void>;
8
21
  /**
9
22
  * Register new measures from a device, updates :
10
23
  * - admin device
@@ -19,6 +32,8 @@ export declare class MeasureService extends BaseService {
19
32
  * - trigger events `before` (measure enrichment)
20
33
  * - save documents (measures, device and asset)
21
34
  * - trigger events `after`
35
+ *
36
+ * @deprecated
22
37
  */
23
38
  ingest(device: KDocument<DeviceContent>, measurements: DecodedMeasurement<JSONObject>[], metadata: Metadata, payloadUuids: string[]): Promise<void>;
24
39
  private updateDeviceMeasures;
@@ -28,13 +43,48 @@ export declare class MeasureService extends BaseService {
28
43
  * @returns A map of each asset state by measuredAt timestamp.
29
44
  */
30
45
  private updateAssetMeasures;
46
+ /**
47
+ * Build the measures document received from the API
48
+ *
49
+ * @param source The API data source
50
+ * @param asset The target asset to build the measure for
51
+ * @param measure The decoded raw measures
52
+ * @param payloadUuids The uuid's of the payloads used to create the measure
53
+ *
54
+ * @returns A MeasurementContent builded from parameters
55
+ */
56
+ private buildApiMeasures;
31
57
  /**
32
58
  * Build the measures documents to save
33
59
  */
34
60
  private buildMeasures;
35
- private tryGetLinkedAsset;
36
61
  /**
37
- * Retrieve the measure name for the asset
62
+ * Find an asset by its ID and its engine ID.
63
+ *
64
+ * @param engineId The target index ID
65
+ * @param assetId the target asset ID
66
+ * @returns The asset or null if not found
67
+ */
68
+ private findAsset;
69
+ /**
70
+ * Check if the asset measure name is associated to the asset model
71
+ *
72
+ * @param measureName The measure name to check
73
+ * @param model The asset model the measureName should belong
74
+ *
75
+ * @returns True if the asset measure name belongs to the asset model, false otherwise
76
+ * @throws If the model does not exists
77
+ */
78
+ private isMeasureNameInModel;
79
+ /**
80
+ * Find the asset measure name from the device and its measure type
81
+ *
82
+ * @param deviceId The source device ID
83
+ * @param measureType The device measure type
84
+ * @param asset The asset the device is linked to
85
+ *
86
+ * @returns The asset measure name or null if it does not belong to the link
87
+ * @throws If the device is not linked to the asset
38
88
  */
39
- private tryFindAssetMeasureName;
89
+ private findAssetMeasureNameFromDevice;
40
90
  }
@@ -0,0 +1,10 @@
1
+ import { Metadata } from "../shared";
2
+ import { MeasureOriginApi, MeasureOriginDevice } from "./types/MeasureContent";
3
+ import { ApiMeasureSource, DeviceMeasureSource } from "./types/MeasureSources";
4
+ export declare const enum DATA_SOURCE_METADATA_TYPE {
5
+ API = "api",
6
+ DEVICE = "device"
7
+ }
8
+ export declare function apiSourceToOriginApi(source: ApiMeasureSource, payloadUuids: string[]): MeasureOriginApi;
9
+ export declare function toDeviceSource(dataSourceId: string, reference: string, model: string, metadata?: Metadata, lastMeasuredAt?: number): DeviceMeasureSource;
10
+ export declare function deviceSourceToOriginDevice(source: DeviceMeasureSource, measureName: string, payloadUuids: string[]): MeasureOriginDevice;
@@ -0,0 +1,3 @@
1
+ import { ApiMeasureTarget, DeviceMeasureTarget } from "./types/MeasureTarget";
2
+ export declare function toApiTarget(indexId: string, assetId: string, engineGroup?: string): ApiMeasureTarget;
3
+ export declare function toDeviceTarget(indexId: string, assetId?: string): DeviceMeasureTarget;
@@ -0,0 +1,12 @@
1
+ import { ErrorObject } from "ajv";
2
+ import { KuzzleError } from "kuzzle";
3
+ export interface MeasureValidationChunks {
4
+ measureName: string;
5
+ validationErrors: ErrorObject[];
6
+ }
7
+ export declare class MeasureValidationError extends KuzzleError {
8
+ private errors;
9
+ constructor(message: string, errors: MeasureValidationChunks[], id?: string, code?: number);
10
+ get name(): string;
11
+ toJSON(): import("kuzzle").JSONObject;
12
+ }
@@ -66,6 +66,10 @@ export declare const measuresMappings: {
66
66
  deviceMetadata: {
67
67
  properties: {};
68
68
  };
69
+ apiMetadata: {
70
+ dynamic: string;
71
+ properties: {};
72
+ };
69
73
  payloadUuids: {
70
74
  type: string;
71
75
  };
@@ -1,58 +1,69 @@
1
1
  import { JSONObject, KDocumentContent } from "kuzzle-sdk";
2
2
  import { Metadata } from "../../../modules/shared";
3
3
  import { AssetMeasureContext } from "../../../modules/asset";
4
- export type MeasureOriginDevice = {
4
+ interface AbstractMeasureOrigin {
5
5
  /**
6
6
  * Origin of the measure
7
7
  */
8
- type: "device";
9
- /**
10
- * Name of the measure in the device
11
- */
12
- measureName: string;
13
- /**
14
- * Origin device metadata
15
- */
16
- deviceMetadata?: Metadata;
8
+ type: string;
17
9
  /**
18
10
  * Payload uuids that were used to create this measure.
19
11
  */
20
12
  payloadUuids: Array<string>;
13
+ /**
14
+ * Custom metadata provided by the user
15
+ */
16
+ metadata?: Metadata;
17
+ }
18
+ export interface MeasureOriginDevice extends AbstractMeasureOrigin {
19
+ type: "device";
21
20
  /**
22
21
  * Model of the device
23
22
  *
24
23
  * @example "AbeewayTemp"
25
24
  */
26
25
  deviceModel: string;
26
+ /**
27
+ * Name of the measure
28
+ */
29
+ measureName: string;
27
30
  /**
28
31
  * Reference of the device
29
32
  */
30
33
  reference: string;
34
+ /**
35
+ * Origin device metadata
36
+ */
37
+ deviceMetadata?: Metadata;
31
38
  /**
32
39
  * Device ID
33
40
  */
34
41
  _id: string;
35
- };
36
- export type MeasureOriginComputed = {
42
+ }
43
+ export interface MeasureOriginComputed extends AbstractMeasureOrigin {
37
44
  /**
38
45
  * Computed measures are not automatically added into the asset and device
39
46
  * documents at the end of the ingestion pipeline.
40
47
  */
41
48
  type: "computed";
42
- /**
43
- * String that identify the rule used to compute the measure
44
- */
45
- _id: string;
46
49
  /**
47
50
  * Name of the measure
48
51
  */
49
52
  measureName: string;
50
53
  /**
51
- * Payload uuids that were used to create this measure for traceability.
54
+ * String that identify the rule used to compute the measure
52
55
  */
53
- payloadUuids: Array<string>;
54
- };
55
- export type MeasureOrigin = MeasureOriginDevice | MeasureOriginComputed;
56
+ _id: string;
57
+ }
58
+ export interface MeasureOriginApi extends AbstractMeasureOrigin {
59
+ type: "api";
60
+ apiMetadata?: Metadata;
61
+ /**
62
+ * API ID
63
+ */
64
+ _id: string;
65
+ }
66
+ export type MeasureOrigin = MeasureOriginDevice | MeasureOriginComputed | MeasureOriginApi;
56
67
  /**
57
68
  * Represents the content of a measure document.
58
69
  */
@@ -88,3 +99,4 @@ export type Measurement<TMeasureValues extends JSONObject = any> = {
88
99
  export type DecodedMeasurement<TMeasureValues extends JSONObject = JSONObject> = {
89
100
  measureName: string;
90
101
  } & Measurement<TMeasureValues>;
102
+ export {};
@@ -1,3 +1,4 @@
1
+ import { SchemaObject } from "ajv";
1
2
  import { JSONObject } from "kuzzle-sdk";
2
3
  interface MeasureLocales {
3
4
  [localeString: string]: {
@@ -12,6 +13,20 @@ export interface MeasureValuesDetails {
12
13
  * Represents a measure definition registered by the Device Manager
13
14
  *
14
15
  * @example
16
+ * {
17
+ * valuesMappings: { temperature: { type: 'float' } },
18
+ * validationSchema: {
19
+ type: "object",
20
+ properties: {
21
+ temperature: {
22
+ type: "number",
23
+ multipleOf: 0.01
24
+ }
25
+ },
26
+ required: ["temperature"],
27
+ additionalProperties: false
28
+ }
29
+ * },
15
30
  *{
16
31
  * valuesMappings: { temperature: { type: "float" } },
17
32
  * valuesDetails: {
@@ -33,6 +48,10 @@ export interface MeasureDefinition {
33
48
  * Mappings for the measurement values in order to index the fields
34
49
  */
35
50
  valuesMappings: JSONObject;
51
+ /**
52
+ * Schema to validate the values against
53
+ */
54
+ validationSchema?: SchemaObject;
36
55
  valuesDetails?: {
37
56
  [valueName: string]: MeasureLocales;
38
57
  };
@@ -3,8 +3,12 @@ import { DeviceContent } from "../../../modules/device";
3
3
  import { AssetContent } from "../../../modules/asset";
4
4
  import { Metadata } from "../../../modules/shared";
5
5
  import { DecodedMeasurement, MeasureContent } from "./MeasureContent";
6
+ import { MeasureSource } from "./MeasureSources";
7
+ import { MeasureTarget } from "./MeasureTarget";
6
8
  /**
7
9
  * @internal
10
+ *
11
+ * @deprecated Replaced by new Ask implementing data sources
8
12
  */
9
13
  export type AskMeasureIngest = {
10
14
  name: "device-manager:measures:ingest";
@@ -16,10 +20,25 @@ export type AskMeasureIngest = {
16
20
  };
17
21
  result: void;
18
22
  };
23
+ /**
24
+ * @internal
25
+ */
26
+ export type AskMeasureSourceIngest = {
27
+ name: "device-manager:measures:sourceIngest";
28
+ payload: {
29
+ source: MeasureSource;
30
+ target: MeasureTarget;
31
+ measurements: DecodedMeasurement<JSONObject>[];
32
+ payloadUuids: string[];
33
+ };
34
+ result: void;
35
+ };
19
36
  /**
20
37
  * Event before starting to process new measures.
21
38
  *
22
39
  * Useful to enrich measures before they are saved.
40
+ *
41
+ * @deprecated Replaced by new triggers implementing data sources
23
42
  */
24
43
  export type EventMeasureProcessBefore = {
25
44
  name: "device-manager:measures:process:before";
@@ -31,10 +50,28 @@ export type EventMeasureProcessBefore = {
31
50
  }
32
51
  ];
33
52
  };
53
+ /**
54
+ * Event before starting to process new measures from data source.
55
+ *
56
+ * Useful to enrich measures before they are saved.
57
+ */
58
+ export type EventMeasureProcessSourceBefore = {
59
+ name: "device-manager:measures:process:sourceBefore";
60
+ args: [
61
+ {
62
+ source: MeasureSource;
63
+ target: MeasureTarget;
64
+ asset?: AssetContent;
65
+ measures: MeasureContent[];
66
+ }
67
+ ];
68
+ };
34
69
  /**
35
70
  * Tenant event before starting to process new measures.
36
71
  *
37
72
  * Useful to enrich measures before they are saved.
73
+ *
74
+ * @deprecated Replaced by new triggers implementing data sources
38
75
  */
39
76
  export type TenantEventMeasureProcessBefore = {
40
77
  name: `engine:${string}:device-manager:measures:process:before`;
@@ -46,9 +83,27 @@ export type TenantEventMeasureProcessBefore = {
46
83
  }
47
84
  ];
48
85
  };
86
+ /**
87
+ * Tenant event before starting to process new measures from data source.
88
+ *
89
+ * Useful to enrich measures before they are saved.
90
+ */
91
+ export type TenantEventMeasureProcessSourceBefore = {
92
+ name: `engine:${string}:device-manager:measures:process:sourceBefore`;
93
+ args: [
94
+ {
95
+ source: MeasureSource;
96
+ target: MeasureTarget;
97
+ asset?: AssetContent;
98
+ measures: MeasureContent[];
99
+ }
100
+ ];
101
+ };
49
102
  /**
50
103
  * Event triggered after updating device and asset with new measures but
51
104
  * before persistence in database.
105
+ *
106
+ * @deprecated Replaced by new triggers implementing data sources
52
107
  */
53
108
  export type EventMeasurePersistBefore = {
54
109
  name: "device-manager:measures:persist:before";
@@ -60,9 +115,26 @@ export type EventMeasurePersistBefore = {
60
115
  }
61
116
  ];
62
117
  };
118
+ /**
119
+ * Event triggered after updating the data source and asset with new measures but
120
+ * before persistence in database.
121
+ */
122
+ export type EventMeasurePersistSourceBefore = {
123
+ name: "device-manager:measures:persist:sourceBefore";
124
+ args: [
125
+ {
126
+ source: MeasureSource;
127
+ target: MeasureTarget;
128
+ asset?: AssetContent;
129
+ measures: MeasureContent[];
130
+ }
131
+ ];
132
+ };
63
133
  /**
64
134
  * Tenant event triggered after updating device and asset with new measures but
65
135
  * before persistence in database.
136
+ *
137
+ * @deprecated Replaced by new triggers implementing data sources
66
138
  */
67
139
  export type TenantEventMeasurePersistBefore = {
68
140
  name: `engine:${string}:device-manager:measures:persist:before`;
@@ -74,6 +146,26 @@ export type TenantEventMeasurePersistBefore = {
74
146
  }
75
147
  ];
76
148
  };
149
+ /**
150
+ * Tenant event triggered after updating the data source and asset with new measures but
151
+ * before persistence in database.
152
+ */
153
+ export type TenantEventMeasurePersistSourceBefore = {
154
+ name: `engine:${string}:device-manager:measures:persist:sourceBefore`;
155
+ args: [
156
+ {
157
+ source: MeasureSource;
158
+ target: MeasureTarget;
159
+ asset?: AssetContent;
160
+ measures: MeasureContent[];
161
+ }
162
+ ];
163
+ };
164
+ /**
165
+ * Event after processing new measures.
166
+ *
167
+ * @deprecated Replaced by new triggers implementing data sources
168
+ */
77
169
  export type EventMeasureProcessAfter = {
78
170
  name: "device-manager:measures:process:after";
79
171
  args: [
@@ -84,6 +176,25 @@ export type EventMeasureProcessAfter = {
84
176
  }
85
177
  ];
86
178
  };
179
+ /**
180
+ * Event after processing new measures from data source.
181
+ */
182
+ export type EventMeasureProcessSourceAfter = {
183
+ name: "device-manager:measures:process:sourceAfter";
184
+ args: [
185
+ {
186
+ source: MeasureSource;
187
+ target: MeasureTarget;
188
+ asset?: AssetContent;
189
+ measures: MeasureContent[];
190
+ }
191
+ ];
192
+ };
193
+ /**
194
+ * Tenant event after processing new measures.
195
+ *
196
+ * @deprecated Replaced by new triggers implementing data sources
197
+ */
87
198
  export type TenantEventMeasureProcessAfter = {
88
199
  name: `engine:${string}:device-manager:measures:process:after`;
89
200
  args: [
@@ -94,3 +205,18 @@ export type TenantEventMeasureProcessAfter = {
94
205
  }
95
206
  ];
96
207
  };
208
+ /**
209
+ * Tenant event after processing new measures from data source.
210
+ *
211
+ */
212
+ export type TenantEventMeasureProcessSourceAfter = {
213
+ name: `engine:${string}:device-manager:measures:process:sourceAfter`;
214
+ args: [
215
+ {
216
+ source: MeasureSource;
217
+ target: MeasureTarget;
218
+ asset?: AssetContent;
219
+ measures: MeasureContent[];
220
+ }
221
+ ];
222
+ };
@@ -0,0 +1,20 @@
1
+ import { Metadata } from "../../shared";
2
+ interface AbstractMeasureSource {
3
+ type: string;
4
+ id: string;
5
+ metadata?: Metadata;
6
+ }
7
+ export interface DeviceMeasureSource extends AbstractMeasureSource {
8
+ type: "device";
9
+ reference: string;
10
+ model: string;
11
+ lastMeasuredAt?: number;
12
+ }
13
+ export interface ApiMeasureSource extends AbstractMeasureSource {
14
+ type: "api";
15
+ }
16
+ export declare function isSource(source: any): source is AbstractMeasureSource;
17
+ export declare function isSourceDevice(source: any): source is DeviceMeasureSource;
18
+ export declare function isSourceApi(source: any): source is ApiMeasureSource;
19
+ export type MeasureSource = DeviceMeasureSource | ApiMeasureSource;
20
+ export {};
@@ -0,0 +1,18 @@
1
+ interface AbstractMeasureTarget {
2
+ type: string;
3
+ assetId?: string;
4
+ indexId: string;
5
+ }
6
+ export interface DeviceMeasureTarget extends AbstractMeasureTarget {
7
+ type: "device";
8
+ }
9
+ export interface ApiMeasureTarget extends AbstractMeasureTarget {
10
+ type: "api";
11
+ assetId: string;
12
+ engineGroup?: string;
13
+ }
14
+ export declare function isTarget(target: any): target is AbstractMeasureTarget;
15
+ export declare function isTargetDevice(target: any): target is DeviceMeasureTarget;
16
+ export declare function isTargetApi(target: any): target is ApiMeasureTarget;
17
+ export type MeasureTarget = DeviceMeasureTarget | ApiMeasureTarget;
18
+ export {};
@@ -1,7 +1,8 @@
1
- import { JSONObject, KuzzleError } from "kuzzle";
1
+ import { KuzzleError } from "kuzzle";
2
+ import { ConflictChunk } from "./ModelsConflicts";
2
3
  export declare class MappingsConflictsError extends KuzzleError {
3
4
  private conflicts;
4
- constructor(message: string, conflicts: JSONObject, id?: string, code?: number);
5
+ constructor(message: string, conflicts: ConflictChunk[], id?: string, code?: number);
5
6
  get name(): string;
6
- toJSON(): JSONObject;
7
+ toJSON(): import("kuzzle").JSONObject;
7
8
  }
@@ -0,0 +1,3 @@
1
+ import { NamedMeasures } from "../decoder";
2
+ declare function getNamedMeasuresDuplicates(measures: NamedMeasures): string[];
3
+ export { getNamedMeasuresDuplicates };
@@ -0,0 +1,7 @@
1
+ import { KuzzleError } from "kuzzle";
2
+ export declare class MeasuresNamesDuplicatesError extends KuzzleError {
3
+ private duplicates;
4
+ constructor(message: string, duplicates: string[], id?: string, code?: number);
5
+ get name(): string;
6
+ toJSON(): import("kuzzle").JSONObject;
7
+ }
@@ -3,15 +3,17 @@ import { JSONObject, KDocument, KHit, SearchResult } from "kuzzle-sdk";
3
3
  import { DeviceManagerPlugin } from "../plugin";
4
4
  import { BaseService, SearchParams } from "../shared";
5
5
  import { AssetModelContent, DeviceModelContent, MeasureModelContent, MetadataDetails, MetadataGroups, MetadataMappings, TooltipModels } from "./types/ModelContent";
6
+ import { SchemaObject } from "ajv";
6
7
  import { MeasureValuesDetails } from "../measure";
8
+ import { NamedMeasures } from "../decoder";
7
9
  export declare class ModelService extends BaseService {
8
10
  constructor(plugin: DeviceManagerPlugin);
9
11
  registerAskEvents(): void;
10
12
  private checkModelsConflicts;
11
- writeAsset(engineGroup: string, model: string, metadataMappings: MetadataMappings, defaultMetadata: JSONObject, metadataDetails: MetadataDetails, metadataGroups: MetadataGroups, measures: AssetModelContent["asset"]["measures"], tooltipModels: TooltipModels): Promise<KDocument<AssetModelContent>>;
13
+ writeAsset(engineGroup: string, model: string, metadataMappings: MetadataMappings, defaultMetadata: JSONObject, metadataDetails: MetadataDetails, metadataGroups: MetadataGroups, measures: NamedMeasures, tooltipModels: TooltipModels): Promise<KDocument<AssetModelContent>>;
12
14
  private checkDefaultValues;
13
- writeDevice(model: string, metadataMappings: MetadataMappings, defaultMetadata: JSONObject, metadataDetails: MetadataDetails, metadataGroups: MetadataGroups, measures: DeviceModelContent["device"]["measures"]): Promise<KDocument<DeviceModelContent>>;
14
- writeMeasure(type: string, valuesMappings: JSONObject, valuesDetails?: MeasureValuesDetails): Promise<KDocument<MeasureModelContent>>;
15
+ writeDevice(model: string, metadataMappings: MetadataMappings, defaultMetadata: JSONObject, metadataDetails: MetadataDetails, metadataGroups: MetadataGroups, measures: NamedMeasures): Promise<KDocument<DeviceModelContent>>;
16
+ writeMeasure(type: string, valuesMappings: JSONObject, validationSchema?: SchemaObject, valuesDetails?: MeasureValuesDetails): Promise<KDocument<MeasureModelContent>>;
15
17
  deleteAsset(_id: string): Promise<void>;
16
18
  deleteDevice(_id: string): Promise<void>;
17
19
  deleteMeasure(_id: string): Promise<void>;
@@ -1,5 +1,6 @@
1
1
  import { JSONObject, KDocument, KHit, SearchResult } from "kuzzle-sdk";
2
2
  import { AssetModelContent, DeviceModelContent, MeasureModelContent, MetadataDetails, MetadataGroups, MetadataMappings, TooltipModels } from "./ModelContent";
3
+ import { SchemaObject } from "ajv";
3
4
  import { MeasureValuesDetails } from "../../measure/types/MeasureDefinition";
4
5
  interface ModelsControllerRequest {
5
6
  controller: "device-manager/models";
@@ -51,6 +52,7 @@ export interface ApiModelWriteMeasureRequest extends ModelsControllerRequest {
51
52
  body: {
52
53
  type: string;
53
54
  valuesMappings: JSONObject;
55
+ validationSchema?: SchemaObject;
54
56
  valuesDetails?: MeasureValuesDetails;
55
57
  };
56
58
  }
@@ -69,6 +69,7 @@ export declare class DeviceManagerEngine extends AbstractEngine<DeviceManagerPlu
69
69
  * @returns An array of the available engines
70
70
  */
71
71
  getEngines(): Promise<EngineDocument[]>;
72
+ updateMeasuresSchema(): Promise<void>;
72
73
  onCreate(index: string, group?: string): Promise<{
73
74
  collections: any[];
74
75
  }>;
@@ -181,7 +181,7 @@ export declare class DeviceManagerPlugin extends Plugin {
181
181
  * Register a new measure
182
182
  *
183
183
  * @param name Name of the measure
184
- * @param valuesMappings Mappings for the measure values
184
+ * @param measureDefinition Values of the measure
185
185
  *
186
186
  * @example
187
187
  * ```
@@ -0,0 +1,8 @@
1
+ import { ErrorObject } from "ajv";
2
+ import { KuzzleError } from "kuzzle";
3
+ export declare class SchemaValidationError extends KuzzleError {
4
+ private schemaErrors;
5
+ constructor(message: string, schemaErrors: ErrorObject[], id?: string, code?: number);
6
+ get name(): string;
7
+ toJSON(): import("kuzzle").JSONObject;
8
+ }
@@ -0,0 +1,26 @@
1
+ import { SchemaObject } from "ajv";
2
+ /**
3
+ * Compile and add the schema to the AJV cache
4
+ *
5
+ * @param scemaID The schema unique identifier
6
+ * @param schema The schema to add
7
+ *
8
+ * @returns The newly created validator for the schema
9
+ * @throws If the provided schema is not valid
10
+ */
11
+ export declare function addSchemaToCache(schemaID: string, schema: SchemaObject): import("ajv/dist/core").default;
12
+ /**
13
+ * Search the corresponding validator in the AJV cache.
14
+ *
15
+ * @param schemaID The desired schema identifier
16
+ *
17
+ * @returns The desired schema validator
18
+ * @throws If the schema cannot be found
19
+ */
20
+ export declare function getValidator(schemaID: string): import("ajv/dist/types").AnyValidateFunction<unknown>;
21
+ /**
22
+ * Get and return the previous AJV errors
23
+ *
24
+ * @returns an array of ErrorObject
25
+ */
26
+ export declare function getAJVErrors(): import("ajv").ErrorObject<string, Record<string, any>, unknown>[];
@@ -0,0 +1,2 @@
1
+ import { AssetModelDefinition } from "../../../index";
2
+ export declare const magicHouseAssetDefinition: AssetModelDefinition;
@@ -0,0 +1,5 @@
1
+ import { MeasureDefinition } from "lib/modules/measure";
2
+ export type MagiculeMeasurement = {
3
+ magicule: number;
4
+ };
5
+ export declare const magiculeMeasureDefinition: MeasureDefinition;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kuzzle-device-manager-types",
3
- "version": "2.4.3",
3
+ "version": "2.5.0-beta.1",
4
4
  "description": "Shared types for Kuzzle Device Manager",
5
5
  "author": "The Kuzzle Team (support@kuzzle.io)",
6
6
  "main": "index.js",