@rudderstack/integrations-lib
Version:
A comprehensive TypeScript library providing shared utilities, SDKs, and tools for RudderStack integrations and destinations.
80 lines • 11.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const base_sdk_1 = require("../common/base-sdk");
const config_1 = require("./config");
/**
* CriteoAudience SDK for managing audience segments in Criteo
* @class
*/
class CriteoAudience extends base_sdk_1.BaseSDK {
// eslint-disable-next-line class-methods-use-this
validateAuthObject(authObject) {
if (!authObject) {
throw new Error('authObject is required.');
}
if (!authObject.accessToken) {
throw new Error('Criteo Audience accessToken is required.');
}
if (!authObject.refreshAccessTokenFunc) {
throw new Error('Criteo Audience a refresh access token function is required.');
}
}
// eslint-disable-next-line class-methods-use-this
buildRequestUrl(endpoint) {
// Ensure endpoint starts with /
const cleanEndpoint = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;
return `${config_1.BASE_URL}${cleanEndpoint}`;
}
getHeaders() {
return {
authorization: `Bearer ${this.authObject.accessToken}`,
accept: 'application/json',
'content-type': 'application/json',
};
}
// eslint-disable-next-line class-methods-use-this
shouldRetryOnError(response) {
// Retry on 401 (unauthorized) errors for token refresh
if (response.type === 'application-error') {
return (response.statusCode === 401 &&
(response.responseBody.errors[0].code === 'authorization-token-invalid' ||
response.responseBody.errors[0].code === 'authorization-token-expired'));
}
return false;
}
async refreshToken() {
try {
const accessToken = await this.authObject.refreshAccessTokenFunc();
this.authObject.accessToken = accessToken;
}
catch (error) {
throw new Error(`Unable to refresh token, with error: ${error}`);
}
}
/**
* Creates a new audience segment in Criteo
* @param {AudienceSegmentBody} audienceSegmentBody - Audience segment data
* @param {StatTags} statTags - Optional stat tags for metrics and logging
* @returns {Promise<AudienceSegmentData>} Created audience segment data
* @throws {Error} If audience segment creation fails
*/
async createAudienceSegment(audienceSegmentBody, statTags) {
const customStatTags = {
...statTags,
endpointPath: `/marketing-solutions/audience-segments/create`,
};
const createAudienceSegmentResponse = await this.executeRequestWithTokenRefreshAttempts('post', `/marketing-solutions/audience-segments/create`, audienceSegmentBody, customStatTags);
if (createAudienceSegmentResponse.type === 'success') {
const { data } = createAudienceSegmentResponse.responseBody;
if (data && data.length > 0) {
return data[0];
}
}
const errorMessage = createAudienceSegmentResponse.type === 'client-error'
? createAudienceSegmentResponse.message
: JSON.stringify(createAudienceSegmentResponse.responseBody);
throw new Error(`Failed to create audience segment, with error: ${errorMessage}`);
}
}
exports.default = CriteoAudience;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JpdGVvQXVkaWVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2Rrcy9jcml0ZW9BdWRpZW5jZS9jcml0ZW9BdWRpZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLGlEQUE2QztBQUM3QyxxQ0FBb0M7QUFTcEM7OztHQUdHO0FBQ0gsTUFBcUIsY0FBZSxTQUFRLGtCQUFpQztJQUMzRSxrREFBa0Q7SUFDbEQsa0JBQWtCLENBQUMsVUFBc0I7UUFDdkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFDbEYsQ0FBQztJQUNILENBQUM7SUFFRCxrREFBa0Q7SUFDeEMsZUFBZSxDQUFDLFFBQWdCO1FBQ3hDLGdDQUFnQztRQUNoQyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLENBQUM7UUFDM0UsT0FBTyxHQUFHLGlCQUFRLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVTLFVBQVU7UUFDbEIsT0FBTztZQUNMLGFBQWEsRUFBRSxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQ3RELE1BQU0sRUFBRSxrQkFBa0I7WUFDMUIsY0FBYyxFQUFFLGtCQUFrQjtTQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxrQkFBa0IsQ0FBQyxRQUE4QjtRQUMvQyx1REFBdUQ7UUFDdkQsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLG1CQUFtQixFQUFFLENBQUM7WUFDMUMsT0FBTyxDQUNMLFFBQVEsQ0FBQyxVQUFVLEtBQUssR0FBRztnQkFDM0IsQ0FBRSxRQUFRLENBQUMsWUFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLDZCQUE2QjtvQkFDN0UsUUFBUSxDQUFDLFlBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyw2QkFBNkIsQ0FBQyxDQUNuRixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVTLEtBQUssQ0FBQyxZQUFZO1FBQzFCLElBQUksQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUM1QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMscUJBQXFCLENBQ2hDLG1CQUF3QyxFQUN4QyxRQUFtQjtRQUVuQixNQUFNLGNBQWMsR0FBYTtZQUMvQixHQUFHLFFBQVE7WUFDWCxZQUFZLEVBQUUsK0NBQStDO1NBQzlELENBQUM7UUFDRixNQUFNLDZCQUE2QixHQUNqQyxNQUFNLElBQUksQ0FBQyxzQ0FBc0MsQ0FDL0MsTUFBTSxFQUNOLCtDQUErQyxFQUMvQyxtQkFBbUIsRUFDbkIsY0FBYyxDQUNmLENBQUM7UUFDSixJQUFJLDZCQUE2QixDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsNkJBQTZCLENBQUMsWUFBWSxDQUFDO1lBQzVELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQ2hCLDZCQUE2QixDQUFDLElBQUksS0FBSyxjQUFjO1lBQ25ELENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPO1lBQ3ZDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWpFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELFlBQVksRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQztDQUNGO0FBdkZELGlDQXVGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwaVJlc3BvbnNlLCBTdGF0VGFncyB9IGZyb20gJy4uLy4uL25ldHdvcmsvY2xpZW50cy90eXBlcyc7XG5pbXBvcnQgeyBCYXNlU0RLIH0gZnJvbSAnLi4vY29tbW9uL2Jhc2Utc2RrJztcbmltcG9ydCB7IEJBU0VfVVJMIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgQXV0aE9iamVjdCxcbiAgQXVkaWVuY2VTZWdtZW50Qm9keSxcbiAgQXVkaWVuY2VTZWdtZW50UmVzcG9uc2UsXG4gIEF1ZGllbmNlU2VnbWVudERhdGEsXG4gIENyaXRlb0NvbmZpZyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQ3JpdGVvQXVkaWVuY2UgU0RLIGZvciBtYW5hZ2luZyBhdWRpZW5jZSBzZWdtZW50cyBpbiBDcml0ZW9cbiAqIEBjbGFzc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDcml0ZW9BdWRpZW5jZSBleHRlbmRzIEJhc2VTREs8QXV0aE9iamVjdCwgQ3JpdGVvQ29uZmlnPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHZhbGlkYXRlQXV0aE9iamVjdChhdXRoT2JqZWN0OiBBdXRoT2JqZWN0KTogdm9pZCB7XG4gICAgaWYgKCFhdXRoT2JqZWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F1dGhPYmplY3QgaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuICAgIGlmICghYXV0aE9iamVjdC5hY2Nlc3NUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDcml0ZW8gQXVkaWVuY2UgYWNjZXNzVG9rZW4gaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuICAgIGlmICghYXV0aE9iamVjdC5yZWZyZXNoQWNjZXNzVG9rZW5GdW5jKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NyaXRlbyBBdWRpZW5jZSBhIHJlZnJlc2ggYWNjZXNzIHRva2VuIGZ1bmN0aW9uIGlzIHJlcXVpcmVkLicpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHByb3RlY3RlZCBidWlsZFJlcXVlc3RVcmwoZW5kcG9pbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gRW5zdXJlIGVuZHBvaW50IHN0YXJ0cyB3aXRoIC9cbiAgICBjb25zdCBjbGVhbkVuZHBvaW50ID0gZW5kcG9pbnQuc3RhcnRzV2l0aCgnLycpID8gZW5kcG9pbnQgOiBgLyR7ZW5kcG9pbnR9YDtcbiAgICByZXR1cm4gYCR7QkFTRV9VUkx9JHtjbGVhbkVuZHBvaW50fWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SGVhZGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuYXV0aE9iamVjdC5hY2Nlc3NUb2tlbn1gLFxuICAgICAgYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBzaG91bGRSZXRyeU9uRXJyb3IocmVzcG9uc2U6IEFwaVJlc3BvbnNlPHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgLy8gUmV0cnkgb24gNDAxICh1bmF1dGhvcml6ZWQpIGVycm9ycyBmb3IgdG9rZW4gcmVmcmVzaFxuICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnYXBwbGljYXRpb24tZXJyb3InKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MDEgJiZcbiAgICAgICAgKChyZXNwb25zZS5yZXNwb25zZUJvZHkgYXMgYW55KS5lcnJvcnNbMF0uY29kZSA9PT0gJ2F1dGhvcml6YXRpb24tdG9rZW4taW52YWxpZCcgfHxcbiAgICAgICAgICAocmVzcG9uc2UucmVzcG9uc2VCb2R5IGFzIGFueSkuZXJyb3JzWzBdLmNvZGUgPT09ICdhdXRob3JpemF0aW9uLXRva2VuLWV4cGlyZWQnKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlZnJlc2hUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCB0aGlzLmF1dGhPYmplY3QucmVmcmVzaEFjY2Vzc1Rva2VuRnVuYygpO1xuICAgICAgdGhpcy5hdXRoT2JqZWN0LmFjY2Vzc1Rva2VuID0gYWNjZXNzVG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHJlZnJlc2ggdG9rZW4sIHdpdGggZXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYXVkaWVuY2Ugc2VnbWVudCBpbiBDcml0ZW9cbiAgICogQHBhcmFtIHtBdWRpZW5jZVNlZ21lbnRCb2R5fSBhdWRpZW5jZVNlZ21lbnRCb2R5IC0gQXVkaWVuY2Ugc2VnbWVudCBkYXRhXG4gICAqIEBwYXJhbSB7U3RhdFRhZ3N9IHN0YXRUYWdzIC0gT3B0aW9uYWwgc3RhdCB0YWdzIGZvciBtZXRyaWNzIGFuZCBsb2dnaW5nXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEF1ZGllbmNlU2VnbWVudERhdGE+fSBDcmVhdGVkIGF1ZGllbmNlIHNlZ21lbnQgZGF0YVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgYXVkaWVuY2Ugc2VnbWVudCBjcmVhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUF1ZGllbmNlU2VnbWVudChcbiAgICBhdWRpZW5jZVNlZ21lbnRCb2R5OiBBdWRpZW5jZVNlZ21lbnRCb2R5LFxuICAgIHN0YXRUYWdzPzogU3RhdFRhZ3MsXG4gICk6IFByb21pc2U8QXVkaWVuY2VTZWdtZW50RGF0YT4ge1xuICAgIGNvbnN0IGN1c3RvbVN0YXRUYWdzOiBTdGF0VGFncyA9IHtcbiAgICAgIC4uLnN0YXRUYWdzLFxuICAgICAgZW5kcG9pbnRQYXRoOiBgL21hcmtldGluZy1zb2x1dGlvbnMvYXVkaWVuY2Utc2VnbWVudHMvY3JlYXRlYCxcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUF1ZGllbmNlU2VnbWVudFJlc3BvbnNlID1cbiAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVJlcXVlc3RXaXRoVG9rZW5SZWZyZXNoQXR0ZW1wdHM8QXVkaWVuY2VTZWdtZW50UmVzcG9uc2U+KFxuICAgICAgICAncG9zdCcsXG4gICAgICAgIGAvbWFya2V0aW5nLXNvbHV0aW9ucy9hdWRpZW5jZS1zZWdtZW50cy9jcmVhdGVgLFxuICAgICAgICBhdWRpZW5jZVNlZ21lbnRCb2R5LFxuICAgICAgICBjdXN0b21TdGF0VGFncyxcbiAgICAgICk7XG4gICAgaWYgKGNyZWF0ZUF1ZGllbmNlU2VnbWVudFJlc3BvbnNlLnR5cGUgPT09ICdzdWNjZXNzJykge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBjcmVhdGVBdWRpZW5jZVNlZ21lbnRSZXNwb25zZS5yZXNwb25zZUJvZHk7XG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGRhdGFbMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgIGNyZWF0ZUF1ZGllbmNlU2VnbWVudFJlc3BvbnNlLnR5cGUgPT09ICdjbGllbnQtZXJyb3InXG4gICAgICAgID8gY3JlYXRlQXVkaWVuY2VTZWdtZW50UmVzcG9uc2UubWVzc2FnZVxuICAgICAgICA6IEpTT04uc3RyaW5naWZ5KGNyZWF0ZUF1ZGllbmNlU2VnbWVudFJlc3BvbnNlLnJlc3BvbnNlQm9keSk7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgYXVkaWVuY2Ugc2VnbWVudCwgd2l0aCBlcnJvcjogJHtlcnJvck1lc3NhZ2V9YCk7XG4gIH1cbn1cbiJdfQ==