@hello.nrfcloud.com/proto-map 9.1.2 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/generator/generateType.js +1 -2
  2. package/dist/generator/generateValidator.js +3 -3
  3. package/dist/lwm2m/LwM2MObjectID.js +7 -1
  4. package/dist/lwm2m/definitions.js +44 -0
  5. package/dist/lwm2m/instanceTs.js +1 -2
  6. package/dist/lwm2m/instanceTs.spec.js +2 -2
  7. package/dist/lwm2m/object/14301.d.js +5 -0
  8. package/dist/lwm2m/object/validate14201.js +2 -2
  9. package/dist/lwm2m/object/validate14202.js +2 -2
  10. package/dist/lwm2m/object/validate14203.js +2 -2
  11. package/dist/lwm2m/object/validate14204.js +2 -2
  12. package/dist/lwm2m/object/validate14205.js +2 -2
  13. package/dist/lwm2m/object/validate14210.js +2 -2
  14. package/dist/lwm2m/object/validate14220.js +2 -2
  15. package/dist/lwm2m/object/validate14230.js +2 -2
  16. package/dist/lwm2m/object/validate14240.js +2 -2
  17. package/dist/lwm2m/object/validate14301.js +13 -0
  18. package/dist/lwm2m/objects.js +1 -0
  19. package/dist/lwm2m/timestampResources.js +2 -1
  20. package/dist/lwm2m/validate.spec.js +1 -1
  21. package/dist/lwm2m/validation.js +4 -12
  22. package/dist/lwm2m/validators.js +2 -0
  23. package/dist/senml/lwm2mToSenML.js +1 -1
  24. package/dist/senml/lwm2mToSenML.spec.js +4 -4
  25. package/dist/senml/senMLtoLwM2M.js +3 -3
  26. package/dist/senml/senMLtoLwM2M.spec.js +7 -7
  27. package/lwm2m/14301.xml +44 -0
  28. package/lwm2m/LwM2MObjectID.ts +10 -2
  29. package/lwm2m/LwM2MObjectInstance.ts +1 -1
  30. package/lwm2m/definitions.ts +24 -1
  31. package/lwm2m/instanceTs.spec.ts +3 -3
  32. package/lwm2m/instanceTs.ts +2 -3
  33. package/lwm2m/object/14201.d.ts +1 -1
  34. package/lwm2m/object/14202.d.ts +1 -1
  35. package/lwm2m/object/14203.d.ts +1 -1
  36. package/lwm2m/object/14204.d.ts +1 -1
  37. package/lwm2m/object/14205.d.ts +1 -1
  38. package/lwm2m/object/14210.d.ts +1 -1
  39. package/lwm2m/object/14220.d.ts +1 -1
  40. package/lwm2m/object/14230.d.ts +1 -1
  41. package/lwm2m/object/14240.d.ts +1 -1
  42. package/lwm2m/object/14301.d.ts +34 -0
  43. package/lwm2m/object/validate14201.ts +2 -2
  44. package/lwm2m/object/validate14202.ts +2 -2
  45. package/lwm2m/object/validate14203.ts +2 -2
  46. package/lwm2m/object/validate14204.ts +2 -2
  47. package/lwm2m/object/validate14205.ts +2 -2
  48. package/lwm2m/object/validate14210.ts +2 -2
  49. package/lwm2m/object/validate14220.ts +2 -2
  50. package/lwm2m/object/validate14230.ts +2 -2
  51. package/lwm2m/object/validate14240.ts +2 -2
  52. package/lwm2m/object/validate14301.ts +14 -0
  53. package/lwm2m/objects.ts +3 -1
  54. package/lwm2m/timestampResources.ts +1 -1
  55. package/lwm2m/validate.spec.ts +1 -1
  56. package/lwm2m/validation.ts +4 -5
  57. package/lwm2m/validators.ts +3 -1
  58. package/package.json +2 -2
  59. package/senml/lwm2mToSenML.spec.ts +4 -4
  60. package/senml/lwm2mToSenML.ts +1 -1
  61. package/senml/senMLtoLwM2M.spec.ts +7 -7
  62. package/senml/senMLtoLwM2M.ts +2 -3
@@ -59,6 +59,7 @@ var typeScriptResourceType = function(type) {
59
59
  case LwM2MType.Float:
60
60
  case LwM2MType.Integer:
61
61
  case LwM2MType.UnsignedInteger:
62
+ case LwM2MType.Time:
62
63
  return ts.factory.createTypeReferenceNode('number');
63
64
  case LwM2MType.Boolean:
64
65
  return ts.factory.createTypeReferenceNode('boolean');
@@ -67,8 +68,6 @@ var typeScriptResourceType = function(type) {
67
68
  case LwM2MType.Corelnk:
68
69
  case LwM2MType.Objlnk:
69
70
  return ts.factory.createTypeReferenceNode('string');
70
- case LwM2MType.Time:
71
- return ts.factory.createTypeReferenceNode('Date');
72
71
  default:
73
72
  throw new Error("Unexpected resource type: ".concat(type));
74
73
  }
@@ -34,9 +34,9 @@ export var generateValidator = function(param) {
34
34
  ])), ts.factory.createStringLiteral('../LwM2MObjectInstance.js'));
35
35
  /*
36
36
  import {
37
- DateResource,
38
37
  NumberResource,
39
- OptionalResource,
38
+ TimeResource,
39
+ OptionalResource,
40
40
  StringResource,
41
41
  validate,
42
42
  } from './validation.js'
@@ -118,7 +118,7 @@ var typeToValidator = function(Type) {
118
118
  case 'Boolean':
119
119
  return 'BooleanResource';
120
120
  case 'Time':
121
- return 'DateResource';
121
+ return 'TimeResource';
122
122
  default:
123
123
  throw new Error("Unsupported Resource type ".concat(Type, "!"));
124
124
  }
@@ -47,6 +47,11 @@
47
47
  *
48
48
  * Describes an RGB LED. Use different instances to address different LEDs.
49
49
  */ LwM2MObjectID[LwM2MObjectID["RGBLED_14240"] = 14240] = "RGBLED_14240";
50
+ /**
51
+ * Application Configuration (14301)
52
+ *
53
+ * Describes application configuration
54
+ */ LwM2MObjectID[LwM2MObjectID["ApplicationConfiguration_14301"] = 14301] = "ApplicationConfiguration_14301";
50
55
  })(LwM2MObjectID || (LwM2MObjectID = {}));
51
56
  /**
52
57
  * The LwM2M Object IDs defined in this repo.
@@ -59,5 +64,6 @@
59
64
  14210,
60
65
  14220,
61
66
  14230,
62
- 14240
67
+ 14240,
68
+ 14301
63
69
  ];
@@ -669,4 +669,48 @@ var _obj;
669
669
  Description: "The timestamp of when the LED was changed."
670
670
  }
671
671
  }
672
+ }), /**
673
+ * Application Configuration (14301)
674
+ *
675
+ * Describes application configuration
676
+ */ _define_property(_obj, LwM2MObjectID.ApplicationConfiguration_14301, {
677
+ ObjectID: LwM2MObjectID.ApplicationConfiguration_14301,
678
+ ObjectVersion: "1.0",
679
+ Name: "Application Configuration",
680
+ Description: "Describes application configuration",
681
+ Resources: {
682
+ 0: {
683
+ ResourceID: 0,
684
+ Name: "Mode",
685
+ Mandatory: false,
686
+ Type: ResourceType.Integer,
687
+ Description: "The operation mode of the application, e.g. 0: \"real-time\", 1: \"interactive\", 2: \"low-power\".",
688
+ RangeEnumeration: {
689
+ min: 0,
690
+ max: 99
691
+ }
692
+ },
693
+ /**
694
+ * GNSSEnabled (Boolean)
695
+ *
696
+ * Whether to enabled the device's GNSS receiver.
697
+ */ 1: {
698
+ ResourceID: 1,
699
+ Name: "GNSSEnabled",
700
+ Mandatory: false,
701
+ Type: ResourceType.Boolean,
702
+ Description: "Whether to enabled the device's GNSS receiver."
703
+ },
704
+ /**
705
+ * Timestamp (Time)
706
+ *
707
+ * The timestamp of when the configuration was updated.
708
+ */ 99: {
709
+ ResourceID: 99,
710
+ Name: "Timestamp",
711
+ Mandatory: true,
712
+ Type: ResourceType.Time,
713
+ Description: "The timestamp of when the configuration was updated."
714
+ }
715
+ }
672
716
  }), _obj);
@@ -4,6 +4,5 @@ export var instanceTs = function(instance) {
4
4
  var definition = definitions[instance.ObjectID];
5
5
  var tsResourceId = timestampResources[definition.ObjectID]// All registered objects must have a timestamp resource
6
6
  ;
7
- var ts = instance.Resources[tsResourceId];
8
- return new Date(ts);
7
+ return instance.Resources[tsResourceId];
9
8
  };
@@ -9,8 +9,8 @@ void describe('instanceTs()', function() {
9
9
  Resources: {
10
10
  '0': 3.5399999618530273,
11
11
  '1': 4.168000221252441,
12
- '99': '2024-02-23T10:18:20.474Z'
12
+ '99': 1708683500474
13
13
  }
14
- }).getTime(), new Date('2024-02-23T10:18:20.474Z').getTime());
14
+ }), 1708683500474);
15
15
  });
16
16
  });
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Application Configuration (14301)
3
+ *
4
+ * Describes application configuration
5
+ */ export { };
@@ -1,4 +1,4 @@
1
- import { NumberResource, StringResource, DateResource, OptionalResource, validateInstance } from "../validation.js";
1
+ import { NumberResource, StringResource, TimeResource, OptionalResource, validateInstance } from "../validation.js";
2
2
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
3
3
  /**
4
4
  * Validate Geolocation (14201)
@@ -9,7 +9,7 @@ import { LwM2MObjectID } from "../LwM2MObjectID.js";
9
9
  0: NumberResource,
10
10
  1: NumberResource,
11
11
  6: StringResource,
12
- 99: DateResource,
12
+ 99: TimeResource,
13
13
  2: OptionalResource(NumberResource),
14
14
  3: OptionalResource(NumberResource),
15
15
  4: OptionalResource(NumberResource),
@@ -1,4 +1,4 @@
1
- import { DateResource, NumberResource, OptionalResource, validateInstance } from "../validation.js";
1
+ import { TimeResource, NumberResource, OptionalResource, validateInstance } from "../validation.js";
2
2
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
3
3
  /**
4
4
  * Validate Battery and Power (14202)
@@ -6,7 +6,7 @@ import { LwM2MObjectID } from "../LwM2MObjectID.js";
6
6
  * Ensures the given object is an LwM2M object according to the schema 14202.xml.
7
7
  */ export var validate14202 = function(o) {
8
8
  return validateInstance(LwM2MObjectID.BatteryAndPower_14202, "1.0", {
9
- 99: DateResource,
9
+ 99: TimeResource,
10
10
  0: OptionalResource(NumberResource),
11
11
  1: OptionalResource(NumberResource),
12
12
  2: OptionalResource(NumberResource),
@@ -1,4 +1,4 @@
1
- import { DateResource, StringResource, OptionalResource, NumberResource, validateInstance } from "../validation.js";
1
+ import { TimeResource, StringResource, OptionalResource, NumberResource, validateInstance } from "../validation.js";
2
2
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
3
3
  /**
4
4
  * Validate Connection information (14203)
@@ -6,7 +6,7 @@ import { LwM2MObjectID } from "../LwM2MObjectID.js";
6
6
  * Ensures the given object is an LwM2M object according to the schema 14203.xml.
7
7
  */ export var validate14203 = function(o) {
8
8
  return validateInstance(LwM2MObjectID.ConnectionInformation_14203, "1.0", {
9
- 99: DateResource,
9
+ 99: TimeResource,
10
10
  0: OptionalResource(StringResource),
11
11
  1: OptionalResource(NumberResource),
12
12
  2: OptionalResource(NumberResource),
@@ -1,4 +1,4 @@
1
- import { StringResource, DateResource, OptionalResource, validateInstance } from "../validation.js";
1
+ import { StringResource, TimeResource, OptionalResource, validateInstance } from "../validation.js";
2
2
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
3
3
  /**
4
4
  * Validate Device information (14204)
@@ -10,7 +10,7 @@ import { LwM2MObjectID } from "../LwM2MObjectID.js";
10
10
  2: StringResource,
11
11
  3: StringResource,
12
12
  4: StringResource,
13
- 99: DateResource,
13
+ 99: TimeResource,
14
14
  1: OptionalResource(StringResource),
15
15
  5: OptionalResource(StringResource)
16
16
  })(o);
@@ -1,4 +1,4 @@
1
- import { DateResource, NumberResource, OptionalResource, validateInstance } from "../validation.js";
1
+ import { TimeResource, NumberResource, OptionalResource, validateInstance } from "../validation.js";
2
2
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
3
3
  /**
4
4
  * Validate Environment (14205)
@@ -6,7 +6,7 @@ import { LwM2MObjectID } from "../LwM2MObjectID.js";
6
6
  * Ensures the given object is an LwM2M object according to the schema 14205.xml.
7
7
  */ export var validate14205 = function(o) {
8
8
  return validateInstance(LwM2MObjectID.Environment_14205, "1.0", {
9
- 99: DateResource,
9
+ 99: TimeResource,
10
10
  0: OptionalResource(NumberResource),
11
11
  1: OptionalResource(NumberResource),
12
12
  2: OptionalResource(NumberResource),
@@ -1,4 +1,4 @@
1
- import { NumberResource, DateResource, OptionalResource, validateInstance } from "../validation.js";
1
+ import { NumberResource, TimeResource, OptionalResource, validateInstance } from "../validation.js";
2
2
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
3
3
  /**
4
4
  * Validate Solar charge (14210)
@@ -7,7 +7,7 @@ import { LwM2MObjectID } from "../LwM2MObjectID.js";
7
7
  */ export var validate14210 = function(o) {
8
8
  return validateInstance(LwM2MObjectID.SolarCharge_14210, "1.0", {
9
9
  0: NumberResource,
10
- 99: DateResource,
10
+ 99: TimeResource,
11
11
  1: OptionalResource(NumberResource)
12
12
  })(o);
13
13
  };
@@ -1,4 +1,4 @@
1
- import { NumberResource, DateResource, validateInstance } from "../validation.js";
1
+ import { NumberResource, TimeResource, validateInstance } from "../validation.js";
2
2
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
3
3
  /**
4
4
  * Validate Button press (14220)
@@ -7,6 +7,6 @@ import { LwM2MObjectID } from "../LwM2MObjectID.js";
7
7
  */ export var validate14220 = function(o) {
8
8
  return validateInstance(LwM2MObjectID.ButtonPress_14220, "1.0", {
9
9
  0: NumberResource,
10
- 99: DateResource
10
+ 99: TimeResource
11
11
  })(o);
12
12
  };
@@ -1,4 +1,4 @@
1
- import { NumberResource, StringResource, DateResource, validateInstance } from "../validation.js";
1
+ import { NumberResource, StringResource, TimeResource, validateInstance } from "../validation.js";
2
2
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
3
3
  /**
4
4
  * Validate Sea Water Level (14230)
@@ -8,6 +8,6 @@ import { LwM2MObjectID } from "../LwM2MObjectID.js";
8
8
  return validateInstance(LwM2MObjectID.SeaWaterLevel_14230, "1.0", {
9
9
  0: NumberResource,
10
10
  1: StringResource,
11
- 99: DateResource
11
+ 99: TimeResource
12
12
  })(o);
13
13
  };
@@ -1,4 +1,4 @@
1
- import { NumberResource, DateResource, validateInstance } from "../validation.js";
1
+ import { NumberResource, TimeResource, validateInstance } from "../validation.js";
2
2
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
3
3
  /**
4
4
  * Validate RGB LED (14240)
@@ -9,6 +9,6 @@ import { LwM2MObjectID } from "../LwM2MObjectID.js";
9
9
  0: NumberResource,
10
10
  1: NumberResource,
11
11
  2: NumberResource,
12
- 99: DateResource
12
+ 99: TimeResource
13
13
  })(o);
14
14
  };
@@ -0,0 +1,13 @@
1
+ import { TimeResource, NumberResource, OptionalResource, BooleanResource, validateInstance } from "../validation.js";
2
+ import { LwM2MObjectID } from "../LwM2MObjectID.js";
3
+ /**
4
+ * Validate Application Configuration (14301)
5
+ *
6
+ * Ensures the given object is an LwM2M object according to the schema 14301.xml.
7
+ */ export var validate14301 = function(o) {
8
+ return validateInstance(LwM2MObjectID.ApplicationConfiguration_14301, "1.0", {
9
+ 99: TimeResource,
10
+ 0: OptionalResource(NumberResource),
11
+ 1: OptionalResource(BooleanResource)
12
+ })(o);
13
+ };
@@ -7,3 +7,4 @@ export { validate14210 } from "./object/validate14210.js";
7
7
  export { validate14220 } from "./object/validate14220.js";
8
8
  export { validate14230 } from "./object/validate14230.js";
9
9
  export { validate14240 } from "./object/validate14240.js";
10
+ export { validate14301 } from "./object/validate14301.js";
@@ -9,5 +9,6 @@
9
9
  14210: 99,
10
10
  14220: 99,
11
11
  14230: 99,
12
- 14240: 99
12
+ 14240: 99,
13
+ 14301: 99
13
14
  };
@@ -14,7 +14,7 @@ void describe('validate()', function() {
14
14
  '1': 6.151946,
15
15
  '6': 'Fixed',
16
16
  '3': 1,
17
- '99': new Date(1710147413003)
17
+ '99': 1710147413003
18
18
  }
19
19
  };
20
20
  var maybeValid = v(object);
@@ -6,13 +6,6 @@ function _array_like_to_array(arr, len) {
6
6
  function _array_with_holes(arr) {
7
7
  if (Array.isArray(arr)) return arr;
8
8
  }
9
- function _instanceof(left, right) {
10
- if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
11
- return !!right[Symbol.hasInstance](left);
12
- } else {
13
- return left instanceof right;
14
- }
15
- }
16
9
  function _iterable_to_array_limit(arr, i) {
17
10
  var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
18
11
  if (_i == null) return;
@@ -84,13 +77,12 @@ export var isLwM2MObject = function(object) {
84
77
  })) === null || _Object_keys_find === void 0 ? void 0 : _Object_keys_find.length) !== null && _Object_keys_find_length !== void 0 ? _Object_keys_find_length : 0) > 0) return error("All resource IDs must be a number");
85
78
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
86
79
  try {
87
- // All values must be number, string, boolean, or Date
80
+ // All values must be number, string, boolean
88
81
  for(var _iterator = Object.values(object.Resources)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
89
82
  var v = _step.value;
90
83
  if (typeof v === 'string') continue;
91
84
  if (typeof v === 'boolean') continue;
92
85
  if (typeof v === 'number') continue;
93
- if (typeof v === 'object' && _instanceof(v, Date)) continue;
94
86
  return error("Invalid value type ".concat(typeof v === "undefined" ? "undefined" : _type_of(v)));
95
87
  }
96
88
  } catch (err) {
@@ -158,12 +150,12 @@ export var validateInstance = function(ObjectID, ObjectVersion, Resources) {
158
150
  export var NumberResource = function(r) {
159
151
  return typeof r === 'number';
160
152
  };
153
+ export var TimeResource = function(r) {
154
+ return NumberResource(r) && r > 1700000000000 && r < 9999999999999;
155
+ };
161
156
  export var StringResource = function(r) {
162
157
  return typeof r === 'string';
163
158
  };
164
- export var DateResource = function(r) {
165
- return typeof r === 'object' && _instanceof(r, Date);
166
- };
167
159
  export var BooleanResource = function(r) {
168
160
  return typeof r === 'boolean';
169
161
  };
@@ -8,6 +8,7 @@ import { validate14210 } from "./object/validate14210.js";
8
8
  import { validate14220 } from "./object/validate14220.js";
9
9
  import { validate14230 } from "./object/validate14230.js";
10
10
  import { validate14240 } from "./object/validate14240.js";
11
+ import { validate14301 } from "./object/validate14301.js";
11
12
  /**
12
13
  * Contains the validators for all registered LwM2M objects.
13
14
  */ export var validators = new Map();
@@ -20,3 +21,4 @@ validators.set(LwM2MObjectID.SolarCharge_14210, validate14210);
20
21
  validators.set(LwM2MObjectID.ButtonPress_14220, validate14220);
21
22
  validators.set(LwM2MObjectID.SeaWaterLevel_14230, validate14230);
22
23
  validators.set(LwM2MObjectID.RGBLED_14240, validate14240);
24
+ validators.set(LwM2MObjectID.ApplicationConfiguration_14301, validate14301);
@@ -107,7 +107,7 @@ import { ResourceType } from '../lwm2m/LWM2MObjectInfo.js';
107
107
  senML.push((_obj = {
108
108
  bn: "".concat(lwm2m.ObjectID, "/").concat((_lwm2m_ObjectInstanceID = lwm2m.ObjectInstanceID) !== null && _lwm2m_ObjectInstanceID !== void 0 ? _lwm2m_ObjectInstanceID : 0, "/"),
109
109
  n: first[0]
110
- }, _define_property(_obj, firstKey, first[1]), _define_property(_obj, "bt", i.getTime()), _obj));
110
+ }, _define_property(_obj, firstKey, first[1]), _define_property(_obj, "bt", i), _obj));
111
111
  }
112
112
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
113
113
  try {
@@ -12,7 +12,7 @@ void describe('lwm2mToSenML()', function() {
12
12
  '1': 6.151946,
13
13
  '6': 'Fixed',
14
14
  '3': 1,
15
- '99': new Date(1710147413003)
15
+ '99': 1710147413003
16
16
  }
17
17
  };
18
18
  var level1 = {
@@ -21,7 +21,7 @@ void describe('lwm2mToSenML()', function() {
21
21
  Resources: {
22
22
  '0': 84.3,
23
23
  '1': 'AES',
24
- '99': new Date(1710140400000)
24
+ '99': 1710140400000
25
25
  }
26
26
  };
27
27
  var level2 = {
@@ -30,7 +30,7 @@ void describe('lwm2mToSenML()', function() {
30
30
  Resources: {
31
31
  '0': 140.4,
32
32
  '1': 'AES',
33
- '99': new Date(1710144000000)
33
+ '99': 1710144000000
34
34
  }
35
35
  };
36
36
  var level3 = {
@@ -40,7 +40,7 @@ void describe('lwm2mToSenML()', function() {
40
40
  Resources: {
41
41
  '0': 140.7,
42
42
  '1': 'AES',
43
- '99': new Date(1710144001000)
43
+ '99': 1710144001000
44
44
  }
45
45
  };
46
46
  var lwm2m = [
@@ -54,12 +54,12 @@ import { timestampResources } from '../lwm2m/timestampResources.js';
54
54
  import { parseResourceId } from './parseResourceId.js';
55
55
  import { hasValue } from './hasValue.js';
56
56
  var isInfoForDifferentInstance = function(currentObject, resourceID, currentBaseTime, tsRes) {
57
- var _currentObject_Resources_tsRes, _currentObject_Resources;
57
+ var _currentObject_Resources;
58
58
  if (currentObject === undefined) return true;
59
59
  if (currentObject.ObjectID !== resourceID.ObjectID) return true;
60
60
  var _currentObject_ObjectInstanceID;
61
61
  if (((_currentObject_ObjectInstanceID = currentObject.ObjectInstanceID) !== null && _currentObject_ObjectInstanceID !== void 0 ? _currentObject_ObjectInstanceID : 0) !== resourceID.ObjectInstanceID) return true;
62
- if (currentBaseTime !== ((_currentObject_Resources = currentObject.Resources) === null || _currentObject_Resources === void 0 ? void 0 : (_currentObject_Resources_tsRes = _currentObject_Resources[tsRes]) === null || _currentObject_Resources_tsRes === void 0 ? void 0 : _currentObject_Resources_tsRes.getTime())) return true;
62
+ if (currentBaseTime !== ((_currentObject_Resources = currentObject.Resources) === null || _currentObject_Resources === void 0 ? void 0 : _currentObject_Resources[tsRes])) return true;
63
63
  return false;
64
64
  };
65
65
  var getValue = function(measurement) {
@@ -106,7 +106,7 @@ export var senMLtoLwM2M = function(senML) {
106
106
  }
107
107
  currentObject = {
108
108
  ObjectID: resourceId.ObjectID,
109
- Resources: _define_property({}, tsRes, new Date(currentBaseTime))
109
+ Resources: _define_property({}, tsRes, currentBaseTime)
110
110
  };
111
111
  if (resourceId.ObjectInstanceID !== 0) currentObject.ObjectInstanceID = resourceId.ObjectInstanceID;
112
112
  if ('blv' in item) currentObject.ObjectVersion = item.blv;
@@ -44,7 +44,7 @@ void describe('senMLtoLwM2M()', function() {
44
44
  3: 17.74077033996582,
45
45
  4: 26.376304626464844,
46
46
  5: 359.1545715332,
47
- 99: new Date(1698155694999)
47
+ 99: 1698155694999
48
48
  }
49
49
  }
50
50
  ];
@@ -98,7 +98,7 @@ void describe('senMLtoLwM2M()', function() {
98
98
  4: 56879116,
99
99
  5: 24001,
100
100
  6: '10.160.243.113',
101
- 99: new Date(1676369307222)
101
+ 99: 1676369307222
102
102
  }
103
103
  }
104
104
  ];
@@ -158,7 +158,7 @@ void describe('senMLtoLwM2M()', function() {
158
158
  5: 24202,
159
159
  6: '100.81.95.75',
160
160
  11: 7,
161
- 99: new Date(1699049665511)
161
+ 99: 1699049665511
162
162
  }
163
163
  }
164
164
  ];
@@ -197,7 +197,7 @@ void describe('senMLtoLwM2M()', function() {
197
197
  ObjectID: 14205,
198
198
  Resources: {
199
199
  0: 21,
200
- 99: new Date(1699049600000)
200
+ 99: 1699049600000
201
201
  }
202
202
  },
203
203
  {
@@ -205,14 +205,14 @@ void describe('senMLtoLwM2M()', function() {
205
205
  ObjectInstanceID: 1,
206
206
  Resources: {
207
207
  0: 31,
208
- 99: new Date(1699049600000)
208
+ 99: 1699049600000
209
209
  }
210
210
  },
211
211
  {
212
212
  ObjectID: 14205,
213
213
  Resources: {
214
214
  0: 22,
215
- 99: new Date(1699049700000)
215
+ 99: 1699049700000
216
216
  }
217
217
  },
218
218
  {
@@ -220,7 +220,7 @@ void describe('senMLtoLwM2M()', function() {
220
220
  ObjectInstanceID: 1,
221
221
  Resources: {
222
222
  0: 32,
223
- 99: new Date(1699049700000)
223
+ 99: 1699049700000
224
224
  }
225
225
  }
226
226
  ];
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <LWM2M xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://openmobilealliance.org/tech/profiles/LWM2M-v1_1.xsd">
3
+ <Object ObjectType="MODefinition">
4
+ <Name>Application Configuration</Name>
5
+ <Description1><![CDATA[Describes application configuration]]></Description1>
6
+ <ObjectID>14301</ObjectID>
7
+ <ObjectURN>urn:oma:lwm2m:x:14301</ObjectURN>
8
+ <MultipleInstances>Multiple</MultipleInstances>
9
+ <Mandatory>Optional</Mandatory>
10
+ <Resources>
11
+ <Item ID="0">
12
+ <Name>Mode</Name>
13
+ <Operations>RW</Operations>
14
+ <MultipleInstances>Single</MultipleInstances>
15
+ <Mandatory>Optional</Mandatory>
16
+ <Type>Integer</Type>
17
+ <RangeEnumeration>0..99</RangeEnumeration>
18
+ <Units/>
19
+ <Description><![CDATA[The operation mode of the application, e.g. 0: "real-time", 1: "interactive", 2: "low-power".]]></Description>
20
+ </Item>
21
+ <Item ID="1">
22
+ <Name>GNSSEnabled</Name>
23
+ <Operations>RW</Operations>
24
+ <MultipleInstances>Single</MultipleInstances>
25
+ <Mandatory>Optional</Mandatory>
26
+ <Type>Boolean</Type>
27
+ <RangeEnumeration/>
28
+ <Units/>
29
+ <Description><![CDATA[Whether to enabled the device's GNSS receiver.]]></Description>
30
+ </Item>
31
+ <Item ID="99">
32
+ <Name>Timestamp</Name>
33
+ <Operations>R</Operations>
34
+ <MultipleInstances>Single</MultipleInstances>
35
+ <Mandatory>Mandatory</Mandatory>
36
+ <Type>Time</Type>
37
+ <RangeEnumeration/>
38
+ <Units/>
39
+ <Description><![CDATA[The timestamp of when the configuration was updated.]]></Description>
40
+ </Item>
41
+ </Resources>
42
+ <Description2/>
43
+ </Object>
44
+ </LWM2M>
@@ -55,7 +55,13 @@ export enum LwM2MObjectID {
55
55
  *
56
56
  * Describes an RGB LED. Use different instances to address different LEDs.
57
57
  */
58
- RGBLED_14240 = 14240
58
+ RGBLED_14240 = 14240,
59
+ /**
60
+ * Application Configuration (14301)
61
+ *
62
+ * Describes application configuration
63
+ */
64
+ ApplicationConfiguration_14301 = 14301
59
65
  }
60
66
  /**
61
67
  * The LwM2M Object IDs defined in this repo.
@@ -78,4 +84,6 @@ export const LwM2MObjectIDs = [
78
84
  // Sea Water Level (14230)
79
85
  LwM2MObjectID.SeaWaterLevel_14230,
80
86
  // RGB LED (14240)
81
- LwM2MObjectID.RGBLED_14240];
87
+ LwM2MObjectID.RGBLED_14240,
88
+ // Application Configuration (14301)
89
+ LwM2MObjectID.ApplicationConfiguration_14301];
@@ -1,6 +1,6 @@
1
1
  import type { LwM2MObjectID } from './LwM2MObjectID.js'
2
2
 
3
- export type LwM2MResourceValue = string | number | boolean | Date
3
+ export type LwM2MResourceValue = string | number | boolean
4
4
  type GenericLwM2MObjectInstance = {
5
5
  ObjectID: LwM2MObjectID
6
6
  /**
@@ -312,4 +312,27 @@ export const definitions: Record<LwM2MObjectID, LWM2MObjectInfo> = { /**
312
312
  *
313
313
  * The timestamp of when the LED was changed.
314
314
  */
315
- 99: { ResourceID: 99, Name: "Timestamp", Mandatory: true, Type: ResourceType.Time, Description: "The timestamp of when the LED was changed." } } } };
315
+ 99: { ResourceID: 99, Name: "Timestamp", Mandatory: true, Type: ResourceType.Time, Description: "The timestamp of when the LED was changed." } } }, /**
316
+ * Application Configuration (14301)
317
+ *
318
+ * Describes application configuration
319
+ */
320
+ [LwM2MObjectID.ApplicationConfiguration_14301]: { ObjectID: LwM2MObjectID.ApplicationConfiguration_14301, ObjectVersion: "1.0", Name: "Application Configuration", Description: "Describes application configuration", Resources: { /**
321
+ * Mode (Integer)
322
+ *
323
+ * The operation mode of the application, e.g. 0: "real-time", 1: "interactive", 2: "low-power".
324
+ *
325
+ * Minimum: 0
326
+ * Maximum: 99
327
+ */
328
+ 0: { ResourceID: 0, Name: "Mode", Mandatory: false, Type: ResourceType.Integer, Description: "The operation mode of the application, e.g. 0: \"real-time\", 1: \"interactive\", 2: \"low-power\".", RangeEnumeration: { min: 0, max: 99 } }, /**
329
+ * GNSSEnabled (Boolean)
330
+ *
331
+ * Whether to enabled the device's GNSS receiver.
332
+ */
333
+ 1: { ResourceID: 1, Name: "GNSSEnabled", Mandatory: false, Type: ResourceType.Boolean, Description: "Whether to enabled the device's GNSS receiver." }, /**
334
+ * Timestamp (Time)
335
+ *
336
+ * The timestamp of when the configuration was updated.
337
+ */
338
+ 99: { ResourceID: 99, Name: "Timestamp", Mandatory: true, Type: ResourceType.Time, Description: "The timestamp of when the configuration was updated." } } } };
@@ -11,9 +11,9 @@ void describe('instanceTs()', () => {
11
11
  Resources: {
12
12
  '0': 3.5399999618530273,
13
13
  '1': 4.168000221252441,
14
- '99': '2024-02-23T10:18:20.474Z',
14
+ '99': 1708683500474,
15
15
  },
16
- }).getTime(),
17
- new Date('2024-02-23T10:18:20.474Z').getTime(),
16
+ }),
17
+ 1708683500474,
18
18
  ))
19
19
  })
@@ -2,9 +2,8 @@ import type { LwM2MObjectInstance } from './LwM2MObjectInstance.js'
2
2
  import { definitions } from './definitions.js'
3
3
  import { timestampResources } from './timestampResources.js'
4
4
 
5
- export const instanceTs = (instance: LwM2MObjectInstance): Date => {
5
+ export const instanceTs = (instance: LwM2MObjectInstance): number => {
6
6
  const definition = definitions[instance.ObjectID]
7
7
  const tsResourceId = timestampResources[definition.ObjectID] as number // All registered objects must have a timestamp resource
8
- const ts = instance.Resources[tsResourceId] as string
9
- return new Date(ts)
8
+ return instance.Resources[tsResourceId] as number
10
9
  }
@@ -38,7 +38,7 @@ export type Geolocation_14201 = LwM2MObject<{
38
38
  *
39
39
  * The timestamp of when the location measurement was performed.
40
40
  */
41
- 99: Date;
41
+ 99: number;
42
42
  /**
43
43
  * Altitude (m)
44
44
  *
@@ -14,7 +14,7 @@ export type BatteryAndPower_14202 = LwM2MObject<{
14
14
  *
15
15
  * The timestamp of when the measurement was performed.
16
16
  */
17
- 99: Date;
17
+ 99: number;
18
18
  /**
19
19
  * State of charge (%)
20
20
  *
@@ -14,7 +14,7 @@ export type ConnectionInformation_14203 = LwM2MObject<{
14
14
  *
15
15
  * The timestamp of when the measurement was performed.
16
16
  */
17
- 99: Date;
17
+ 99: number;
18
18
  /**
19
19
  * Network mode
20
20
  *
@@ -38,7 +38,7 @@ export type DeviceInformation_14204 = LwM2MObject<{
38
38
  *
39
39
  * The timestamp of when the measurement was performed.
40
40
  */
41
- 99: Date;
41
+ 99: number;
42
42
  /**
43
43
  * SIM ICCID
44
44
  *
@@ -14,7 +14,7 @@ export type Environment_14205 = LwM2MObject<{
14
14
  *
15
15
  * The timestamp of when the measurement was performed.
16
16
  */
17
- 99: Date;
17
+ 99: number;
18
18
  /**
19
19
  * Temperature (°C)
20
20
  *
@@ -20,7 +20,7 @@ export type SolarCharge_14210 = LwM2MObject<{
20
20
  *
21
21
  * The timestamp of when the measurement was performed.
22
22
  */
23
- 99: Date;
23
+ 99: number;
24
24
  /**
25
25
  * Voltage (V)
26
26
  *
@@ -20,6 +20,6 @@ export type ButtonPress_14220 = LwM2MObject<{
20
20
  *
21
21
  * The timestamp of when the button was pressed.
22
22
  */
23
- 99: Date;
23
+ 99: number;
24
24
  };
25
25
  }>;
@@ -26,6 +26,6 @@ export type SeaWaterLevel_14230 = LwM2MObject<{
26
26
  *
27
27
  * The timestamp of when the observation was made.
28
28
  */
29
- 99: Date;
29
+ 99: number;
30
30
  };
31
31
  }>;
@@ -41,6 +41,6 @@ export type RGBLED_14240 = LwM2MObject<{
41
41
  *
42
42
  * The timestamp of when the LED was changed.
43
43
  */
44
- 99: Date;
44
+ 99: number;
45
45
  };
46
46
  }>;
@@ -0,0 +1,34 @@
1
+ import type { LwM2MObject } from "../LwM2MObject.js";
2
+ import { LwM2MObjectID } from "../LwM2MObjectID.js";
3
+ /**
4
+ * Application Configuration (14301)
5
+ *
6
+ * Describes application configuration
7
+ */
8
+ export type ApplicationConfiguration_14301 = LwM2MObject<{
9
+ ObjectID: LwM2MObjectID.ApplicationConfiguration_14301;
10
+ ObjectVersion: "1.0";
11
+ Resources: {
12
+ /**
13
+ * Timestamp
14
+ *
15
+ * The timestamp of when the configuration was updated.
16
+ */
17
+ 99: number;
18
+ /**
19
+ * Mode
20
+ *
21
+ * The operation mode of the application, e.g. 0: "real-time", 1: "interactive", 2: "low-power".
22
+ *
23
+ * Minimum: 0
24
+ * Maximum: 99
25
+ */
26
+ 0?: number;
27
+ /**
28
+ * GNSSEnabled
29
+ *
30
+ * Whether to enabled the device's GNSS receiver.
31
+ */
32
+ 1?: boolean;
33
+ };
34
+ }>;
@@ -1,5 +1,5 @@
1
1
  import type { LwM2MObjectInstance } from "../LwM2MObjectInstance.js";
2
- import { NumberResource, StringResource, DateResource, OptionalResource, validateInstance } from "../validation.js";
2
+ import { NumberResource, StringResource, TimeResource, OptionalResource, validateInstance } from "../validation.js";
3
3
  import type { Geolocation_14201 } from "../objects.js";
4
4
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
5
5
  /**
@@ -11,4 +11,4 @@ export const validate14201 = (o: unknown): {
11
11
  error: Error;
12
12
  } | {
13
13
  object: LwM2MObjectInstance<Geolocation_14201>;
14
- } => validateInstance<Geolocation_14201>(LwM2MObjectID.Geolocation_14201, "1.0", { 0: NumberResource, 1: NumberResource, 6: StringResource, 99: DateResource, 2: OptionalResource(NumberResource), 3: OptionalResource(NumberResource), 4: OptionalResource(NumberResource), 5: OptionalResource(NumberResource) })(o);
14
+ } => validateInstance<Geolocation_14201>(LwM2MObjectID.Geolocation_14201, "1.0", { 0: NumberResource, 1: NumberResource, 6: StringResource, 99: TimeResource, 2: OptionalResource(NumberResource), 3: OptionalResource(NumberResource), 4: OptionalResource(NumberResource), 5: OptionalResource(NumberResource) })(o);
@@ -1,5 +1,5 @@
1
1
  import type { LwM2MObjectInstance } from "../LwM2MObjectInstance.js";
2
- import { DateResource, NumberResource, OptionalResource, validateInstance } from "../validation.js";
2
+ import { TimeResource, NumberResource, OptionalResource, validateInstance } from "../validation.js";
3
3
  import type { BatteryAndPower_14202 } from "../objects.js";
4
4
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
5
5
  /**
@@ -11,4 +11,4 @@ export const validate14202 = (o: unknown): {
11
11
  error: Error;
12
12
  } | {
13
13
  object: LwM2MObjectInstance<BatteryAndPower_14202>;
14
- } => validateInstance<BatteryAndPower_14202>(LwM2MObjectID.BatteryAndPower_14202, "1.0", { 99: DateResource, 0: OptionalResource(NumberResource), 1: OptionalResource(NumberResource), 2: OptionalResource(NumberResource), 3: OptionalResource(NumberResource), 4: OptionalResource(NumberResource), 5: OptionalResource(NumberResource) })(o);
14
+ } => validateInstance<BatteryAndPower_14202>(LwM2MObjectID.BatteryAndPower_14202, "1.0", { 99: TimeResource, 0: OptionalResource(NumberResource), 1: OptionalResource(NumberResource), 2: OptionalResource(NumberResource), 3: OptionalResource(NumberResource), 4: OptionalResource(NumberResource), 5: OptionalResource(NumberResource) })(o);
@@ -1,5 +1,5 @@
1
1
  import type { LwM2MObjectInstance } from "../LwM2MObjectInstance.js";
2
- import { DateResource, StringResource, OptionalResource, NumberResource, validateInstance } from "../validation.js";
2
+ import { TimeResource, StringResource, OptionalResource, NumberResource, validateInstance } from "../validation.js";
3
3
  import type { ConnectionInformation_14203 } from "../objects.js";
4
4
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
5
5
  /**
@@ -11,4 +11,4 @@ export const validate14203 = (o: unknown): {
11
11
  error: Error;
12
12
  } | {
13
13
  object: LwM2MObjectInstance<ConnectionInformation_14203>;
14
- } => validateInstance<ConnectionInformation_14203>(LwM2MObjectID.ConnectionInformation_14203, "1.0", { 99: DateResource, 0: OptionalResource(StringResource), 1: OptionalResource(NumberResource), 2: OptionalResource(NumberResource), 3: OptionalResource(NumberResource), 4: OptionalResource(NumberResource), 5: OptionalResource(NumberResource), 6: OptionalResource(StringResource), 11: OptionalResource(NumberResource) })(o);
14
+ } => validateInstance<ConnectionInformation_14203>(LwM2MObjectID.ConnectionInformation_14203, "1.0", { 99: TimeResource, 0: OptionalResource(StringResource), 1: OptionalResource(NumberResource), 2: OptionalResource(NumberResource), 3: OptionalResource(NumberResource), 4: OptionalResource(NumberResource), 5: OptionalResource(NumberResource), 6: OptionalResource(StringResource), 11: OptionalResource(NumberResource) })(o);
@@ -1,5 +1,5 @@
1
1
  import type { LwM2MObjectInstance } from "../LwM2MObjectInstance.js";
2
- import { StringResource, DateResource, OptionalResource, validateInstance } from "../validation.js";
2
+ import { StringResource, TimeResource, OptionalResource, validateInstance } from "../validation.js";
3
3
  import type { DeviceInformation_14204 } from "../objects.js";
4
4
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
5
5
  /**
@@ -11,4 +11,4 @@ export const validate14204 = (o: unknown): {
11
11
  error: Error;
12
12
  } | {
13
13
  object: LwM2MObjectInstance<DeviceInformation_14204>;
14
- } => validateInstance<DeviceInformation_14204>(LwM2MObjectID.DeviceInformation_14204, "1.0", { 0: StringResource, 2: StringResource, 3: StringResource, 4: StringResource, 99: DateResource, 1: OptionalResource(StringResource), 5: OptionalResource(StringResource) })(o);
14
+ } => validateInstance<DeviceInformation_14204>(LwM2MObjectID.DeviceInformation_14204, "1.0", { 0: StringResource, 2: StringResource, 3: StringResource, 4: StringResource, 99: TimeResource, 1: OptionalResource(StringResource), 5: OptionalResource(StringResource) })(o);
@@ -1,5 +1,5 @@
1
1
  import type { LwM2MObjectInstance } from "../LwM2MObjectInstance.js";
2
- import { DateResource, NumberResource, OptionalResource, validateInstance } from "../validation.js";
2
+ import { TimeResource, NumberResource, OptionalResource, validateInstance } from "../validation.js";
3
3
  import type { Environment_14205 } from "../objects.js";
4
4
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
5
5
  /**
@@ -11,4 +11,4 @@ export const validate14205 = (o: unknown): {
11
11
  error: Error;
12
12
  } | {
13
13
  object: LwM2MObjectInstance<Environment_14205>;
14
- } => validateInstance<Environment_14205>(LwM2MObjectID.Environment_14205, "1.0", { 99: DateResource, 0: OptionalResource(NumberResource), 1: OptionalResource(NumberResource), 2: OptionalResource(NumberResource), 10: OptionalResource(NumberResource) })(o);
14
+ } => validateInstance<Environment_14205>(LwM2MObjectID.Environment_14205, "1.0", { 99: TimeResource, 0: OptionalResource(NumberResource), 1: OptionalResource(NumberResource), 2: OptionalResource(NumberResource), 10: OptionalResource(NumberResource) })(o);
@@ -1,5 +1,5 @@
1
1
  import type { LwM2MObjectInstance } from "../LwM2MObjectInstance.js";
2
- import { NumberResource, DateResource, OptionalResource, validateInstance } from "../validation.js";
2
+ import { NumberResource, TimeResource, OptionalResource, validateInstance } from "../validation.js";
3
3
  import type { SolarCharge_14210 } from "../objects.js";
4
4
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
5
5
  /**
@@ -11,4 +11,4 @@ export const validate14210 = (o: unknown): {
11
11
  error: Error;
12
12
  } | {
13
13
  object: LwM2MObjectInstance<SolarCharge_14210>;
14
- } => validateInstance<SolarCharge_14210>(LwM2MObjectID.SolarCharge_14210, "1.0", { 0: NumberResource, 99: DateResource, 1: OptionalResource(NumberResource) })(o);
14
+ } => validateInstance<SolarCharge_14210>(LwM2MObjectID.SolarCharge_14210, "1.0", { 0: NumberResource, 99: TimeResource, 1: OptionalResource(NumberResource) })(o);
@@ -1,5 +1,5 @@
1
1
  import type { LwM2MObjectInstance } from "../LwM2MObjectInstance.js";
2
- import { NumberResource, DateResource, validateInstance } from "../validation.js";
2
+ import { NumberResource, TimeResource, validateInstance } from "../validation.js";
3
3
  import type { ButtonPress_14220 } from "../objects.js";
4
4
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
5
5
  /**
@@ -11,4 +11,4 @@ export const validate14220 = (o: unknown): {
11
11
  error: Error;
12
12
  } | {
13
13
  object: LwM2MObjectInstance<ButtonPress_14220>;
14
- } => validateInstance<ButtonPress_14220>(LwM2MObjectID.ButtonPress_14220, "1.0", { 0: NumberResource, 99: DateResource })(o);
14
+ } => validateInstance<ButtonPress_14220>(LwM2MObjectID.ButtonPress_14220, "1.0", { 0: NumberResource, 99: TimeResource })(o);
@@ -1,5 +1,5 @@
1
1
  import type { LwM2MObjectInstance } from "../LwM2MObjectInstance.js";
2
- import { NumberResource, StringResource, DateResource, validateInstance } from "../validation.js";
2
+ import { NumberResource, StringResource, TimeResource, validateInstance } from "../validation.js";
3
3
  import type { SeaWaterLevel_14230 } from "../objects.js";
4
4
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
5
5
  /**
@@ -11,4 +11,4 @@ export const validate14230 = (o: unknown): {
11
11
  error: Error;
12
12
  } | {
13
13
  object: LwM2MObjectInstance<SeaWaterLevel_14230>;
14
- } => validateInstance<SeaWaterLevel_14230>(LwM2MObjectID.SeaWaterLevel_14230, "1.0", { 0: NumberResource, 1: StringResource, 99: DateResource })(o);
14
+ } => validateInstance<SeaWaterLevel_14230>(LwM2MObjectID.SeaWaterLevel_14230, "1.0", { 0: NumberResource, 1: StringResource, 99: TimeResource })(o);
@@ -1,5 +1,5 @@
1
1
  import type { LwM2MObjectInstance } from "../LwM2MObjectInstance.js";
2
- import { NumberResource, DateResource, validateInstance } from "../validation.js";
2
+ import { NumberResource, TimeResource, validateInstance } from "../validation.js";
3
3
  import type { RGBLED_14240 } from "../objects.js";
4
4
  import { LwM2MObjectID } from "../LwM2MObjectID.js";
5
5
  /**
@@ -11,4 +11,4 @@ export const validate14240 = (o: unknown): {
11
11
  error: Error;
12
12
  } | {
13
13
  object: LwM2MObjectInstance<RGBLED_14240>;
14
- } => validateInstance<RGBLED_14240>(LwM2MObjectID.RGBLED_14240, "1.0", { 0: NumberResource, 1: NumberResource, 2: NumberResource, 99: DateResource })(o);
14
+ } => validateInstance<RGBLED_14240>(LwM2MObjectID.RGBLED_14240, "1.0", { 0: NumberResource, 1: NumberResource, 2: NumberResource, 99: TimeResource })(o);
@@ -0,0 +1,14 @@
1
+ import type { LwM2MObjectInstance } from "../LwM2MObjectInstance.js";
2
+ import { TimeResource, NumberResource, OptionalResource, BooleanResource, validateInstance } from "../validation.js";
3
+ import type { ApplicationConfiguration_14301 } from "../objects.js";
4
+ import { LwM2MObjectID } from "../LwM2MObjectID.js";
5
+ /**
6
+ * Validate Application Configuration (14301)
7
+ *
8
+ * Ensures the given object is an LwM2M object according to the schema 14301.xml.
9
+ */
10
+ export const validate14301 = (o: unknown): {
11
+ error: Error;
12
+ } | {
13
+ object: LwM2MObjectInstance<ApplicationConfiguration_14301>;
14
+ } => validateInstance<ApplicationConfiguration_14301>(LwM2MObjectID.ApplicationConfiguration_14301, "1.0", { 99: TimeResource, 0: OptionalResource(NumberResource), 1: OptionalResource(BooleanResource) })(o);
package/lwm2m/objects.ts CHANGED
@@ -15,4 +15,6 @@ export { validate14220 } from "./object/validate14220.js";
15
15
  export type { SeaWaterLevel_14230 } from "./object/14230.js";
16
16
  export { validate14230 } from "./object/validate14230.js";
17
17
  export type { RGBLED_14240 } from "./object/14240.js";
18
- export { validate14240 } from "./object/validate14240.js";
18
+ export { validate14240 } from "./object/validate14240.js";
19
+ export type { ApplicationConfiguration_14301 } from "./object/14301.js";
20
+ export { validate14301 } from "./object/validate14301.js";
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Contains the ID of the resource that defines the timestamp for each LwM2M object definition
3
3
  */
4
- export const timestampResources: Readonly<Record<number, number>> = { 14201: 99, 14202: 99, 14203: 99, 14204: 99, 14205: 99, 14210: 99, 14220: 99, 14230: 99, 14240: 99 };
4
+ export const timestampResources: Readonly<Record<number, number>> = { 14201: 99, 14202: 99, 14203: 99, 14204: 99, 14205: 99, 14210: 99, 14220: 99, 14230: 99, 14240: 99, 14301: 99 };
@@ -15,7 +15,7 @@ void describe('validate()', () => {
15
15
  '1': 6.151946,
16
16
  '6': 'Fixed',
17
17
  '3': 1,
18
- '99': new Date(1710147413003),
18
+ '99': 1710147413003,
19
19
  },
20
20
  }
21
21
  const maybeValid = v(object)
@@ -48,12 +48,11 @@ export const isLwM2MObject = (
48
48
  0
49
49
  )
50
50
  return error(`All resource IDs must be a number`)
51
- // All values must be number, string, boolean, or Date
51
+ // All values must be number, string, boolean
52
52
  for (const v of Object.values(object.Resources)) {
53
53
  if (typeof v === 'string') continue
54
54
  if (typeof v === 'boolean') continue
55
55
  if (typeof v === 'number') continue
56
- if (typeof v === 'object' && v instanceof Date) continue
57
56
  return error(`Invalid value type ${typeof v}`)
58
57
  }
59
58
  return { object: object as LwM2MObjectInstance }
@@ -90,9 +89,9 @@ export const validateInstance =
90
89
  }
91
90
 
92
91
  export const NumberResource = (r: unknown): r is number => typeof r === 'number'
92
+ export const TimeResource = (r: unknown): r is number =>
93
+ NumberResource(r) && r > 1700000000000 && r < 9999999999999
93
94
  export const StringResource = (r: unknown): r is string => typeof r === 'string'
94
- export const DateResource = (r: unknown): r is Date =>
95
- typeof r === 'object' && r instanceof Date
96
95
  export const BooleanResource = (r: unknown): r is boolean =>
97
96
  typeof r === 'boolean'
98
97
 
@@ -100,8 +99,8 @@ export const OptionalResource =
100
99
  (
101
100
  validator:
102
101
  | typeof NumberResource
102
+ | typeof TimeResource
103
103
  | typeof StringResource
104
- | typeof DateResource
105
104
  | typeof BooleanResource,
106
105
  ) =>
107
106
  (r: unknown): boolean =>
@@ -9,6 +9,7 @@ import { validate14210 } from "./object/validate14210.js";
9
9
  import { validate14220 } from "./object/validate14220.js";
10
10
  import { validate14230 } from "./object/validate14230.js";
11
11
  import { validate14240 } from "./object/validate14240.js";
12
+ import { validate14301 } from "./object/validate14301.js";
12
13
  /**
13
14
  * Contains the validators for all registered LwM2M objects.
14
15
  */
@@ -25,4 +26,5 @@ validators.set(LwM2MObjectID.Environment_14205, validate14205)
25
26
  validators.set(LwM2MObjectID.SolarCharge_14210, validate14210)
26
27
  validators.set(LwM2MObjectID.ButtonPress_14220, validate14220)
27
28
  validators.set(LwM2MObjectID.SeaWaterLevel_14230, validate14230)
28
- validators.set(LwM2MObjectID.RGBLED_14240, validate14240)
29
+ validators.set(LwM2MObjectID.RGBLED_14240, validate14240)
30
+ validators.set(LwM2MObjectID.ApplicationConfiguration_14301, validate14301)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hello.nrfcloud.com/proto-map",
3
- "version": "9.1.2",
3
+ "version": "10.0.0",
4
4
  "description": "Documents the communication protocol between devices, the hello.nrfcloud.com/map backend and web application",
5
5
  "type": "module",
6
6
  "exports": {
@@ -35,7 +35,7 @@
35
35
  "prepublishOnly": "./compile.sh"
36
36
  },
37
37
  "devDependencies": {
38
- "@bifravst/eslint-config-typescript": "6.1.0",
38
+ "@bifravst/eslint-config-typescript": "6.1.1",
39
39
  "@bifravst/prettier-config": "1.0.0",
40
40
  "@commitlint/config-conventional": "19.2.2",
41
41
  "@swc/cli": "0.3.12",
@@ -19,7 +19,7 @@ void describe('lwm2mToSenML()', () => {
19
19
  '1': 6.151946,
20
20
  '6': 'Fixed',
21
21
  '3': 1,
22
- '99': new Date(1710147413003),
22
+ '99': 1710147413003,
23
23
  },
24
24
  }
25
25
  const level1: LwM2MObjectInstance<SeaWaterLevel_14230> = {
@@ -28,7 +28,7 @@ void describe('lwm2mToSenML()', () => {
28
28
  Resources: {
29
29
  '0': 84.3,
30
30
  '1': 'AES',
31
- '99': new Date(1710140400000),
31
+ '99': 1710140400000,
32
32
  },
33
33
  }
34
34
  const level2: LwM2MObjectInstance<SeaWaterLevel_14230> = {
@@ -37,7 +37,7 @@ void describe('lwm2mToSenML()', () => {
37
37
  Resources: {
38
38
  '0': 140.4,
39
39
  '1': 'AES',
40
- '99': new Date(1710144000000),
40
+ '99': 1710144000000,
41
41
  },
42
42
  }
43
43
  const level3: LwM2MObjectInstance<SeaWaterLevel_14230> = {
@@ -47,7 +47,7 @@ void describe('lwm2mToSenML()', () => {
47
47
  Resources: {
48
48
  '0': 140.7,
49
49
  '1': 'AES',
50
- '99': new Date(1710144001000),
50
+ '99': 1710144001000,
51
51
  },
52
52
  }
53
53
  const lwm2m: Array<LwM2MObjectInstance<any>> = [
@@ -42,7 +42,7 @@ export const lwm2mToSenML = (
42
42
  bn: `${lwm2m.ObjectID}/${lwm2m.ObjectInstanceID ?? 0}/`,
43
43
  n: first[0],
44
44
  [firstKey]: first[1],
45
- bt: i.getTime(),
45
+ bt: i,
46
46
  })
47
47
  }
48
48
 
@@ -47,7 +47,7 @@ void describe('senMLtoLwM2M()', () => {
47
47
  3: 17.74077033996582,
48
48
  4: 26.376304626464844,
49
49
  5: 359.1545715332,
50
- 99: new Date(1698155694999),
50
+ 99: 1698155694999,
51
51
  },
52
52
  },
53
53
  ]
@@ -102,7 +102,7 @@ void describe('senMLtoLwM2M()', () => {
102
102
  4: 56879116,
103
103
  5: 24001,
104
104
  6: '10.160.243.113',
105
- 99: new Date(1676369307222),
105
+ 99: 1676369307222,
106
106
  },
107
107
  },
108
108
  ]
@@ -133,7 +133,7 @@ void describe('senMLtoLwM2M()', () => {
133
133
  5: 24202,
134
134
  6: '100.81.95.75',
135
135
  11: 7,
136
- 99: new Date(1699049665511),
136
+ 99: 1699049665511,
137
137
  },
138
138
  },
139
139
  ]
@@ -153,7 +153,7 @@ void describe('senMLtoLwM2M()', () => {
153
153
  ObjectID: 14205,
154
154
  Resources: {
155
155
  0: 21,
156
- 99: new Date(1699049600000),
156
+ 99: 1699049600000,
157
157
  },
158
158
  },
159
159
  {
@@ -161,14 +161,14 @@ void describe('senMLtoLwM2M()', () => {
161
161
  ObjectInstanceID: 1,
162
162
  Resources: {
163
163
  0: 31,
164
- 99: new Date(1699049600000),
164
+ 99: 1699049600000,
165
165
  },
166
166
  },
167
167
  {
168
168
  ObjectID: 14205,
169
169
  Resources: {
170
170
  0: 22,
171
- 99: new Date(1699049700000),
171
+ 99: 1699049700000,
172
172
  },
173
173
  },
174
174
  {
@@ -176,7 +176,7 @@ void describe('senMLtoLwM2M()', () => {
176
176
  ObjectInstanceID: 1,
177
177
  Resources: {
178
178
  0: 32,
179
- 99: new Date(1699049700000),
179
+ 99: 1699049700000,
180
180
  },
181
181
  },
182
182
  ]
@@ -15,8 +15,7 @@ const isInfoForDifferentInstance = (
15
15
  if ((currentObject.ObjectInstanceID ?? 0) !== resourceID.ObjectInstanceID)
16
16
  return true
17
17
  if (
18
- currentBaseTime !==
19
- (currentObject.Resources?.[tsRes] as Date | undefined)?.getTime()
18
+ currentBaseTime !== (currentObject.Resources?.[tsRes] as number | undefined)
20
19
  )
21
20
  return true
22
21
  return false
@@ -82,7 +81,7 @@ export const senMLtoLwM2M = (
82
81
  currentObject = {
83
82
  ObjectID: resourceId.ObjectID,
84
83
  Resources: {
85
- [tsRes]: new Date(currentBaseTime),
84
+ [tsRes]: currentBaseTime,
86
85
  },
87
86
  }
88
87
  if (resourceId.ObjectInstanceID !== 0)