@tangible/jitsu-elasticsearch-destination
Version:
Elasticsearch destination plugin for Jitsu
53 lines (45 loc) • 1.69 kB
text/typescript
import {DefaultJitsuEvent} from "@jitsu/types/event";
import {DestinationFunction, DestinationMessage, JitsuDestinationContext} from "@jitsu/types/extension";
export type ElasticsearchDestinationConfig = {
anonymous?: boolean,
elasticsearch_domain: string,
elasticsearch_port: string,
elasticsearch_target: string,
elasticsearch_apikey: string,
}
export const JitsuElasticsearch: DestinationFunction<DefaultJitsuEvent, ElasticsearchDestinationConfig> = (event: DefaultJitsuEvent, dstContext: JitsuDestinationContext<ElasticsearchDestinationConfig>) => {
const context = event.eventn_ctx || event;
const config = dstContext.config
// Remove JITSU fields
if(context.JITSU_ENVELOP){
delete context["JITSU_ENVELOP"];
}
if(context.__HTTP_CONTEXT__){
delete context["__HTTP_CONTEXT__"];
}
if(config.anonymous){
context.source_ip = "000.000.000.000"; // masl ip
if(context.ids){
context.ids.ga = "undefined"; // mask ga
}
}
const myHeaders = {
"Authorization": "ApiKey "+config.elasticsearch_apikey,
"Content-Type": "application/json",
"User-Agent": context.user_agent,
"X-Forwarded-For": context.source_ip,
}
var posturl = config.elasticsearch_domain;
if(typeof config.elasticsearch_port !== "undefined" && config.elasticsearch_port !== ""){
posturl = posturl + ":" + config.elasticsearch_port
}
posturl = posturl + "/" + config.elasticsearch_target + "/_doc/"
let envelops:DestinationMessage[] = [];
envelops.push({
method: "POST",
url: posturl,
headers: myHeaders,
body:context
});
return envelops;
}