diff --git a/.releaserc.json b/.releaserc.json index 9134f2bb5..e4b98d947 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -32,6 +32,5 @@ } ], "@semantic-release/git" - ] } diff --git a/package-lock.json b/package-lock.json index 839655c6e..a636377d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,7 +46,7 @@ "jest-mock": "^29.7.0", "jest-transform-stub": "^2.0.0", "prettier-config-standard": "^7.0.0", - "prettier-plugin-multiline-arrays": "^3.0.6", + "prettier-plugin-multiline-arrays": "^4.0.2", "ts-jest": "^29.2.5", "ts-node": "^10.9.2", "typescript": "^5.7.3", @@ -81,16 +81,65 @@ "node": ">=6.0.0" } }, + "node_modules/@augment-vir/assert": { + "version": "31.7.1", + "resolved": "https://registry.npmjs.org/@augment-vir/assert/-/assert-31.7.1.tgz", + "integrity": "sha512-nAyAR5VUWgtY8C6EJzzc+OSwzJ+AE9DofFL4CMKYaO/gZ7uHsP3kt90kqBwelDCTzkWgJv5m3nSo9Tm4W+53Xw==", + "dev": true, + "dependencies": { + "@augment-vir/core": "^31.7.1", + "@date-vir/duration": "^7.1.2", + "deep-eql": "^5.0.2", + "expect-type": "^1.1.0", + "type-fest": "^4.32.0" + }, + "engines": { + "node": ">=22" + } + }, "node_modules/@augment-vir/common": { - "version": "28.2.4", - "resolved": "https://registry.npmjs.org/@augment-vir/common/-/common-28.2.4.tgz", - "integrity": "sha512-5Ib0OX7YlxAuFrG+MAoTsz6RlKMcbdMdoNGcEEKH/ezc/ZKMy/IHZ9Z/ZcCHYopZ4ocGXzVY4KUOiJ8+CXXvTA==", + "version": "31.7.1", + "resolved": "https://registry.npmjs.org/@augment-vir/common/-/common-31.7.1.tgz", + "integrity": "sha512-aISG6hIwIuTBAvcxnR2oB1nU6miDy1H9q2ATuIqNIJKDmM27TOv7+7MlWMsmivzURmn2x8sPdIwI3f8HnLzpuQ==", "dev": true, - "license": "MIT", "dependencies": { + "@augment-vir/assert": "^31.7.1", + "@augment-vir/core": "^31.7.1", + "@date-vir/duration": "^7.1.2", + "ansi-styles": "^6.2.1", + "json5": "^2.2.3", + "type-fest": "^4.32.0", + "typed-event-target": "^4.0.2" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/@augment-vir/common/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@augment-vir/core": { + "version": "31.7.1", + "resolved": "https://registry.npmjs.org/@augment-vir/core/-/core-31.7.1.tgz", + "integrity": "sha512-N0pkEUxa8RdIE335E08bc7UQlYgskexpiXbGNtPQ9pktXhpe3KKazua7Zhvv5HdCv0ARvb7bSkzQnsd1xgnWjQ==", + "dev": true, + "dependencies": { + "@date-vir/duration": "^7.1.2", "browser-or-node": "^3.0.0", - "run-time-assertions": "^1.5.1", - "type-fest": "^4.20.1" + "json5": "^2.2.3", + "type-fest": "^4.32.0" + }, + "engines": { + "node": ">=22" } }, "node_modules/@babel/code-frame": { @@ -793,6 +842,20 @@ "kuler": "^2.0.0" } }, + "node_modules/@date-vir/duration": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@date-vir/duration/-/duration-7.1.2.tgz", + "integrity": "sha512-RpQ+29HisknHauOx7lhlNZVtVhprnvdD7JzL1Tlhqw+H6BLb34Jro51fpuVwyetJ5CeJ8LbOIDuUjx0ZlEid0A==", + "dev": true, + "dependencies": { + "@types/luxon": "^3.4.2", + "luxon": "^3.5.0", + "type-fest": "^4.31.0" + }, + "engines": { + "node": ">=22" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -1672,6 +1735,12 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, + "node_modules/@types/luxon": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", + "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", + "dev": true + }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -2448,8 +2517,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-3.0.0.tgz", "integrity": "sha512-iczIdVJzGEYhP5DqQxYM9Hh7Ztpqqi+CXZpSmX8ALFs9ecXkQIeqRyM6TfxEfMVpwhl3dSuDvxdzzo9sUOIVBQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/browserslist": { "version": "4.22.2", @@ -2994,6 +3062,15 @@ } } }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -3485,11 +3562,13 @@ } }, "node_modules/expect-type": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-0.15.0.tgz", - "integrity": "sha512-yWnriYB4e8G54M5/fAFj7rCIBiKs1HAACaY13kCz6Ku0dezjS9aMcfcdVK2X8Tv2tEV1BPz/wKfQ7WA4S/d8aA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", "dev": true, - "license": "Apache-2.0" + "engines": { + "node": ">=12.0.0" + } }, "node_modules/expect/node_modules/diff-sequences": { "version": "29.6.3", @@ -5332,6 +5411,15 @@ "yallist": "^3.0.2" } }, + "node_modules/luxon": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", + "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -6222,14 +6310,16 @@ } }, "node_modules/prettier-plugin-multiline-arrays": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/prettier-plugin-multiline-arrays/-/prettier-plugin-multiline-arrays-3.0.6.tgz", - "integrity": "sha512-FrWVa7MoDQo9b5XoLPrqIDClb0k+O8wOIsIr1DutRXhcerLY8PfIe/yYeTVD/vpRISkSXCBEYmj5Voe0wb5dEQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/prettier-plugin-multiline-arrays/-/prettier-plugin-multiline-arrays-4.0.2.tgz", + "integrity": "sha512-j8aWPMQl3QsTRR7e2HuNfwp429mB0IL1NQ8PjO0xq5W20O5L5h2XZ99vnqirceJizKhqhm8sOMmsmGcKEtlCFg==", "dev": true, - "license": "(MIT or CC0 1.0)", "dependencies": { - "@augment-vir/common": "^28.1.0", - "proxy-vir": "^1.0.0" + "@augment-vir/common": "^31.3.0", + "proxy-vir": "^2.0.1" + }, + "engines": { + "node": ">=22" }, "peerDependencies": { "prettier": ">=3.0.0" @@ -6300,34 +6390,18 @@ } }, "node_modules/proxy-vir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-vir/-/proxy-vir-1.0.0.tgz", - "integrity": "sha512-WV1gkBxUOwLSz0Bn09tisIqLK7leAqtFm/474t3L0hQKJw7/gdrkGcWw0/OT1PhSy+TDS6swfq7Niuoq3XJhkQ==", - "dev": true, - "license": "(MIT or CC0 1.0)", - "dependencies": { - "@augment-vir/common": "^23.3.4" - } - }, - "node_modules/proxy-vir/node_modules/@augment-vir/common": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/@augment-vir/common/-/common-23.4.0.tgz", - "integrity": "sha512-QIrJ1doD00TNbOzeVrk9KgPTzRlIjayxERnhtbQjK/AFPj5yElcB03GbnGdQZPzws/R+5gfMM5cZiH7QyBP+Kg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proxy-vir/-/proxy-vir-2.0.1.tgz", + "integrity": "sha512-hjy5mWzHZhgRGh0f90f0Bz3VrGUe0T+AlhwnETakzRdvaN9RtPYLQG1+ZuEzSDK95FAhPYd26nEi1xVrXqvBwg==", "dev": true, - "license": "MIT", "dependencies": { - "browser-or-node": "^2.1.1", - "run-time-assertions": "^1.0.0", - "type-fest": "^4.10.2" + "@augment-vir/assert": "^31.1.0", + "@augment-vir/common": "^31.1.0" + }, + "engines": { + "node": ">=22" } }, - "node_modules/proxy-vir/node_modules/browser-or-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", - "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==", - "dev": true, - "license": "MIT" - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6605,18 +6679,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/run-time-assertions": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/run-time-assertions/-/run-time-assertions-1.5.1.tgz", - "integrity": "sha512-yyAFU3+ZGw+zjMu0s7uOSGqKIRDLaCnl80VIKdtwuu4ejxcWHCRj2mxL6elVNtI7fytHwk4e40e3IrdNkXihlw==", - "dev": true, - "license": "(MIT or CC0 1.0)", - "dependencies": { - "@augment-vir/common": "^28.0.0", - "expect-type": "~0.15.0", - "type-fest": "^4.18.2" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -7205,9 +7267,9 @@ } }, "node_modules/type-fest": { - "version": "4.26.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", - "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.32.0.tgz", + "integrity": "sha512-rfgpoi08xagF3JSdtJlCwMq9DGNDE0IMh3Mkpc1wUypg9vPi786AiqeBBKcqvIkq42azsBM85N490fyZjeUftw==", "engines": { "node": ">=16" }, @@ -7227,6 +7289,81 @@ "node": ">= 0.6" } }, + "node_modules/typed-event-target": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/typed-event-target/-/typed-event-target-4.0.2.tgz", + "integrity": "sha512-vIAqC5HN/yuAn4+K4MFB6QBz4pAjp3se55KkRIbxX+EjGRyBJwbVasj2jgzUDhYeda9b0YbDng2N11A/bXvYwA==", + "dev": true, + "dependencies": { + "@augment-vir/assert": "^30.3.0", + "@augment-vir/common": "^30.3.0", + "@augment-vir/core": "^30.3.0" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/typed-event-target/node_modules/@augment-vir/assert": { + "version": "30.8.4", + "resolved": "https://registry.npmjs.org/@augment-vir/assert/-/assert-30.8.4.tgz", + "integrity": "sha512-kxak+lDEYo14pStluTCss+/wH05SqlSv3mEN/yBvtV5lMJBXhoPcJGMua7zWXNCEnOCGVU36+hDBwuh9IQxT/A==", + "dev": true, + "dependencies": { + "@augment-vir/core": "^30.8.4", + "@date-vir/duration": "^7.0.1", + "deep-eql": "^5.0.2", + "expect-type": "^1.1.0", + "type-fest": "^4.29.0" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/typed-event-target/node_modules/@augment-vir/common": { + "version": "30.8.4", + "resolved": "https://registry.npmjs.org/@augment-vir/common/-/common-30.8.4.tgz", + "integrity": "sha512-3w4WJOQKycuHmSod0BMjVyrUjHlHj+6vmabKvtRT96mz+b9Rstqg2EfM4zzlkuoM2k9biAbjeYSllwpmf631uQ==", + "dev": true, + "dependencies": { + "@augment-vir/assert": "^30.8.4", + "@augment-vir/core": "^30.8.4", + "@date-vir/duration": "^7.0.1", + "ansi-styles": "^6.2.1", + "json5": "^2.2.3", + "type-fest": "^4.29.0", + "typed-event-target": "^4.0.2" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/typed-event-target/node_modules/@augment-vir/core": { + "version": "30.8.4", + "resolved": "https://registry.npmjs.org/@augment-vir/core/-/core-30.8.4.tgz", + "integrity": "sha512-fOp0W+z2xkkkcH9lpsY6AUVp2vPbR5qo3fbVui9IrA4RJ6wXzio6+sP1yYw2iLJVmOOEYIWSbvZddDn+Ih6Ppw==", + "dev": true, + "dependencies": { + "@date-vir/duration": "^7.0.1", + "browser-or-node": "^3.0.0", + "json5": "^2.2.3", + "type-fest": "^4.29.0" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/typed-event-target/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", diff --git a/package.json b/package.json index f6c2f4665..dfe617664 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "jest-mock": "^29.7.0", "jest-transform-stub": "^2.0.0", "prettier-config-standard": "^7.0.0", - "prettier-plugin-multiline-arrays": "^3.0.6", + "prettier-plugin-multiline-arrays": "^4.0.2", "ts-jest": "^29.2.5", "ts-node": "^10.9.2", "typescript": "^5.7.3", diff --git a/releaserc.json b/releaserc.json index 46dd1f65e..852fd459f 100644 --- a/releaserc.json +++ b/releaserc.json @@ -20,6 +20,5 @@ "publishCmd": "docker push vprodemo.azurecr.io/rpc-go:v${nextRelease.version}" } ] - ] } diff --git a/src/data/postgres/tables/device.test.ts b/src/data/postgres/tables/device.test.ts index 400b544a7..8eb8a6d0a 100644 --- a/src/data/postgres/tables/device.test.ts +++ b/src/data/postgres/tables/device.test.ts @@ -439,7 +439,8 @@ describe('device tests', () => { device.tenantId, device.friendlyName, device.dnsSuffix, - JSON.stringify(device.deviceInfo)] + JSON.stringify(device.deviceInfo) + ] ) expect(getById).toHaveBeenCalledTimes(1) expect(result).toBe(device) @@ -476,7 +477,8 @@ describe('device tests', () => { device.tenantId, device.friendlyName, device.dnsSuffix, - JSON.stringify(device.deviceInfo)] + JSON.stringify(device.deviceInfo) + ] ) expect(getById).toHaveBeenCalledTimes(1) expect(result).toBe(device) diff --git a/src/data/postgres/tables/device.ts b/src/data/postgres/tables/device.ts index 613859c78..21e0f1578 100644 --- a/src/data/postgres/tables/device.ts +++ b/src/data/postgres/tables/device.ts @@ -252,7 +252,8 @@ export class DeviceTable implements IDeviceTable { device.tenantId, device.friendlyName, device.dnsSuffix, - JSON.stringify(device.deviceInfo)] + JSON.stringify(device.deviceInfo) + ] ) if (results.rowCount > 0) { return await this.getById(device.guid) @@ -293,7 +294,8 @@ export class DeviceTable implements IDeviceTable { device.lastConnected, device.lastSeen, device.lastDisconnected, - JSON.stringify(device.deviceInfo)] + JSON.stringify(device.deviceInfo) + ] ) if (results.rowCount > 0) { return await this.getById(device.guid) diff --git a/src/routes/auth/authValidator.ts b/src/routes/auth/authValidator.ts index 723e61fa0..9cbaf742e 100644 --- a/src/routes/auth/authValidator.ts +++ b/src/routes/auth/authValidator.ts @@ -7,4 +7,5 @@ import { check, type ValidationChain } from 'express-validator' export const authValidator = (): ValidationChain[] => [ check('username').isString().not().isEmpty().withMessage('User name is required'), - check('password').not().isEmpty().withMessage('Password is required')] + check('password').not().isEmpty().withMessage('Password is required') +] diff --git a/src/routes/devices/deviceValidator.ts b/src/routes/devices/deviceValidator.ts index 831c0da01..558524234 100644 --- a/src/routes/devices/deviceValidator.ts +++ b/src/routes/devices/deviceValidator.ts @@ -18,7 +18,8 @@ export const validator = (): any => [ check('disconnect').optional({ nullable: true }).isISO8601().toDate(), check('tags').optional().isArray().withMessage('tags should be an array of strings'), check('tags.*').optional().isString().withMessage('tags should be an array of strings'), - check('deviceInfo').optional({ nullable: true }).isObject().withMessage('deviceInfo should be an object if provided')] + check('deviceInfo').optional({ nullable: true }).isObject().withMessage('deviceInfo should be an object if provided') +] export const odataValidator = (): any => [ query('$top')