From f4363b342ee8566fd973bdf859cb58382bce9dc1 Mon Sep 17 00:00:00 2001 From: Daniel Watts <34212312+Deenk@users.noreply.github.com> Date: Fri, 22 May 2026 14:48:43 +0100 Subject: [PATCH] Disable paging and raise pageSize on NinjaOne array-mode datastreams The 6 datastreams that hit NinjaOne's bare-array endpoints (/v2/devices, /v2/organizations, /v2/locations, plus the 3 scoped variants) were configured with token-mode paging reading metadata.next_page_token from the response. That field doesn't exist - NinjaOne returns a plain JSON array with no envelope or pagination headers - so paging silently stopped after page 1, capping users at 1000 devices. The SquaredUp Web API plugin has no paging mode that fits NinjaOne's pattern of "last item's id as the next cursor" (verified against the API spec, live API response, and the Web API paging support doc). Fixing this properly needs a framework change. As a stopgap, switch to mode: none and request pageSize: 10000 in getArgs. NinjaOne accepts arbitrary pageSize values without error in testing, though we couldn't verify the actual server-side cap on a small test tenant. This matches the precedent already used in activities.json. Co-Authored-By: Claude Opus 4.7 --- plugins/NinjaOne/v1/dataStreams/devices.json | 22 ++++++------------- .../v1/dataStreams/locationDevices.json | 22 ++++++------------- .../NinjaOne/v1/dataStreams/locations.json | 22 ++++++------------- .../v1/dataStreams/organizationDevices.json | 22 ++++++------------- .../v1/dataStreams/organizationLocations.json | 22 ++++++------------- .../v1/dataStreams/organizations.json | 22 ++++++------------- 6 files changed, 42 insertions(+), 90 deletions(-) diff --git a/plugins/NinjaOne/v1/dataStreams/devices.json b/plugins/NinjaOne/v1/dataStreams/devices.json index 745737a..00c7f1f 100644 --- a/plugins/NinjaOne/v1/dataStreams/devices.json +++ b/plugins/NinjaOne/v1/dataStreams/devices.json @@ -6,26 +6,18 @@ "config": { "httpMethod": "get", "paging": { - "mode": "token", - "pageSize": { - "realm": "queryArg", - "path": "pageSize", - "value": "1000" - }, - "in": { - "realm": "payload", - "path": "metadata.next_page_token" - }, - "out": { - "realm": "queryArg", - "path": "after" - } + "mode": "none" }, "expandInnerObjects": true, "endpointPath": "/v2/devices", "postRequestScript": "devices.js", "pathToData": "", - "getArgs": [], + "getArgs": [ + { + "key": "pageSize", + "value": "10000" + } + ], "headers": [] }, "metadata": [ diff --git a/plugins/NinjaOne/v1/dataStreams/locationDevices.json b/plugins/NinjaOne/v1/dataStreams/locationDevices.json index a790a4f..541ab4c 100644 --- a/plugins/NinjaOne/v1/dataStreams/locationDevices.json +++ b/plugins/NinjaOne/v1/dataStreams/locationDevices.json @@ -7,26 +7,18 @@ "config": { "httpMethod": "get", "paging": { - "mode": "token", - "pageSize": { - "realm": "queryArg", - "path": "pageSize", - "value": "1000" - }, - "in": { - "realm": "payload", - "path": "metadata.next_page_token" - }, - "out": { - "realm": "queryArg", - "path": "after" - } + "mode": "none" }, "expandInnerObjects": true, "endpointPath": "/v2/devices", "postRequestScript": "locationDevices.js", "pathToData": "", - "getArgs": [], + "getArgs": [ + { + "key": "pageSize", + "value": "10000" + } + ], "headers": [] }, "matches": { diff --git a/plugins/NinjaOne/v1/dataStreams/locations.json b/plugins/NinjaOne/v1/dataStreams/locations.json index 4557794..84b17a8 100644 --- a/plugins/NinjaOne/v1/dataStreams/locations.json +++ b/plugins/NinjaOne/v1/dataStreams/locations.json @@ -7,26 +7,18 @@ "config": { "httpMethod": "get", "paging": { - "mode": "token", - "pageSize": { - "realm": "queryArg", - "path": "pageSize", - "value": "1000" - }, - "in": { - "realm": "payload", - "path": "metadata.next_page_token" - }, - "out": { - "realm": "queryArg", - "path": "after" - } + "mode": "none" }, "expandInnerObjects": true, "endpointPath": "/v2/locations", "postRequestScript": "locations.js", "pathToData": "", - "getArgs": [], + "getArgs": [ + { + "key": "pageSize", + "value": "10000" + } + ], "headers": [] }, "metadata": [ diff --git a/plugins/NinjaOne/v1/dataStreams/organizationDevices.json b/plugins/NinjaOne/v1/dataStreams/organizationDevices.json index 3c918fd..06c2c0e 100644 --- a/plugins/NinjaOne/v1/dataStreams/organizationDevices.json +++ b/plugins/NinjaOne/v1/dataStreams/organizationDevices.json @@ -7,26 +7,18 @@ "config": { "httpMethod": "get", "paging": { - "mode": "token", - "pageSize": { - "realm": "queryArg", - "path": "pageSize", - "value": "1000" - }, - "in": { - "realm": "payload", - "path": "metadata.next_page_token" - }, - "out": { - "realm": "queryArg", - "path": "after" - } + "mode": "none" }, "expandInnerObjects": true, "endpointPath": "/v2/organization/{{objects[0].organizationId}}/devices", "postRequestScript": "devices.js", "pathToData": "", - "getArgs": [], + "getArgs": [ + { + "key": "pageSize", + "value": "10000" + } + ], "headers": [] }, "objectLimit": 1, diff --git a/plugins/NinjaOne/v1/dataStreams/organizationLocations.json b/plugins/NinjaOne/v1/dataStreams/organizationLocations.json index 91ff285..c83b9b6 100644 --- a/plugins/NinjaOne/v1/dataStreams/organizationLocations.json +++ b/plugins/NinjaOne/v1/dataStreams/organizationLocations.json @@ -7,26 +7,18 @@ "config": { "httpMethod": "get", "paging": { - "mode": "token", - "pageSize": { - "realm": "queryArg", - "path": "pageSize", - "value": "1000" - }, - "in": { - "realm": "payload", - "path": "metadata.next_page_token" - }, - "out": { - "realm": "queryArg", - "path": "after" - } + "mode": "none" }, "expandInnerObjects": true, "endpointPath": "/v2/locations", "postRequestScript": "organizationLocations.js", "pathToData": "", - "getArgs": [], + "getArgs": [ + { + "key": "pageSize", + "value": "10000" + } + ], "headers": [] }, "matches": { diff --git a/plugins/NinjaOne/v1/dataStreams/organizations.json b/plugins/NinjaOne/v1/dataStreams/organizations.json index 5eedd54..2334660 100644 --- a/plugins/NinjaOne/v1/dataStreams/organizations.json +++ b/plugins/NinjaOne/v1/dataStreams/organizations.json @@ -6,26 +6,18 @@ "config": { "httpMethod": "get", "paging": { - "mode": "token", - "pageSize": { - "realm": "queryArg", - "path": "pageSize", - "value": "1000" - }, - "in": { - "realm": "payload", - "path": "metadata.next_page_token" - }, - "out": { - "realm": "queryArg", - "path": "after" - } + "mode": "none" }, "expandInnerObjects": true, "endpointPath": "/v2/organizations", "postRequestScript": "organizations.js", "pathToData": "", - "getArgs": [], + "getArgs": [ + { + "key": "pageSize", + "value": "10000" + } + ], "headers": [] }, "metadata": [