diff --git a/plugins/NinjaOne/v1/dataStreams/activities.json b/plugins/NinjaOne/v1/dataStreams/activities.json index 2fe1a87c..fe45d2f4 100644 --- a/plugins/NinjaOne/v1/dataStreams/activities.json +++ b/plugins/NinjaOne/v1/dataStreams/activities.json @@ -14,11 +14,11 @@ "getArgs": [ { "key": "after", - "value": "{{timeframe.start}}" + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' ? null : timeframe.start}}" }, { "key": "before", - "value": "{{timeframe.end}}" + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' ? null : timeframe.end}}" }, { "key": "pageSize", @@ -110,5 +110,6 @@ "lastQuarter", "lastYear", "none" - ] + ], + "supportsNoneTimeframe": true } diff --git a/plugins/NinjaOne/v1/dataStreams/antivirusStatus.json b/plugins/NinjaOne/v1/dataStreams/antivirusStatus.json index e12c25ee..3b1b607e 100644 --- a/plugins/NinjaOne/v1/dataStreams/antivirusStatus.json +++ b/plugins/NinjaOne/v1/dataStreams/antivirusStatus.json @@ -2,7 +2,7 @@ "name": "antivirusStatus", "displayName": "Antivirus Status", "tags": ["Security"], - "description": "Antivirus product status and definition updates", + "description": "Antivirus product status and definition updates (timeframe filters on when each record was last collected)", "baseDataSourceName": "httpRequestUnscoped", "config": { "httpMethod": "get", @@ -24,11 +24,11 @@ }, "expandInnerObjects": false, "endpointPath": "/v2/queries/antivirus-status", - "pathToData": "results", + "postRequestScript": "collectionWindow.js", "getArgs": [ { "key": "ts", - "value": "{{timeframe.end}}" + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' || timeframe.unixStart == null ? null : 'after ' + timeframe.unixStart}}" } ], "headers": [] @@ -74,7 +74,7 @@ }, { "name": "timestamp", - "displayName": "Last Updated", + "displayName": "Collection Time", "shape": [ "date", { @@ -99,5 +99,7 @@ "lastQuarter", "lastYear", "none" - ] + ], + "supportsNoneTimeframe": true, + "defaultTimeframe": "none" } diff --git a/plugins/NinjaOne/v1/dataStreams/antivirusThreats.json b/plugins/NinjaOne/v1/dataStreams/antivirusThreats.json index 24120443..631279f6 100644 --- a/plugins/NinjaOne/v1/dataStreams/antivirusThreats.json +++ b/plugins/NinjaOne/v1/dataStreams/antivirusThreats.json @@ -2,7 +2,7 @@ "name": "antivirusThreats", "displayName": "Antivirus Threats", "tags": ["Security"], - "description": "Detected antivirus threats with quarantine status", + "description": "Detected antivirus threats with quarantine status (timeframe filters on when each record was last collected)", "baseDataSourceName": "httpRequestUnscoped", "config": { "httpMethod": "get", @@ -24,11 +24,11 @@ }, "expandInnerObjects": false, "endpointPath": "/v2/queries/antivirus-threats", - "pathToData": "results", + "postRequestScript": "collectionWindow.js", "getArgs": [ { "key": "ts", - "value": "{{timeframe.end}}" + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' || timeframe.unixStart == null ? null : 'after ' + timeframe.unixStart}}" } ], "headers": [] @@ -98,6 +98,16 @@ "displayName": "Action Taken", "shape": "string" }, + { + "name": "timestamp", + "displayName": "Collection Time", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, { "pattern": ".*" } @@ -115,5 +125,7 @@ "lastQuarter", "lastYear", "none" - ] + ], + "supportsNoneTimeframe": true, + "defaultTimeframe": "none" } diff --git a/plugins/NinjaOne/v1/dataStreams/backupJobs.json b/plugins/NinjaOne/v1/dataStreams/backupJobs.json index c7776f98..2ddddf6e 100644 --- a/plugins/NinjaOne/v1/dataStreams/backupJobs.json +++ b/plugins/NinjaOne/v1/dataStreams/backupJobs.json @@ -28,7 +28,7 @@ "getArgs": [ { "key": "stf", - "value": "startTime after {{timeframe.start}}" + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' || timeframe.start == null || timeframe.end == null ? null : 'startTime between ' + timeframe.start + ' and ' + timeframe.end}}" } ], "headers": [] @@ -178,5 +178,6 @@ "lastQuarter", "lastYear", "none" - ] + ], + "supportsNoneTimeframe": true } diff --git a/plugins/NinjaOne/v1/dataStreams/computerSystems.json b/plugins/NinjaOne/v1/dataStreams/computerSystems.json index f2e63712..8a2ea362 100644 --- a/plugins/NinjaOne/v1/dataStreams/computerSystems.json +++ b/plugins/NinjaOne/v1/dataStreams/computerSystems.json @@ -2,7 +2,7 @@ "name": "computerSystems", "displayName": "Computer Systems", "tags": ["Monitoring"], - "description": "Hardware information including manufacturer, model, and serial number", + "description": "Hardware information including manufacturer, model, and serial number (timeframe filters on when each record was last collected)", "baseDataSourceName": "httpRequestUnscoped", "config": { "httpMethod": "get", @@ -24,11 +24,11 @@ }, "expandInnerObjects": false, "endpointPath": "/v2/queries/computer-systems", - "pathToData": "results", + "postRequestScript": "collectionWindow.js", "getArgs": [ { "key": "ts", - "value": "{{timeframe.end}}" + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' || timeframe.unixStart == null ? null : 'after ' + timeframe.unixStart}}" } ], "headers": [] @@ -77,6 +77,16 @@ "displayName": "Workgroup", "shape": "string" }, + { + "name": "timestamp", + "displayName": "Collection Time", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, { "pattern": ".*" } @@ -94,5 +104,7 @@ "lastQuarter", "lastYear", "none" - ] + ], + "supportsNoneTimeframe": true, + "defaultTimeframe": "none" } diff --git a/plugins/NinjaOne/v1/dataStreams/disksGlobal.json b/plugins/NinjaOne/v1/dataStreams/disksGlobal.json index 58dc1ce3..fd4b4aac 100644 --- a/plugins/NinjaOne/v1/dataStreams/disksGlobal.json +++ b/plugins/NinjaOne/v1/dataStreams/disksGlobal.json @@ -2,7 +2,7 @@ "name": "disksGlobal", "displayName": "Devices (Disks Global)", "tags": ["Monitoring"], - "description": "Physical disk inventory with SMART status across all devices", + "description": "Physical disk inventory with SMART status across all devices (timeframe filters on when each record was last collected)", "baseDataSourceName": "httpRequestUnscoped", "config": { "httpMethod": "get", @@ -24,11 +24,11 @@ }, "expandInnerObjects": false, "endpointPath": "/v2/queries/disks", - "pathToData": "results", + "postRequestScript": "collectionWindow.js", "getArgs": [ { "key": "ts", - "value": "{{timeframe.end}}" + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' || timeframe.unixStart == null ? null : 'after ' + timeframe.unixStart}}" } ], "headers": [] @@ -102,6 +102,16 @@ } ] }, + { + "name": "timestamp", + "displayName": "Collection Time", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, { "pattern": ".*" } @@ -119,5 +129,7 @@ "lastQuarter", "lastYear", "none" - ] + ], + "supportsNoneTimeframe": true, + "defaultTimeframe": "none" } diff --git a/plugins/NinjaOne/v1/dataStreams/networkInterfacesGlobal.json b/plugins/NinjaOne/v1/dataStreams/networkInterfacesGlobal.json index 22be1bee..3c7ee60d 100644 --- a/plugins/NinjaOne/v1/dataStreams/networkInterfacesGlobal.json +++ b/plugins/NinjaOne/v1/dataStreams/networkInterfacesGlobal.json @@ -25,12 +25,7 @@ "expandInnerObjects": true, "endpointPath": "/v2/queries/network-interfaces", "pathToData": "results", - "getArgs": [ - { - "key": "ts", - "value": "{{timeframe.end}}" - } - ], + "getArgs": [], "headers": [] }, "metadata": [ @@ -116,18 +111,5 @@ "pattern": ".*" } ], - "timeframes": [ - "last1hour", - "last12hours", - "last24hours", - "last7days", - "last30days", - "thisMonth", - "thisQuarter", - "thisYear", - "lastMonth", - "lastQuarter", - "lastYear", - "none" - ] + "timeframes": false } diff --git a/plugins/NinjaOne/v1/dataStreams/operatingSystems.json b/plugins/NinjaOne/v1/dataStreams/operatingSystems.json index 887a16f8..d2738977 100644 --- a/plugins/NinjaOne/v1/dataStreams/operatingSystems.json +++ b/plugins/NinjaOne/v1/dataStreams/operatingSystems.json @@ -2,7 +2,7 @@ "name": "operatingSystems", "displayName": "Devices (Operating Systems)", "tags": ["Monitoring"], - "description": "OS details with reboot requirements", + "description": "OS details with reboot requirements (timeframe filters on when each record was last collected)", "baseDataSourceName": "httpRequestUnscoped", "config": { "httpMethod": "get", @@ -24,11 +24,11 @@ }, "expandInnerObjects": false, "endpointPath": "/v2/queries/operating-systems", - "pathToData": "results", + "postRequestScript": "collectionWindow.js", "getArgs": [ { "key": "ts", - "value": "{{timeframe.end}}" + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' || timeframe.unixStart == null ? null : 'after ' + timeframe.unixStart}}" } ], "headers": [] @@ -92,6 +92,16 @@ } ] }, + { + "name": "timestamp", + "displayName": "Collection Time", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, { "pattern": ".*" } @@ -109,5 +119,7 @@ "lastQuarter", "lastYear", "none" - ] + ], + "supportsNoneTimeframe": true, + "defaultTimeframe": "none" } diff --git a/plugins/NinjaOne/v1/dataStreams/osPatches.json b/plugins/NinjaOne/v1/dataStreams/osPatches.json index aa7b80b7..e9247d8b 100644 --- a/plugins/NinjaOne/v1/dataStreams/osPatches.json +++ b/plugins/NinjaOne/v1/dataStreams/osPatches.json @@ -2,7 +2,7 @@ "name": "osPatches", "displayName": "OS Patches", "tags": ["Security"], - "description": "OS patch compliance status including pending, failed, and installed patches", + "description": "OS patch compliance status including pending, failed, and installed patches (timeframe filters on when each record was last collected)", "baseDataSourceName": "httpRequestUnscoped", "config": { "httpMethod": "get", @@ -24,11 +24,11 @@ }, "expandInnerObjects": false, "endpointPath": "/v2/queries/os-patches", - "pathToData": "results", + "postRequestScript": "collectionWindow.js", "getArgs": [ { "key": "ts", - "value": "{{timeframe.end}}" + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' || timeframe.unixStart == null ? null : 'after ' + timeframe.unixStart}}" } ], "headers": [] @@ -93,6 +93,16 @@ } ] }, + { + "name": "timestamp", + "displayName": "Collection Time", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, { "pattern": ".*" } @@ -110,5 +120,7 @@ "lastQuarter", "lastYear", "none" - ] + ], + "supportsNoneTimeframe": true, + "defaultTimeframe": "none" } diff --git a/plugins/NinjaOne/v1/dataStreams/policyOverrides.json b/plugins/NinjaOne/v1/dataStreams/policyOverrides.json index 771293f7..d6be48f2 100644 --- a/plugins/NinjaOne/v1/dataStreams/policyOverrides.json +++ b/plugins/NinjaOne/v1/dataStreams/policyOverrides.json @@ -25,12 +25,7 @@ "expandInnerObjects": true, "endpointPath": "/v2/queries/policy-overrides", "pathToData": "results", - "getArgs": [ - { - "key": "ts", - "value": "{{timeframe.end}}" - } - ], + "getArgs": [], "headers": [] }, "metadata": [ @@ -91,18 +86,5 @@ "pattern": ".*" } ], - "timeframes": [ - "last1hour", - "last12hours", - "last24hours", - "last7days", - "last30days", - "thisMonth", - "thisQuarter", - "thisYear", - "lastMonth", - "lastQuarter", - "lastYear", - "none" - ] + "timeframes": false } diff --git a/plugins/NinjaOne/v1/dataStreams/processorsGlobal.json b/plugins/NinjaOne/v1/dataStreams/processorsGlobal.json index 3a0dcef7..9cd06c9b 100644 --- a/plugins/NinjaOne/v1/dataStreams/processorsGlobal.json +++ b/plugins/NinjaOne/v1/dataStreams/processorsGlobal.json @@ -2,7 +2,7 @@ "name": "processorsGlobal", "displayName": "Devices (Processors Global)", "tags": ["Monitoring"], - "description": "CPU information and specifications across all devices", + "description": "CPU information and specifications across all devices (timeframe filters on when each record was last collected)", "baseDataSourceName": "httpRequestUnscoped", "config": { "httpMethod": "get", @@ -24,11 +24,11 @@ }, "expandInnerObjects": false, "endpointPath": "/v2/queries/processors", - "pathToData": "results", + "postRequestScript": "collectionWindow.js", "getArgs": [ { "key": "ts", - "value": "{{timeframe.end}}" + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' || timeframe.unixStart == null ? null : 'after ' + timeframe.unixStart}}" } ], "headers": [] @@ -97,6 +97,16 @@ } ] }, + { + "name": "timestamp", + "displayName": "Collection Time", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, { "pattern": ".*" } @@ -114,5 +124,7 @@ "lastQuarter", "lastYear", "none" - ] + ], + "supportsNoneTimeframe": true, + "defaultTimeframe": "none" } diff --git a/plugins/NinjaOne/v1/dataStreams/scripts/collectionWindow.js b/plugins/NinjaOne/v1/dataStreams/scripts/collectionWindow.js new file mode 100644 index 00000000..b335d201 --- /dev/null +++ b/plugins/NinjaOne/v1/dataStreams/scripts/collectionWindow.js @@ -0,0 +1,48 @@ +// Applies the upper end of the timeframe to a /v2/queries/* monitoring snapshot, and +// serialises the epoch timestamps those endpoints return. +// +// NinjaOne's `ts` filter accepts exactly one clause - `after X` and `before Y` each work +// alone, but `after X and before Y`, `between X and Y` and a repeated `ts` arg all fail +// (500 InvalidFilterException, or the second clause is silently ignored). So the request +// supplies the lower bound as `after unixStart` and the upper bound is applied here. Same +// split as Vercel's deployments.js, for the same reason. +// +// Cheap by construction: these endpoints return one current row per item and hold no +// history, so a wider window never returns more rows than an unfiltered request - this +// trims at most one inventory table. +const items = (data && data.results ? data.results : (Array.isArray(data) ? data : [])); + +// `timeframe.start`/`end` still resolve to a default 24-hour window when the tile is set to +// "None", so the enum has to be checked explicitly - reading unixEnd alone would apply a +// silent 24-hour filter to a request the user asked to be unfiltered. +const tf = context.timeframe || {}; +const endTime = tf.enum === 'none' ? null : tf.unixEnd; + +// Rows with no `timestamp` never reach this filter: whenever a window is selected the +// request carries `after unixStart`, which NinjaOne already applies server-side, and it +// drops them. The typeof check is belt-and-braces. +const kept = typeof endTime === 'number' + ? items.filter((item) => typeof item.timestamp === 'number' && item.timestamp <= endTime) + : items; + +// Every date column on these endpoints is declared `number`/`double` in NinjaOne's spec, +// so convert to ISO 8601 for the `date` shape. Named rather than key-sniffed: the +// recursive helper the other scripts share matches on substrings and silently misses +// fields (devices.js drops `created` and the backup job dates that way). +// Runs after the filter, which compares against unixEnd in epoch seconds. +const EPOCH_FIELDS = ['timestamp', 'detectedAt', 'lastBootTime', 'installedAt']; + +const toIso = (value) => + typeof value === 'number' && value > 1000000000 && value < 10000000000 + ? new Date(value * 1000).toISOString() + : value; + +result = kept.map((item) => { + const row = { ...item }; + EPOCH_FIELDS.forEach((field) => { + if (field in row) { + row[field] = toIso(row[field]); + } + }); + return row; +}); diff --git a/plugins/NinjaOne/v1/dataStreams/scripts/tickets.js b/plugins/NinjaOne/v1/dataStreams/scripts/tickets.js index 63a2d7f7..a33cb652 100644 --- a/plugins/NinjaOne/v1/dataStreams/scripts/tickets.js +++ b/plugins/NinjaOne/v1/dataStreams/scripts/tickets.js @@ -1,12 +1,14 @@ // Process NinjaOne ticketing board data const items = (data && data.data && Array.isArray(data.data)) ? data.data : (Array.isArray(data) ? data : []); -// SquaredUp timeframe (Unix seconds). If substitution doesn't happen the -// parseInt yields NaN and hasTimeframe is false — filter is skipped and all -// rows pass through. -const startTime = parseInt('{{timeframe.unixStart}}'); -const endTime = parseInt('{{timeframe.unixEnd}}'); -const hasTimeframe = !isNaN(startTime) && !isNaN(endTime); +// context.timeframe.unixStart/unixEnd still resolve to a default 24-hour window +// when the tile is set to "None", so the enum has to be checked explicitly — +// reading the unix values alone would apply a silent 24-hour filter to a +// request the user asked to be unfiltered. +const tf = context.timeframe || {}; +const hasTimeframe = tf.enum !== 'none' && typeof tf.unixStart === 'number' && typeof tf.unixEnd === 'number'; +const startTime = tf.unixStart; +const endTime = tf.unixEnd; /** * Recursively converts NinjaOne Unix timestamps (seconds) to ISO strings. diff --git a/plugins/NinjaOne/v1/dataStreams/software.json b/plugins/NinjaOne/v1/dataStreams/software.json index e9ecdf10..c5524835 100644 --- a/plugins/NinjaOne/v1/dataStreams/software.json +++ b/plugins/NinjaOne/v1/dataStreams/software.json @@ -2,7 +2,7 @@ "name": "software", "displayName": "Software", "tags": ["Security"], - "description": "Installed software inventory", + "description": "Installed software inventory (timeframe filters on install date)", "baseDataSourceName": "httpRequestScoped", "config": { "httpMethod": "get", @@ -26,7 +26,16 @@ "endpointPath": "/v2/queries/software", "postRequestScript": "software.js", "pathToData": "results", - "getArgs": [], + "getArgs": [ + { + "key": "installedAfter", + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' ? null : timeframe.start}}" + }, + { + "key": "installedBefore", + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' ? null : timeframe.end}}" + } + ], "headers": [] }, "matches": { @@ -81,5 +90,19 @@ "pattern": ".*" } ], - "timeframes": false + "timeframes": [ + "last1hour", + "last12hours", + "last24hours", + "last7days", + "last30days", + "thisMonth", + "thisQuarter", + "thisYear", + "lastMonth", + "lastQuarter", + "lastYear", + "none" + ], + "supportsNoneTimeframe": true } diff --git a/plugins/NinjaOne/v1/dataStreams/softwareGlobal.json b/plugins/NinjaOne/v1/dataStreams/softwareGlobal.json index 63414aae..37df0e77 100644 --- a/plugins/NinjaOne/v1/dataStreams/softwareGlobal.json +++ b/plugins/NinjaOne/v1/dataStreams/softwareGlobal.json @@ -28,11 +28,11 @@ "getArgs": [ { "key": "installedAfter", - "value": "{{timeframe.start}}" + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' ? null : timeframe.start}}" }, { "key": "installedBefore", - "value": "{{timeframe.end}}" + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' ? null : timeframe.end}}" } ], "headers": [] @@ -102,5 +102,6 @@ "lastQuarter", "lastYear", "none" - ] + ], + "supportsNoneTimeframe": true } diff --git a/plugins/NinjaOne/v1/dataStreams/softwarePatches.json b/plugins/NinjaOne/v1/dataStreams/softwarePatches.json index aefa1408..7c4a6f70 100644 --- a/plugins/NinjaOne/v1/dataStreams/softwarePatches.json +++ b/plugins/NinjaOne/v1/dataStreams/softwarePatches.json @@ -2,7 +2,7 @@ "name": "softwarePatches", "displayName": "Software Patches", "tags": ["Security"], - "description": "Third-party software patch compliance status including pending, failed, and installed patches", + "description": "Third-party software patch compliance status including pending, failed, and installed patches (timeframe filters on when each record was last collected)", "baseDataSourceName": "httpRequestUnscoped", "config": { "httpMethod": "get", @@ -24,11 +24,11 @@ }, "expandInnerObjects": false, "endpointPath": "/v2/queries/software-patches", - "pathToData": "results", + "postRequestScript": "collectionWindow.js", "getArgs": [ { "key": "ts", - "value": "{{timeframe.end}}" + "value": "{{typeof timeframe === 'undefined' || timeframe.enum === 'none' || timeframe.unixStart == null ? null : 'after ' + timeframe.unixStart}}" } ], "headers": [] @@ -98,6 +98,16 @@ } ] }, + { + "name": "timestamp", + "displayName": "Collection Time", + "shape": [ + "date", + { + "timeZone": "Etc/UTC" + } + ] + }, { "pattern": ".*" } @@ -115,5 +125,7 @@ "lastQuarter", "lastYear", "none" - ] + ], + "supportsNoneTimeframe": true, + "defaultTimeframe": "none" } diff --git a/plugins/NinjaOne/v1/dataStreams/tickets.json b/plugins/NinjaOne/v1/dataStreams/tickets.json index 7f324b8c..084f1e4d 100644 --- a/plugins/NinjaOne/v1/dataStreams/tickets.json +++ b/plugins/NinjaOne/v1/dataStreams/tickets.json @@ -185,5 +185,6 @@ "lastQuarter", "lastYear", "none" - ] + ], + "supportsNoneTimeframe": true } diff --git a/plugins/NinjaOne/v1/dataStreams/volumesGlobal.json b/plugins/NinjaOne/v1/dataStreams/volumesGlobal.json index 6ad3113a..12c74d33 100644 --- a/plugins/NinjaOne/v1/dataStreams/volumesGlobal.json +++ b/plugins/NinjaOne/v1/dataStreams/volumesGlobal.json @@ -29,10 +29,6 @@ { "key": "include", "value": "bl" - }, - { - "key": "ts", - "value": "{{timeframe.end}}" } ], "headers": [] @@ -94,18 +90,5 @@ "pattern": ".*" } ], - "timeframes": [ - "last1hour", - "last12hours", - "last24hours", - "last7days", - "last30days", - "thisMonth", - "thisQuarter", - "thisYear", - "lastMonth", - "lastQuarter", - "lastYear", - "none" - ] + "timeframes": false } diff --git a/plugins/NinjaOne/v1/dataStreams/windowsServices.json b/plugins/NinjaOne/v1/dataStreams/windowsServices.json index a356b477..d544ca52 100644 --- a/plugins/NinjaOne/v1/dataStreams/windowsServices.json +++ b/plugins/NinjaOne/v1/dataStreams/windowsServices.json @@ -25,12 +25,7 @@ "expandInnerObjects": false, "endpointPath": "/v2/queries/windows-services", "pathToData": "results", - "getArgs": [ - { - "key": "ts", - "value": "{{timeframe.end}}" - } - ], + "getArgs": [], "headers": [] }, "metadata": [ @@ -86,18 +81,5 @@ "pattern": ".*" } ], - "timeframes": [ - "last1hour", - "last12hours", - "last24hours", - "last7days", - "last30days", - "thisMonth", - "thisQuarter", - "thisYear", - "lastMonth", - "lastQuarter", - "lastYear", - "none" - ] + "timeframes": false } diff --git a/plugins/NinjaOne/v1/metadata.json b/plugins/NinjaOne/v1/metadata.json index 1d47b40e..69b8399b 100644 --- a/plugins/NinjaOne/v1/metadata.json +++ b/plugins/NinjaOne/v1/metadata.json @@ -1,7 +1,7 @@ { "name": "ninja-one", "displayName": "NinjaOne", - "version": "1.1.15", + "version": "1.2.0", "author": { "name": "SquaredUp Labs", "type": "labs"