console.log('INTEGRATION HOOKS'); var integrations_array = [], functions_array_index = 0, integrations_array_index = 0, testing = false; integrations_array.push({ 'event_hooks':{ 'complete_registration_campaign':{ 'functions':[ { 'name':nationbuilder_callback, 'parameters': ['complete_registration_campaign'] } ] }, 'complete_campaign':{ 'functions':[ { 'name':nationbuilder_callback, 'parameters': ['complete_campaign'] } ] }, } }); console.log( integrations_array ); // nationbuilder Functions function nationbuilder_callback( arr ){ var user_obj = iah_return_user_obj(), nationbuilder_obj = { "email": user_obj.email, "trigger": arr[0], "integration": "nationbuilder", "dataFields": {} }, url = 'https://4kolv9stwi.execute-api.us-west-2.amazonaws.com/production/nationbuilder/callback', callback_func = arr[1], lambda = new AWS.Lambda(), params = { FunctionName: 'da-integration_processor', }; if (enabled_integrations){ if (enabled_integrations.indexOf('nationbuilder') == -1) { callback_func(); return; } } nationbuilder_obj.dataFields['user'] = user_obj; nationbuilder_obj.dataFields['campaign'] = iah_get_campaign_info(); if ( user_obj['cong_info'] ) nationbuilder_obj.dataFields['cong'] = user_obj['cong_info']; if ( getUrlVars() ) nationbuilder_obj.dataFields['meta'] = getUrlVars(); console.log( 'nationbuilder_track_events object', nationbuilder_obj ); params.Payload = JSON.stringify(nationbuilder_obj); lambda.invoke(params, function(err, data){ if (err){ console.log(err, err.stack); }else{ console.log('da-integration-processor data', data); // data = JSON.parse(data.Payload); // console.log('da-integration-processor data 2', data); // nationbuilder_obj.slug = data.slug; // nationbuilder_obj.access_token = data.access_token; // if (data.tag) nationbuilder_obj.tag = data.tag // console.log('updated nationbuilder_obj', nationbuilder_obj); callback_func() // ajax_post(url, nationbuilder_obj, callback_func); } }) // if ( testing ){ // setTimeout(function(){ // console.log( 'nationbuilder_track_events complete', nationbuilder_obj ); // callback_func(); // },1000); // }else{ // $.post( url, JSON.stringify(nationbuilder_obj), function(data){ // console.log( data ); // callback_func(); // }); // } } function ajax_post(url, obj, cb) { console.log('jQuery',jQuery) jQuery.ajax({ url: url, type: 'POST', data: JSON.stringify(obj), cache: false, crossDomain: true, dataType: 'json', contentType: "application/json", success: function(data) { console.log( data ); cb(); } }) } // End nationbuilder Functions var zapier_webhook = 'https://hooks.zapier.com/hooks/catch/5122469/o7tggo3/'; integrations_array.push({ 'event_hooks':{ 'complete_registration_campaign':{ 'functions':[ { 'name':zapier_post_webhook, 'parameters': ['complete_registration_campaign'] } ] }, 'complete_campaign':{ 'functions':[ { 'name':zapier_post_webhook, 'parameters': ['complete_campaign'] } ] }, 'user_signup':{ 'functions':[ { 'name':zapier_post_webhook, 'parameters': ['user_signup'] } ] }, 'on_profile_update':{ 'functions':[ { 'name':zapier_post_webhook, 'parameters': ['on_profile_update'] } ] }, } }); console.log( integrations_array ); // zapier Functions function zapier_post_webhook( arr ){ var user_obj = iah_return_user_obj(), zapier_obj = { "email": user_obj.email, "trigger": arr[0], "integration": "za", "dataFields": {} }, callback_func = arr[1]; var url = zapier_webhook if (enabled_integrations){ if (enabled_integrations.indexOf('zapier') == -1) { callback_func(); return; } } if ("undefined" !== typeof zapier_webhook_override){ url = zapier_webhook_override } zapier_obj.dataFields['user'] = user_obj; zapier_obj.dataFields['campaign'] = iah_get_campaign_info(); if ( user_obj['cong_info'] ) zapier_obj.dataFields['cong'] = user_obj['cong_info']; if ( getUrlVars() ) zapier_obj.dataFields['meta'] = getUrlVars(); console.log( 'zapier_track_events object', zapier_obj ); if ( testing ){ setTimeout(function(){ console.log( 'zapier_track_events complete' ); callback_func(); },1000); }else{ $.post( url, JSON.stringify(zapier_obj), function(data){ console.log( data ); callback_func(); }); } } // End zapier Functions window.iah_integrations_hooks = function( event ){ return new Promise( function(resolve, reject) { if ( integrations_array.length === 0 ){ resolve() return; } var current_integration = integrations_array[integrations_array_index], current_integration_function_obj_array = ( current_integration['event_hooks'][event] ) ? current_integration['event_hooks'][event]['functions'] : [], current_function_obj = ( current_integration_function_obj_array[functions_array_index] ) ? current_integration_function_obj_array[functions_array_index] : null, current_function = ( current_function_obj ) ? current_function_obj['name'] : null, current_function_callback = function(){ // if the function you're on is the last one in the array of functions for the current integration... if ( functions_array_index === current_integration_function_obj_array.length ){ // ... and there are no more integrations left, invoke the original callback and exit this function if ( integrations_array_index === (integrations_array.length - 1) ){ resolve() return; } // otherwise move into the next integration and reset the function counter to zero integrations_array_index ++; functions_array_index = 0; }else{ // if there are functions left in this array, iterate to the next one functions_array_index ++; } resolve(iah_integrations_hooks( event )); }, current_function_parameters = ( current_function_obj && current_function_obj['parameters'] ) ? current_function_obj['parameters'] : []; // if there's a function to be called, push the callback function to the array of parameters if ( current_function ){ current_function_parameters.push( current_function_callback ); current_function( current_function_parameters ); }else{ // otherwise just call the callback function current_function_callback(); } }) }