@uns-kit/core 2.0.30 → 2.0.31
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.
package/dist/uns/uns-packet.js
CHANGED
|
@@ -74,8 +74,8 @@ export class UnsPacket {
|
|
|
74
74
|
};
|
|
75
75
|
if (data) {
|
|
76
76
|
if (data.dataGroup) {
|
|
77
|
-
if (!/^[A-Za-z0-9_]+$/.test(data.dataGroup)) {
|
|
78
|
-
throw new Error(`dataGroup must be a valid name (alphanumeric
|
|
77
|
+
if (!/^[A-Za-z0-9_.\-]+$/.test(data.dataGroup)) {
|
|
78
|
+
throw new Error(`dataGroup must be a valid name (alphanumeric, underscores, hyphens and dots only)`);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
if (!data.time)
|
|
@@ -116,8 +116,8 @@ export class UnsPacket {
|
|
|
116
116
|
// Check table object
|
|
117
117
|
if (table) {
|
|
118
118
|
if (table.dataGroup) {
|
|
119
|
-
if (!/^[A-Za-z0-9_]+$/.test(table.dataGroup)) {
|
|
120
|
-
throw new Error(`dataGroup must be a valid name (alphanumeric
|
|
119
|
+
if (!/^[A-Za-z0-9_.\-]+$/.test(table.dataGroup)) {
|
|
120
|
+
throw new Error(`dataGroup must be a valid name (alphanumeric, underscores, hyphens and dots only)`);
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
if (!table.time) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uns-packet.js","sourceRoot":"","sources":["../../src/uns/uns-packet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,EAKL,aAAa,EAKb,aAAa,EACb,UAAU,EACX,MAAM,qBAAqB,CAAC;AAE7B,gCAAgC;AAChC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEjC,MAAM,OAAO,SAAS;IACpB;;;;;;;;;OASG;IACI,MAAM,CAAC,eAAe,CAAC,UAAkB,EAAE,YAAqB;QACrE,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAErD,mBAAmB;YACnB,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;gBACzC,MAAM,IAAI,GAAiC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC;gBACzE,MAAM,KAAK,GAA0B,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;gBACpE,MAAM,SAAS,GACb,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC;gBACrC,MAAM,SAAS,GACb,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC;gBAErC,kCAAkC;gBAClC,SAAS,CAAC,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAEjD,MAAM,OAAO,GAAwB;oBACnC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC;oBACnC,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC;oBACrC,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;oBAC7C,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;iBAC9C,CAAC;gBACF,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC;gBAE3D,MAAM,QAAQ,GAAuB,gBAAgB,CAAC,QAAQ,CAAC;gBAE/D,MAAM,SAAS,GAAe;oBAC5B,OAAO;oBACP,gBAAgB;oBAChB,OAAO;oBACP,QAAQ;iBACT,CAAC;gBAEF,OAAO,SAAS,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,8BAA8B,KAAK,EAAE,CAAC,CAAC;YACrE,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,yBAAyB,CAAC,IAAe,EAAE,KAAiB;QACzE,MAAM,YAAY,GAAG,CAAC,KAAU,EAAW,EAAE;YAC3C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7D,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEF,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC5C,MAAM,IAAI,KAAK,CAAC,qGAAqG,CAAC,CAAC;gBACzH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,IAAI;gBACZ,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACxD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,KAAoC,CAAC,EAAE,CAAC;gBAC3E,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC1E,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,IAAK,IAAY,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,YAAY,CAAE,IAAY,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxF,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,IAAK,IAAY,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,YAAY,CAAE,IAAY,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpF,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACrD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC7C,MAAM,IAAI,KAAK,CAAC,qGAAqG,CAAC,CAAC;gBACzH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC5E,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,IAAK,KAAa,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,YAAY,CAAE,KAAa,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC1F,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,IAAK,KAAa,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,YAAY,CAAE,KAAa,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtF,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC7D,CAAC;YAED,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACtC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,oBAAoB,CAAC,CAAC;gBAChE,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,6BAA6B,CAAC,CAAC;gBACvE,CAAC;gBACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChC,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,+BAA+B,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;gBACvF,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC3B,IACE,OAAO,KAAK,KAAK,QAAQ;oBACzB,OAAO,KAAK,KAAK,QAAQ;oBACzB,OAAO,KAAK,KAAK,SAAS;oBAC1B,KAAK,KAAK,IAAI,EACd,CAAC;oBACD,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,CAAC,IAAI,4CAA4C,CAC7E,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAClC,OAAoB,EACpB,mBAA0C;QAE1C,IAAI,CAAC;YACH,iCAAiC;YACjC,IAAI,SAAS,CAAC,yBAAyB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAErE,OAAO;gBACP,8BAA8B;gBAC9B,iCAAiC;gBACjC,iDAAiD;gBACjD,qEAAqE;gBAErE,kCAAkC;gBAClC,aAAa;gBACb,gCAAgC;gBAChC,8BAA8B;gBAC9B,KAAK;gBAEL,IAAI,IAAI,GAAqB,SAAS,CAAC;gBAEvC,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBACrD,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC5C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAwC,CAAC,EAAE,CAAC;wBACnE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;oBACnE,CAAC;oBACD,IAAI,GAAG;wBACL,GAAG,OAAO,CAAC,IAAI;wBACf,SAAS,EAAE,SAAwC;qBACpD,CAAA;gBACH,CAAC;gBAAA,CAAC;gBAEF,MAAM,eAAe,GAAwB;oBAC3C,IAAI;oBACJ,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;iBAC7B,CAAC;gBAEF,MAAM,SAAS,GAAe;oBAC5B,OAAO,EAAE,eAAe;oBACxB,OAAO,EAAE,gBAAgB;iBAC1B,CAAC;gBAEF,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,yCAAyC,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC;IAEH,CAAC;IAEO,MAAM,CAAC,YAAY,CACzB,SAAiB,EACjB,GAAW,EACX,IAAY;QAEZ,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,IAAU;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACxE,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,YAAY,GAAG,CAAC;IACnF,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,KAAa;QACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBAClC,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAC/C,OAAO,CAAC,YAAY,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mDAAmD;IAC3C,MAAM,CAAC,gBAAgB,CAAC,gBAAwB;QACtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,uCAAuC;YACvC,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YAEjE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBAC7C,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import * as crypto from \"crypto\";\nimport * as zlib from \"zlib\";\nimport logger from '../logger.js';\nimport {\n IUnsPacket,\n ISO8601, \n IUnsData,\n IUnsMessage,\n isIOS8601Type,\n IUnsPackatParameters,\n IUnsExtendedMessage,\n IUnsExtendedData,\n IUnsTable,\n isQuestDbType,\n valueTypes\n} from \"./uns-interfaces.js\";\n\n// Version of the packet library\nconst unsPacketVersion = \"1.3.0\";\n\nexport class UnsPacket {\n /**\n * The given TypeScript function parseMqttPacket is used to parse an MQTT packet,\n * which is presumed to be in JSON format. The goal is to transform this string into\n * a structured object that adheres to the IUnsPacket interface, or return null\n * if parsing fails.\n *\n * @param mqttPacket\n * @param instanceName \n * @returns IUnsPacket\n */\n public static parseMqttPacket(mqttPacket: string, instanceName?: string): IUnsPacket | null {\n try {\n const parsedMqttPacket: any = JSON.parse(mqttPacket);\n\n // Check uns packet\n if (parsedMqttPacket && parsedMqttPacket.version) {\n const version = parsedMqttPacket.version;\n const data: IUnsExtendedData | undefined = parsedMqttPacket.message.data;\n const table: IUnsTable | undefined = parsedMqttPacket.message.table;\n const expiresAt: ISO8601 | undefined =\n parsedMqttPacket.message.expiresAt;\n const createdAt: ISO8601 | undefined =\n parsedMqttPacket.message.createdAt;\n\n // Validate data and table objects\n UnsPacket.validateMessageComponents(data, table);\n\n const message: IUnsExtendedMessage = {\n ...(data !== undefined && { data }),\n ...(table !== undefined && { table }),\n ...(expiresAt !== undefined && { expiresAt }),\n ...(createdAt !== undefined && { createdAt }),\n };\n const messageSignature = parsedMqttPacket.messageSignature;\n\n const interval: number | undefined = parsedMqttPacket.interval;\n\n const unsPacket: IUnsPacket = {\n message,\n messageSignature,\n version,\n interval\n };\n\n return unsPacket;\n } else {\n logger.debug(\"Version number not specified in the mqtt packet\");\n }\n } catch (error) {\n if (instanceName) {\n logger.error(`${instanceName} - Could not parse packet: ${error}`);\n } else {\n logger.error(`Could not parse packet: ${error}`);\n }\n }\n }\n\n /**\n * Validates the data and table objects to ensure they have the required properties\n * and that those properties have the correct types.\n * \n * @param data - The data object to validate\n * @param table - The table object to validate\n * @returns boolean | null\n */\n private static validateMessageComponents(data?: IUnsData, table?: IUnsTable): boolean | null {\n const isIsoOrEpoch = (value: any): boolean => {\n if (value === null || value === undefined) return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n return isIOS8601Type(value);\n };\n\n if (data) {\n if (data.dataGroup) {\n if (!/^[A-Za-z0-9_]+$/.test(data.dataGroup)) {\n throw new Error(`dataGroup must be a valid name (alphanumeric and underscores only, no spaces or special characters)`);\n }\n }\n\n if (!data.time)\n throw new Error(`Time is not defined in data object`);\n if (!isIOS8601Type(data.time))\n throw new Error(`Time is not ISO8601`);\n if (data.value === undefined) {\n throw new Error(`Value is not defined in data object`);\n }\n if (!valueTypes.includes(typeof data.value as (typeof valueTypes)[number])) {\n throw new Error(`Value in data object must be string or number`);\n }\n if (data.intervalStart !== undefined && !isIsoOrEpoch(data.intervalStart)) {\n throw new Error(`intervalStart is not ISO8601 or epoch ms`);\n }\n if (data.intervalEnd !== undefined && !isIsoOrEpoch(data.intervalEnd)) {\n throw new Error(`intervalEnd is not ISO8601 or epoch ms`);\n }\n if ((data as any).windowStart !== undefined && !isIsoOrEpoch((data as any).windowStart)) {\n throw new Error(`windowStart is not ISO8601 or epoch ms`);\n }\n if ((data as any).windowEnd !== undefined && !isIsoOrEpoch((data as any).windowEnd)) {\n throw new Error(`windowEnd is not ISO8601 or epoch ms`);\n }\n if (data.lastSeen !== undefined && !isIsoOrEpoch(data.lastSeen)) {\n throw new Error(`lastSeen is not ISO8601 or epoch ms`);\n }\n if (data.deletedAt !== undefined && !isIsoOrEpoch(data.deletedAt)) {\n throw new Error(`deletedAt is not ISO8601 or epoch ms`);\n }\n if (data.eventId && typeof data.eventId !== \"string\") {\n throw new Error(`eventId must be a string`);\n }\n if (data.deleted !== undefined && typeof data.deleted !== \"boolean\") {\n throw new Error(`deleted must be a boolean`);\n }\n }\n\n // Check table object\n if (table) {\n if (table.dataGroup) {\n if (!/^[A-Za-z0-9_]+$/.test(table.dataGroup)) {\n throw new Error(`dataGroup must be a valid name (alphanumeric and underscores only, no spaces or special characters)`);\n }\n }\n\n if (!table.time) {\n throw new Error(`Time is not defined in data object`);\n }\n if (!isIOS8601Type(table.time)) {\n throw new Error(`Time is not ISO8601`);\n }\n if (table.intervalStart !== undefined && !isIsoOrEpoch(table.intervalStart)) {\n throw new Error(`intervalStart is not ISO8601 or epoch ms`);\n }\n if (table.intervalEnd !== undefined && !isIsoOrEpoch(table.intervalEnd)) {\n throw new Error(`intervalEnd is not ISO8601 or epoch ms`);\n }\n if ((table as any).windowStart !== undefined && !isIsoOrEpoch((table as any).windowStart)) {\n throw new Error(`windowStart is not ISO8601 or epoch ms`);\n }\n if ((table as any).windowEnd !== undefined && !isIsoOrEpoch((table as any).windowEnd)) {\n throw new Error(`windowEnd is not ISO8601 or epoch ms`);\n }\n if (table.lastSeen !== undefined && !isIsoOrEpoch(table.lastSeen)) {\n throw new Error(`lastSeen is not ISO8601 or epoch ms`);\n }\n if (table.deletedAt !== undefined && !isIsoOrEpoch(table.deletedAt)) {\n throw new Error(`deletedAt is not ISO8601 or epoch ms`);\n }\n if (table.eventId && typeof table.eventId !== \"string\") {\n throw new Error(`eventId must be a string`);\n }\n if (table.deleted !== undefined && typeof table.deleted !== \"boolean\") {\n throw new Error(`deleted must be a boolean`);\n }\n\n if (!Array.isArray(table.columns) || table.columns.length === 0) {\n throw new Error(`Table.columns must be a non-empty array`);\n }\n\n table.columns.forEach((column, index) => {\n if (!column.name) {\n throw new Error(`Column at index ${index} is missing a name`);\n }\n if (!column.type) {\n throw new Error(`Column '${column.name}' is missing a QuestDB type`);\n }\n if (!isQuestDbType(column.type)) {\n throw new Error(`Column '${column.name}' has invalid QuestDB type '${column.type}'`);\n }\n const value = column.value;\n if (\n typeof value !== \"number\" &&\n typeof value !== \"string\" &&\n typeof value !== \"boolean\" &&\n value !== null\n ) {\n throw new Error(\n `Value for column '${column.name}' must be number, string, boolean, or null`\n );\n }\n });\n }\n\n return true;\n }\n\n static async unsPacketFromUnsMessage(\n message: IUnsMessage,\n unsPackatParameters?: IUnsPackatParameters,\n ): Promise<IUnsPacket> {\n try {\n // Validate the packet in message\n if (UnsPacket.validateMessageComponents(message.data, message.table)) {\n\n // HMAC\n // const algorithm = \"sha256\";\n // const key = \"your-secret-key\";\n // const packetMessage = JSON.stringify(message);\n // const hmacHash = this.generateHmac(algorithm, key, packetMessage);\n \n // const unsPacket: IUnsPacket = {\n // message,\n // messageSignature: hmacHash,\n // version: unsPacketVersion\n // };\n\n let data: IUnsExtendedData = undefined;\n\n if (message.data && message.data.value !== undefined) {\n const valueType = typeof message.data.value;\n if (!valueTypes.includes(valueType as (typeof valueTypes)[number])) {\n throw new Error(`Value in data object must be string or number`);\n }\n data = {\n ...message.data,\n valueType: valueType as (typeof valueTypes)[number]\n }\n };\n\n const extendedMessage: IUnsExtendedMessage = {\n data,\n table: message.table,\n expiresAt: message.expiresAt,\n createdAt: message.createdAt,\n };\n\n const unsPacket: IUnsPacket = {\n message: extendedMessage,\n version: unsPacketVersion,\n };\n \n return unsPacket; \n }\n } catch (error) {\n logger.error(`Could not create packet from message: ${error}`);\n }\n\n }\n\n private static generateHmac(\n algorithm: string,\n key: string,\n data: string,\n ): string {\n const hmac = crypto.createHmac(algorithm, key);\n hmac.update(data);\n return hmac.digest(\"hex\");\n }\n\n static formatToISO8601(date: Date): ISO8601 {\n const year = date.getUTCFullYear();\n const month = String(date.getUTCMonth() + 1).padStart(2, \"0\");\n const day = String(date.getUTCDate()).padStart(2, \"0\");\n const hours = String(date.getUTCHours()).padStart(2, \"0\");\n const minutes = String(date.getUTCMinutes()).padStart(2, \"0\");\n const seconds = String(date.getUTCSeconds()).padStart(2, \"0\");\n const milliseconds = String(date.getUTCMilliseconds()).padStart(3, \"0\");\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}Z`;\n }\n\n private static compressString(input: string): Promise<string> {\n return new Promise((resolve, reject) => {\n zlib.deflate(input, (err, buffer) => {\n if (err) {\n reject(err);\n } else {\n const base64String = buffer.toString(\"base64\");\n resolve(base64String);\n }\n });\n });\n }\n\n // Function to decompress a Buffer back to a string\n private static decompressString(base64Compressed: string): Promise<string> {\n return new Promise((resolve, reject) => {\n // Decode the base64 string to a Buffer\n const compressedBuffer = Buffer.from(base64Compressed, \"base64\");\n\n zlib.inflate(compressedBuffer, (err, buffer) => {\n if (err) {\n reject(err);\n } else {\n resolve(buffer.toString());\n }\n });\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"uns-packet.js","sourceRoot":"","sources":["../../src/uns/uns-packet.ts"],"names":[],"mappings":"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","sourcesContent":["import * as crypto from \"crypto\";\nimport * as zlib from \"zlib\";\nimport logger from '../logger.js';\nimport {\n IUnsPacket,\n ISO8601, \n IUnsData,\n IUnsMessage,\n isIOS8601Type,\n IUnsPackatParameters,\n IUnsExtendedMessage,\n IUnsExtendedData,\n IUnsTable,\n isQuestDbType,\n valueTypes\n} from \"./uns-interfaces.js\";\n\n// Version of the packet library\nconst unsPacketVersion = \"1.3.0\";\n\nexport class UnsPacket {\n /**\n * The given TypeScript function parseMqttPacket is used to parse an MQTT packet,\n * which is presumed to be in JSON format. The goal is to transform this string into\n * a structured object that adheres to the IUnsPacket interface, or return null\n * if parsing fails.\n *\n * @param mqttPacket\n * @param instanceName \n * @returns IUnsPacket\n */\n public static parseMqttPacket(mqttPacket: string, instanceName?: string): IUnsPacket | null {\n try {\n const parsedMqttPacket: any = JSON.parse(mqttPacket);\n\n // Check uns packet\n if (parsedMqttPacket && parsedMqttPacket.version) {\n const version = parsedMqttPacket.version;\n const data: IUnsExtendedData | undefined = parsedMqttPacket.message.data;\n const table: IUnsTable | undefined = parsedMqttPacket.message.table;\n const expiresAt: ISO8601 | undefined =\n parsedMqttPacket.message.expiresAt;\n const createdAt: ISO8601 | undefined =\n parsedMqttPacket.message.createdAt;\n\n // Validate data and table objects\n UnsPacket.validateMessageComponents(data, table);\n\n const message: IUnsExtendedMessage = {\n ...(data !== undefined && { data }),\n ...(table !== undefined && { table }),\n ...(expiresAt !== undefined && { expiresAt }),\n ...(createdAt !== undefined && { createdAt }),\n };\n const messageSignature = parsedMqttPacket.messageSignature;\n\n const interval: number | undefined = parsedMqttPacket.interval;\n\n const unsPacket: IUnsPacket = {\n message,\n messageSignature,\n version,\n interval\n };\n\n return unsPacket;\n } else {\n logger.debug(\"Version number not specified in the mqtt packet\");\n }\n } catch (error) {\n if (instanceName) {\n logger.error(`${instanceName} - Could not parse packet: ${error}`);\n } else {\n logger.error(`Could not parse packet: ${error}`);\n }\n }\n }\n\n /**\n * Validates the data and table objects to ensure they have the required properties\n * and that those properties have the correct types.\n * \n * @param data - The data object to validate\n * @param table - The table object to validate\n * @returns boolean | null\n */\n private static validateMessageComponents(data?: IUnsData, table?: IUnsTable): boolean | null {\n const isIsoOrEpoch = (value: any): boolean => {\n if (value === null || value === undefined) return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n return isIOS8601Type(value);\n };\n\n if (data) {\n if (data.dataGroup) {\n if (!/^[A-Za-z0-9_.\\-]+$/.test(data.dataGroup)) {\n throw new Error(`dataGroup must be a valid name (alphanumeric, underscores, hyphens and dots only)`);\n }\n }\n\n if (!data.time)\n throw new Error(`Time is not defined in data object`);\n if (!isIOS8601Type(data.time))\n throw new Error(`Time is not ISO8601`);\n if (data.value === undefined) {\n throw new Error(`Value is not defined in data object`);\n }\n if (!valueTypes.includes(typeof data.value as (typeof valueTypes)[number])) {\n throw new Error(`Value in data object must be string or number`);\n }\n if (data.intervalStart !== undefined && !isIsoOrEpoch(data.intervalStart)) {\n throw new Error(`intervalStart is not ISO8601 or epoch ms`);\n }\n if (data.intervalEnd !== undefined && !isIsoOrEpoch(data.intervalEnd)) {\n throw new Error(`intervalEnd is not ISO8601 or epoch ms`);\n }\n if ((data as any).windowStart !== undefined && !isIsoOrEpoch((data as any).windowStart)) {\n throw new Error(`windowStart is not ISO8601 or epoch ms`);\n }\n if ((data as any).windowEnd !== undefined && !isIsoOrEpoch((data as any).windowEnd)) {\n throw new Error(`windowEnd is not ISO8601 or epoch ms`);\n }\n if (data.lastSeen !== undefined && !isIsoOrEpoch(data.lastSeen)) {\n throw new Error(`lastSeen is not ISO8601 or epoch ms`);\n }\n if (data.deletedAt !== undefined && !isIsoOrEpoch(data.deletedAt)) {\n throw new Error(`deletedAt is not ISO8601 or epoch ms`);\n }\n if (data.eventId && typeof data.eventId !== \"string\") {\n throw new Error(`eventId must be a string`);\n }\n if (data.deleted !== undefined && typeof data.deleted !== \"boolean\") {\n throw new Error(`deleted must be a boolean`);\n }\n }\n\n // Check table object\n if (table) {\n if (table.dataGroup) {\n if (!/^[A-Za-z0-9_.\\-]+$/.test(table.dataGroup)) {\n throw new Error(`dataGroup must be a valid name (alphanumeric, underscores, hyphens and dots only)`);\n }\n }\n\n if (!table.time) {\n throw new Error(`Time is not defined in data object`);\n }\n if (!isIOS8601Type(table.time)) {\n throw new Error(`Time is not ISO8601`);\n }\n if (table.intervalStart !== undefined && !isIsoOrEpoch(table.intervalStart)) {\n throw new Error(`intervalStart is not ISO8601 or epoch ms`);\n }\n if (table.intervalEnd !== undefined && !isIsoOrEpoch(table.intervalEnd)) {\n throw new Error(`intervalEnd is not ISO8601 or epoch ms`);\n }\n if ((table as any).windowStart !== undefined && !isIsoOrEpoch((table as any).windowStart)) {\n throw new Error(`windowStart is not ISO8601 or epoch ms`);\n }\n if ((table as any).windowEnd !== undefined && !isIsoOrEpoch((table as any).windowEnd)) {\n throw new Error(`windowEnd is not ISO8601 or epoch ms`);\n }\n if (table.lastSeen !== undefined && !isIsoOrEpoch(table.lastSeen)) {\n throw new Error(`lastSeen is not ISO8601 or epoch ms`);\n }\n if (table.deletedAt !== undefined && !isIsoOrEpoch(table.deletedAt)) {\n throw new Error(`deletedAt is not ISO8601 or epoch ms`);\n }\n if (table.eventId && typeof table.eventId !== \"string\") {\n throw new Error(`eventId must be a string`);\n }\n if (table.deleted !== undefined && typeof table.deleted !== \"boolean\") {\n throw new Error(`deleted must be a boolean`);\n }\n\n if (!Array.isArray(table.columns) || table.columns.length === 0) {\n throw new Error(`Table.columns must be a non-empty array`);\n }\n\n table.columns.forEach((column, index) => {\n if (!column.name) {\n throw new Error(`Column at index ${index} is missing a name`);\n }\n if (!column.type) {\n throw new Error(`Column '${column.name}' is missing a QuestDB type`);\n }\n if (!isQuestDbType(column.type)) {\n throw new Error(`Column '${column.name}' has invalid QuestDB type '${column.type}'`);\n }\n const value = column.value;\n if (\n typeof value !== \"number\" &&\n typeof value !== \"string\" &&\n typeof value !== \"boolean\" &&\n value !== null\n ) {\n throw new Error(\n `Value for column '${column.name}' must be number, string, boolean, or null`\n );\n }\n });\n }\n\n return true;\n }\n\n static async unsPacketFromUnsMessage(\n message: IUnsMessage,\n unsPackatParameters?: IUnsPackatParameters,\n ): Promise<IUnsPacket> {\n try {\n // Validate the packet in message\n if (UnsPacket.validateMessageComponents(message.data, message.table)) {\n\n // HMAC\n // const algorithm = \"sha256\";\n // const key = \"your-secret-key\";\n // const packetMessage = JSON.stringify(message);\n // const hmacHash = this.generateHmac(algorithm, key, packetMessage);\n \n // const unsPacket: IUnsPacket = {\n // message,\n // messageSignature: hmacHash,\n // version: unsPacketVersion\n // };\n\n let data: IUnsExtendedData = undefined;\n\n if (message.data && message.data.value !== undefined) {\n const valueType = typeof message.data.value;\n if (!valueTypes.includes(valueType as (typeof valueTypes)[number])) {\n throw new Error(`Value in data object must be string or number`);\n }\n data = {\n ...message.data,\n valueType: valueType as (typeof valueTypes)[number]\n }\n };\n\n const extendedMessage: IUnsExtendedMessage = {\n data,\n table: message.table,\n expiresAt: message.expiresAt,\n createdAt: message.createdAt,\n };\n\n const unsPacket: IUnsPacket = {\n message: extendedMessage,\n version: unsPacketVersion,\n };\n \n return unsPacket; \n }\n } catch (error) {\n logger.error(`Could not create packet from message: ${error}`);\n }\n\n }\n\n private static generateHmac(\n algorithm: string,\n key: string,\n data: string,\n ): string {\n const hmac = crypto.createHmac(algorithm, key);\n hmac.update(data);\n return hmac.digest(\"hex\");\n }\n\n static formatToISO8601(date: Date): ISO8601 {\n const year = date.getUTCFullYear();\n const month = String(date.getUTCMonth() + 1).padStart(2, \"0\");\n const day = String(date.getUTCDate()).padStart(2, \"0\");\n const hours = String(date.getUTCHours()).padStart(2, \"0\");\n const minutes = String(date.getUTCMinutes()).padStart(2, \"0\");\n const seconds = String(date.getUTCSeconds()).padStart(2, \"0\");\n const milliseconds = String(date.getUTCMilliseconds()).padStart(3, \"0\");\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}Z`;\n }\n\n private static compressString(input: string): Promise<string> {\n return new Promise((resolve, reject) => {\n zlib.deflate(input, (err, buffer) => {\n if (err) {\n reject(err);\n } else {\n const base64String = buffer.toString(\"base64\");\n resolve(base64String);\n }\n });\n });\n }\n\n // Function to decompress a Buffer back to a string\n private static decompressString(base64Compressed: string): Promise<string> {\n return new Promise((resolve, reject) => {\n // Decode the base64 string to a Buffer\n const compressedBuffer = Buffer.from(base64Compressed, \"base64\");\n\n zlib.inflate(compressedBuffer, (err, buffer) => {\n if (err) {\n reject(err);\n } else {\n resolve(buffer.toString());\n }\n });\n });\n }\n}\n"]}
|