Skip to content

Commit 26bd86c

Browse files
Bill LeoutsakosBill Leoutsakos
authored andcommitted
fix(webflow): handle optional pagination metadata
1 parent 374a8dd commit 26bd86c

2 files changed

Lines changed: 35 additions & 5 deletions

File tree

apps/sim/lib/selectors/server/providers/webflow.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,26 @@ describe('Webflow server selector adapter', () => {
7272
expect(mockFetch).toHaveBeenCalledTimes(1)
7373
})
7474

75+
it('continues after a full page when optional pagination fields are omitted', async () => {
76+
const items = Array.from({ length: 100 }, (_, index) => ({
77+
id: index.toString(16).padStart(24, '0'),
78+
fieldData: { name: `Item ${index}` },
79+
}))
80+
mockFetch.mockResolvedValueOnce(
81+
new Response(JSON.stringify({ items, pagination: {} }), { status: 200 })
82+
)
83+
84+
const result = await webflowSelectorAttachments['webflow.items'].execute(
85+
args({ kind: 'list', cursor: '5000' })
86+
)
87+
88+
expect(result.kind).toBe('list')
89+
if (result.kind !== 'list') throw new Error('Expected a list selector result')
90+
expect(result.items).toHaveLength(100)
91+
expect(result.nextCursor).toBe('5100')
92+
expect(mockFetch).toHaveBeenCalledTimes(1)
93+
})
94+
7595
it('hydrates saved items directly and treats a missing item as absent', async () => {
7696
const itemId = '680000000000000000001389'
7797
const missingItemId = '680000000000000000001390'

apps/sim/lib/selectors/server/providers/webflow.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,17 +153,22 @@ async function listItems(args: ExecuteServerSelectorArgs) {
153153
throw new SelectorOptionsUnavailableError()
154154
}
155155

156-
const reportedLimit = requirePaginationNumber(data.pagination.limit, { positive: true })
157-
const reportedOffset = requirePaginationNumber(data.pagination.offset)
158-
const reportedTotal = requirePaginationNumber(data.pagination.total)
156+
const reportedLimit =
157+
data.pagination.limit === undefined
158+
? WEBFLOW_ITEM_PAGE_SIZE
159+
: requirePaginationNumber(data.pagination.limit, { positive: true })
160+
const reportedOffset =
161+
data.pagination.offset === undefined ? offset : requirePaginationNumber(data.pagination.offset)
162+
const reportedTotal =
163+
data.pagination.total === undefined ? undefined : requirePaginationNumber(data.pagination.total)
159164
if (
160165
reportedLimit > WEBFLOW_ITEM_PAGE_SIZE ||
161166
reportedOffset !== offset ||
162167
data.items.length > reportedLimit
163168
) {
164169
throw new SelectorOptionsUnavailableError()
165170
}
166-
if (data.items.length === 0 && reportedOffset < reportedTotal) {
171+
if (data.items.length === 0 && reportedTotal !== undefined && reportedOffset < reportedTotal) {
167172
throw new SelectorOptionsUnavailableError()
168173
}
169174

@@ -181,7 +186,12 @@ async function listItems(args: ExecuteServerSelectorArgs) {
181186
})
182187
return listSelectorResult(
183188
items,
184-
data.items.length > 0 && nextOffset < reportedTotal ? String(nextOffset) : undefined
189+
data.items.length > 0 &&
190+
(reportedTotal === undefined
191+
? data.items.length === reportedLimit
192+
: nextOffset < reportedTotal)
193+
? String(nextOffset)
194+
: undefined
185195
)
186196
}
187197

0 commit comments

Comments
 (0)