Skip to content

Commit 47a2c42

Browse files
committed
fix(thrive): surface malformed JSON errors, drop redundant limit param
- parseThriveArray/parseThriveJsonObject now throw a descriptive error on malformed JSON instead of silently sending an empty/omitted value - additionalFields parse errors are surfaced to the caller - remove the redundant 'limit' query param (perPage already covers paging and the API prioritises perPage over limit) from the five list tools and block
1 parent 64bebfc commit 47a2c42

20 files changed

Lines changed: 54 additions & 89 deletions

apps/docs/content/docs/en/integrations/thrive.mdx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,6 @@ List audiences and structures in Thrive with pagination.
330330
| `updatedSince` | string | No | Return only audiences updated on or after this date/time \(ISO 8601\) |
331331
| `page` | number | No | Page number for pagination \(default 1\) |
332332
| `perPage` | number | No | Number of results per page \(1-1000, default 100\) |
333-
| `limit` | number | No | Number of results to page through \(1-100, default 100\) |
334333

335334
#### Output
336335

@@ -487,7 +486,6 @@ List the members of a Thrive audience with pagination.
487486
| `audienceId` | string | Yes | The audience id or audience reference |
488487
| `page` | number | No | Page number for pagination \(default 1\) |
489488
| `perPage` | number | No | Number of results per page \(1-1000, default 100\) |
490-
| `limit` | number | No | Number of results to page through \(1-100, default 100\) |
491489

492490
#### Output
493491

@@ -700,7 +698,6 @@ List compliance assignments in Thrive, optionally filtered by audience.
700698
| `updatedSince` | string | No | Return only items updated on or after this date/time \(ISO 8601\) |
701699
| `page` | number | No | Page number for pagination \(default 1\) |
702700
| `perPage` | number | No | Number of results per page \(1-100, default 100\) |
703-
| `limit` | number | No | Number of items to retrieve per page \(1-100, default 100\) |
704701

705702
#### Output
706703

@@ -860,7 +857,6 @@ List enrolments for a compliance assignment in Thrive.
860857
| `status` | string | No | Filter by enrolment status: archived, complete, open, overdue, scheduled, or unassigned |
861858
| `page` | number | No | Page number for pagination \(default 1\) |
862859
| `perPage` | number | No | Number of results per page \(1-100, default 100\) |
863-
| `limit` | number | No | Number of items to retrieve per page \(1-100, default 100\) |
864860

865861
#### Output
866862

@@ -940,7 +936,6 @@ List learning completion records in Thrive, optionally filtered by user or conte
940936
| `completedDateRangeEnd` | string | No | Filter by completedDate \(completedDate <= this date/date-time\) |
941937
| `page` | number | No | Page number for pagination \(default 1\) |
942938
| `perPage` | number | No | Number of results per page \(1-1000, default 1000\) |
943-
| `limit` | number | No | Number of items to retrieve per page \(1-1000, default 1000\) |
944939

945940
#### Output
946941

apps/sim/blocks/blocks/thrive.ts

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,6 @@ const PAGINATED_OPS = [
1717
'list_tags',
1818
]
1919

20-
const LIMIT_OPS = [
21-
'list_audiences',
22-
'list_audience_members',
23-
'list_assignments',
24-
'list_enrolments',
25-
'list_completions',
26-
]
27-
2820
const UPDATED_SINCE_OPS = [
2921
'search_users',
3022
'list_audiences',
@@ -768,14 +760,6 @@ export const ThriveBlock: BlockConfig = {
768760
condition: { field: 'operation', value: PAGINATED_OPS },
769761
mode: 'advanced',
770762
},
771-
{
772-
id: 'limit',
773-
title: 'Limit',
774-
type: 'short-input',
775-
placeholder: 'Items per page (alternative to Per Page)',
776-
condition: { field: 'operation', value: LIMIT_OPS },
777-
mode: 'advanced',
778-
},
779763
],
780764

781765
tools: {
@@ -832,7 +816,7 @@ export const ThriveBlock: BlockConfig = {
832816
tool: (params) => `thrive_${params.operation}`,
833817
params: (params) => {
834818
const result: Record<string, unknown> = {}
835-
const numberFields = ['page', 'perPage', 'limit', 'completionPeriod', 'recurrence']
819+
const numberFields = ['page', 'perPage', 'completionPeriod', 'recurrence']
836820
for (const field of numberFields) {
837821
const value = params[field]
838822
if (value !== undefined && value !== '') result[field] = Number(value)
@@ -928,7 +912,6 @@ export const ThriveBlock: BlockConfig = {
928912
updatedSince: { type: 'string', description: 'Return items updated on/after this date/time' },
929913
page: { type: 'number', description: 'Page number for pagination' },
930914
perPage: { type: 'number', description: 'Number of results per page' },
931-
limit: { type: 'number', description: 'Items per page (alternative to perPage)' },
932915
},
933916

934917
outputs: {

apps/sim/tools/thrive/add_audience_managers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export const addAudienceManagersTool: ToolConfig<
5656
`${getThriveBaseUrl(params.host, 'v1')}/audiences/${encodeURIComponent(params.audienceId)}/managers`,
5757
method: 'POST',
5858
headers: (params) => getThriveHeaders(params.tenantId, params.apiKey),
59-
body: (params) => JSON.stringify(parseThriveArray(params.managers)),
59+
body: (params) => JSON.stringify(parseThriveArray(params.managers, 'managers')),
6060
},
6161

6262
transformResponse: async (response: Response): Promise<ThriveAddUsersResponse> => {

apps/sim/tools/thrive/add_audience_members.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export const addAudienceMembersTool: ToolConfig<ThriveAudienceUsersParams, Thriv
5454
`${getThriveBaseUrl(params.host, 'v1')}/audiences/${encodeURIComponent(params.audienceId)}/members`,
5555
method: 'POST',
5656
headers: (params) => getThriveHeaders(params.tenantId, params.apiKey),
57-
body: (params) => JSON.stringify(parseThriveArray<string>(params.users)),
57+
body: (params) => JSON.stringify(parseThriveArray<string>(params.users, 'users')),
5858
},
5959

6060
transformResponse: async (response: Response): Promise<ThriveAddUsersResponse> => {

apps/sim/tools/thrive/add_user_tags.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export const addUserTagsTool: ToolConfig<ThriveAddUserTagsParams, ThriveMessageR
5151
`${getThriveBaseUrl(params.host, 'v1')}/users/${encodeURIComponent(params.userId)}/tags`,
5252
method: 'POST',
5353
headers: (params) => getThriveHeaders(params.tenantId, params.apiKey),
54-
body: (params) => ({ tags: parseThriveArray<string>(params.tags) }),
54+
body: (params) => ({ tags: parseThriveArray<string>(params.tags, 'tags') }),
5555
},
5656

5757
transformResponse: async (response: Response): Promise<ThriveMessageResponse> => {

apps/sim/tools/thrive/create_assignment.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,10 @@ export const createAssignmentTool: ToolConfig<
8484
contentId: params.contentId,
8585
}
8686
if (params.alternativeContentIds) {
87-
body.alternativeContentIds = parseThriveArray<string>(params.alternativeContentIds)
87+
body.alternativeContentIds = parseThriveArray<string>(
88+
params.alternativeContentIds,
89+
'alternativeContentIds'
90+
)
8891
}
8992
if (params.hideAlternativeContent !== undefined) {
9093
body.hideAlternativeContent = params.hideAlternativeContent

apps/sim/tools/thrive/create_user.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import type { ThriveCreateUserParams, ThriveUserResponse } from '@/tools/thrive/types'
22
import { THRIVE_USER_LIFECYCLE_OUTPUT_PROPERTIES } from '@/tools/thrive/types'
3-
import { getThriveBaseUrl, getThriveHeaders, parseThriveResponse } from '@/tools/thrive/utils'
3+
import {
4+
getThriveBaseUrl,
5+
getThriveHeaders,
6+
parseThriveJsonObject,
7+
parseThriveResponse,
8+
} from '@/tools/thrive/utils'
49
import type { ToolConfig } from '@/tools/types'
510

611
export const createUserTool: ToolConfig<ThriveCreateUserParams, ThriveUserResponse> = {
@@ -143,11 +148,7 @@ export const createUserTool: ToolConfig<ThriveCreateUserParams, ThriveUserRespon
143148
if (params.sso !== undefined) body.sso = params.sso
144149
if (params.domain) body.domain = params.domain
145150
if (params.additionalFields) {
146-
try {
147-
body.additionalFields = JSON.parse(params.additionalFields)
148-
} catch {
149-
// Ignore malformed custom-field JSON; the API validates required fields.
150-
}
151+
body.additionalFields = parseThriveJsonObject(params.additionalFields, 'additionalFields')
151152
}
152153
return body
153154
},

apps/sim/tools/thrive/list_assignments.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,6 @@ export const listAssignmentsTool: ToolConfig<
6363
visibility: 'user-or-llm',
6464
description: 'Number of results per page (1-100, default 100)',
6565
},
66-
limit: {
67-
type: 'number',
68-
required: false,
69-
visibility: 'user-or-llm',
70-
description: 'Number of items to retrieve per page (1-100, default 100)',
71-
},
7266
},
7367

7468
request: {
@@ -78,7 +72,6 @@ export const listAssignmentsTool: ToolConfig<
7872
appendThriveQuery(url, 'updatedSince', params.updatedSince)
7973
appendThriveQuery(url, 'page', params.page)
8074
appendThriveQuery(url, 'perPage', params.perPage)
81-
appendThriveQuery(url, 'limit', params.limit)
8275
return url.toString()
8376
},
8477
method: 'GET',

apps/sim/tools/thrive/list_audience_members.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,6 @@ export const listAudienceMembersTool: ToolConfig<
6060
visibility: 'user-or-llm',
6161
description: 'Number of results per page (1-1000, default 100)',
6262
},
63-
limit: {
64-
type: 'number',
65-
required: false,
66-
visibility: 'user-or-llm',
67-
description: 'Number of results to page through (1-100, default 100)',
68-
},
6963
},
7064

7165
request: {
@@ -75,7 +69,6 @@ export const listAudienceMembersTool: ToolConfig<
7569
)
7670
appendThriveQuery(url, 'page', params.page)
7771
appendThriveQuery(url, 'perPage', params.perPage)
78-
appendThriveQuery(url, 'limit', params.limit)
7972
return url.toString()
8073
},
8174
method: 'GET',

apps/sim/tools/thrive/list_audiences.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,6 @@ export const listAudiencesTool: ToolConfig<ThriveListAudiencesParams, ThriveList
6161
visibility: 'user-or-llm',
6262
description: 'Number of results per page (1-1000, default 100)',
6363
},
64-
limit: {
65-
type: 'number',
66-
required: false,
67-
visibility: 'user-or-llm',
68-
description: 'Number of results to page through (1-100, default 100)',
69-
},
7064
},
7165

7266
request: {
@@ -76,7 +70,6 @@ export const listAudiencesTool: ToolConfig<ThriveListAudiencesParams, ThriveList
7670
appendThriveQuery(url, 'updatedSince', params.updatedSince)
7771
appendThriveQuery(url, 'page', params.page)
7872
appendThriveQuery(url, 'perPage', params.perPage)
79-
appendThriveQuery(url, 'limit', params.limit)
8073
return url.toString()
8174
},
8275
method: 'GET',

0 commit comments

Comments
 (0)