Function Source | Yext Hitchhikers Platform

Overview

Functions can serve as a data source for a connector. When the connector is run, the function will be invoked.

Similar to Function transforms, the Function must have a string => string signature, meaning it will take a single string argument and return a single string. However, when using a function as a connector source, the strings passed into and returned by the function should be stringified JSON objects.

Formatting the Function

The string that should be passed in the function will be a stringified JSON object that has one key: pageToken. This is so that your function can support API pagination.

The first time the function is invoked by your connector, the pageToken value will be blank. If your function needs to be invoked more than once to fetch multiple pages of data, a nextPageToken value can be passed back into the function.

Returning Data

Once a function invocation is complete, it should return a stringified JSON object that has two keys: data and nextPageToken.

data is the JSON data returned by the function — it must be valid JSON structure in order to be processed by the connector.

nextPageToken is an optional value that should be set if there are more pages of data to be fetched. The value for nextPageToken is passed back to the function in the pageToken key as described above. If no nextPageToken is returned, the connector will assume there are no more pages of data to fetch and will not invoke the function again.

export async function myCustomDataSource(inputString: string): string {
    const inputJson = JSON.parse(inputString)
    const pageToken = inputJson["pageToken"]
    
    let requestUrl = 'https://myrequesturl.com'
    if (pageToken != null) {
        requestUrl = `${requestUrl}&pagination_token=${pageToken}`
    }

    const response = await fetch(requestUrl).then(response => response.json())
    const nextPageToken = response["meta"]["next_token"]
    const outputString = JSON.stringify({"data": response, "nextPageToken": nextPageToken})

    return outputString;
}