Typeform SDK getAllResponses fixed

This commit is contained in:
Matt Aitken
2023-07-07 19:02:46 +01:00
parent 045a8c56af
commit 89a121f21e
3 changed files with 31 additions and 18 deletions
+5
View File
@@ -0,0 +1,5 @@
---
"@trigger.dev/typeform": patch
---
getAllResponses fixed
+16 -17
View File
@@ -99,34 +99,33 @@ const getAllResponses: AuthenticatedTask<
const pageSize = 50;
async function listResponsesForPage(page: number) {
async function listResponsesForPage(before?: string) {
const pageParams = {
...params,
submitted_at: "desc",
before,
pageSize: pageSize,
};
// @ts-ignore
// This is needed because of the index signature on the response type
return await io.runTask<ListResponsesResponse>(
`page-${page}`,
listResponses.init(params),
return io.runTask<ListResponsesResponse>(
`page${before ? `-before-${before}` : ""}`,
listResponses.init(pageParams),
async (t, io) => {
const subResponse = await listResponses.run(
params,
client,
t,
io,
auth
);
return subResponse;
return await listResponses.run(pageParams, client, t, io, auth);
}
);
}
const firstPage = await listResponsesForPage(1);
const firstPage = await listResponsesForPage();
let token = firstPage.items[firstPage.items.length - 1].token;
const totalPages = Math.ceil(firstPage.total_items / pageSize);
const allResponses = firstPage.items;
for (let i = 2; i <= totalPages; i++) {
const page = await listResponsesForPage(i);
for (let i = 1; i < totalPages; i++) {
const page = await listResponsesForPage(token);
token = page.items[page.items.length - 1].token;
allResponses.push(...page.items);
}
+10 -1
View File
@@ -32,7 +32,16 @@ export type ListResponsesParams = {
fields?: string | string[];
};
export type ListResponsesResponse = Prettify<Typeform.API.Responses.List>;
//fix because the Typeform SDK doesn't have the `token` property on an item…
type ResponseListItem = Prettify<
Typeform.API.Responses.List["items"][number]
> & {
token?: string;
};
export type ListResponsesResponse = Prettify<
Omit<Typeform.API.Responses.List, "items"> & { items: ResponseListItem[] }
>;
export type GetFormParams = {
uid: string;