@customerio/cdp-analytics-node 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.MD +22 -0
- package/README.md +20 -0
- package/dist/cjs/app/analytics-node.js +170 -0
- package/dist/cjs/app/analytics-node.js.map +1 -0
- package/dist/cjs/app/context.js +13 -0
- package/dist/cjs/app/context.js.map +1 -0
- package/dist/cjs/app/dispatch-emit.js +37 -0
- package/dist/cjs/app/dispatch-emit.js.map +1 -0
- package/dist/cjs/app/emitter.js +8 -0
- package/dist/cjs/app/emitter.js.map +1 -0
- package/dist/cjs/app/event-factory.js +12 -0
- package/dist/cjs/app/event-factory.js.map +1 -0
- package/dist/cjs/app/event-queue.js +24 -0
- package/dist/cjs/app/event-queue.js.map +1 -0
- package/dist/cjs/app/settings.js +11 -0
- package/dist/cjs/app/settings.js.map +1 -0
- package/dist/cjs/app/types/event.js +3 -0
- package/dist/cjs/app/types/event.js.map +1 -0
- package/dist/cjs/app/types/index.js +7 -0
- package/dist/cjs/app/types/index.js.map +1 -0
- package/dist/cjs/app/types/params.js +3 -0
- package/dist/cjs/app/types/params.js.map +1 -0
- package/dist/cjs/app/types/plugin.js +3 -0
- package/dist/cjs/app/types/plugin.js.map +1 -0
- package/dist/cjs/generated/version.js +6 -0
- package/dist/cjs/generated/version.js.map +1 -0
- package/dist/cjs/index.js +11 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/abort.js +77 -0
- package/dist/cjs/lib/abort.js.map +1 -0
- package/dist/cjs/lib/base-64-encode.js +19 -0
- package/dist/cjs/lib/base-64-encode.js.map +1 -0
- package/dist/cjs/lib/create-url.js +15 -0
- package/dist/cjs/lib/create-url.js.map +1 -0
- package/dist/cjs/lib/env.js +25 -0
- package/dist/cjs/lib/env.js.map +1 -0
- package/dist/cjs/lib/extract-promise-parts.js +21 -0
- package/dist/cjs/lib/extract-promise-parts.js.map +1 -0
- package/dist/cjs/lib/fetch.js +7 -0
- package/dist/cjs/lib/fetch.js.map +1 -0
- package/dist/cjs/lib/get-message-id.js +14 -0
- package/dist/cjs/lib/get-message-id.js.map +1 -0
- package/dist/cjs/lib/uuid.js +6 -0
- package/dist/cjs/lib/uuid.js.map +1 -0
- package/dist/cjs/plugins/customerio/context-batch.js +55 -0
- package/dist/cjs/plugins/customerio/context-batch.js.map +1 -0
- package/dist/cjs/plugins/customerio/index.js +44 -0
- package/dist/cjs/plugins/customerio/index.js.map +1 -0
- package/dist/cjs/plugins/customerio/publisher.js +189 -0
- package/dist/cjs/plugins/customerio/publisher.js.map +1 -0
- package/dist/esm/app/analytics-node.js +166 -0
- package/dist/esm/app/analytics-node.js.map +1 -0
- package/dist/esm/app/context.js +9 -0
- package/dist/esm/app/context.js.map +1 -0
- package/dist/esm/app/dispatch-emit.js +33 -0
- package/dist/esm/app/dispatch-emit.js.map +1 -0
- package/dist/esm/app/emitter.js +4 -0
- package/dist/esm/app/emitter.js.map +1 -0
- package/dist/esm/app/event-factory.js +8 -0
- package/dist/esm/app/event-factory.js.map +1 -0
- package/dist/esm/app/event-queue.js +20 -0
- package/dist/esm/app/event-queue.js.map +1 -0
- package/dist/esm/app/settings.js +7 -0
- package/dist/esm/app/settings.js.map +1 -0
- package/dist/esm/app/types/event.js +2 -0
- package/dist/esm/app/types/event.js.map +1 -0
- package/dist/esm/app/types/index.js +4 -0
- package/dist/esm/app/types/index.js.map +1 -0
- package/dist/esm/app/types/params.js +2 -0
- package/dist/esm/app/types/params.js.map +1 -0
- package/dist/esm/app/types/plugin.js +2 -0
- package/dist/esm/app/types/plugin.js.map +1 -0
- package/dist/esm/generated/version.js +3 -0
- package/dist/esm/generated/version.js.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/abort.js +73 -0
- package/dist/esm/lib/abort.js.map +1 -0
- package/dist/esm/lib/base-64-encode.js +15 -0
- package/dist/esm/lib/base-64-encode.js.map +1 -0
- package/dist/esm/lib/create-url.js +11 -0
- package/dist/esm/lib/create-url.js.map +1 -0
- package/dist/esm/lib/env.js +21 -0
- package/dist/esm/lib/env.js.map +1 -0
- package/dist/esm/lib/extract-promise-parts.js +17 -0
- package/dist/esm/lib/extract-promise-parts.js.map +1 -0
- package/dist/esm/lib/fetch.js +3 -0
- package/dist/esm/lib/fetch.js.map +1 -0
- package/dist/esm/lib/get-message-id.js +10 -0
- package/dist/esm/lib/get-message-id.js.map +1 -0
- package/dist/esm/lib/uuid.js +2 -0
- package/dist/esm/lib/uuid.js.map +1 -0
- package/dist/esm/plugins/customerio/context-batch.js +51 -0
- package/dist/esm/plugins/customerio/context-batch.js.map +1 -0
- package/dist/esm/plugins/customerio/index.js +39 -0
- package/dist/esm/plugins/customerio/index.js.map +1 -0
- package/dist/esm/plugins/customerio/publisher.js +185 -0
- package/dist/esm/plugins/customerio/publisher.js.map +1 -0
- package/dist/types/app/analytics-node.d.ts +62 -0
- package/dist/types/app/analytics-node.d.ts.map +1 -0
- package/dist/types/app/context.d.ts +6 -0
- package/dist/types/app/context.d.ts.map +1 -0
- package/dist/types/app/dispatch-emit.d.ts +7 -0
- package/dist/types/app/dispatch-emit.d.ts.map +1 -0
- package/dist/types/app/emitter.d.ts +23 -0
- package/dist/types/app/emitter.d.ts.map +1 -0
- package/dist/types/app/event-factory.d.ts +14 -0
- package/dist/types/app/event-factory.d.ts.map +1 -0
- package/dist/types/app/event-queue.d.ts +7 -0
- package/dist/types/app/event-queue.d.ts.map +1 -0
- package/dist/types/app/settings.d.ts +33 -0
- package/dist/types/app/settings.d.ts.map +1 -0
- package/dist/types/app/types/event.d.ts +7 -0
- package/dist/types/app/types/event.d.ts.map +1 -0
- package/dist/types/app/types/index.d.ts +4 -0
- package/dist/types/app/types/index.d.ts.map +1 -0
- package/dist/types/app/types/params.d.ts +60 -0
- package/dist/types/app/types/params.d.ts.map +1 -0
- package/dist/types/app/types/plugin.d.ts +6 -0
- package/dist/types/app/types/plugin.d.ts.map +1 -0
- package/dist/types/generated/version.d.ts +2 -0
- package/dist/types/generated/version.d.ts.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lib/abort.d.ts +6 -0
- package/dist/types/lib/abort.d.ts.map +1 -0
- package/dist/types/lib/base-64-encode.d.ts +5 -0
- package/dist/types/lib/base-64-encode.d.ts.map +1 -0
- package/dist/types/lib/create-url.d.ts +8 -0
- package/dist/types/lib/create-url.d.ts.map +1 -0
- package/dist/types/lib/env.d.ts +3 -0
- package/dist/types/lib/env.d.ts.map +1 -0
- package/dist/types/lib/extract-promise-parts.d.ts +9 -0
- package/dist/types/lib/extract-promise-parts.d.ts.map +1 -0
- package/dist/types/lib/fetch.d.ts +2 -0
- package/dist/types/lib/fetch.d.ts.map +1 -0
- package/dist/types/lib/get-message-id.d.ts +7 -0
- package/dist/types/lib/get-message-id.d.ts.map +1 -0
- package/dist/types/lib/uuid.d.ts +2 -0
- package/dist/types/lib/uuid.d.ts.map +1 -0
- package/dist/types/plugins/customerio/context-batch.d.ts +26 -0
- package/dist/types/plugins/customerio/context-batch.d.ts.map +1 -0
- package/dist/types/plugins/customerio/index.d.ts +13 -0
- package/dist/types/plugins/customerio/index.d.ts.map +1 -0
- package/dist/types/plugins/customerio/publisher.d.ts +38 -0
- package/dist/types/plugins/customerio/publisher.d.ts.map +1 -0
- package/package.json +43 -0
- package/src/app/analytics-node.ts +295 -0
- package/src/app/context.ts +11 -0
- package/src/app/dispatch-emit.ts +42 -0
- package/src/app/emitter.ts +23 -0
- package/src/app/event-factory.ts +20 -0
- package/src/app/event-queue.ts +23 -0
- package/src/app/settings.ts +39 -0
- package/src/app/types/event.ts +7 -0
- package/src/app/types/index.ts +3 -0
- package/src/app/types/params.ts +74 -0
- package/src/app/types/plugin.ts +5 -0
- package/src/generated/version.ts +2 -0
- package/src/index.ts +17 -0
- package/src/lib/abort.ts +77 -0
- package/src/lib/base-64-encode.ts +14 -0
- package/src/lib/create-url.ts +11 -0
- package/src/lib/env.ts +32 -0
- package/src/lib/extract-promise-parts.ts +21 -0
- package/src/lib/fetch.ts +3 -0
- package/src/lib/get-message-id.ts +10 -0
- package/src/lib/uuid.ts +1 -0
- package/src/plugins/customerio/context-batch.ts +71 -0
- package/src/plugins/customerio/index.ts +65 -0
- package/src/plugins/customerio/publisher.ts +258 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../../src/app/types/plugin.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/generated/version.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,MAAM,CAAC,MAAM,OAAO,GAAG,eAAe,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { Analytics } from './app/analytics-node';
|
|
2
|
+
export { Context } from './app/context';
|
|
3
|
+
// export Analytics as both a named export and a default export (for backwards-compat. reasons)
|
|
4
|
+
import { Analytics } from './app/analytics-node';
|
|
5
|
+
export default Analytics;
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAavC,+FAA+F;AAC/F,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,eAAe,SAAS,CAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* use non-native event emitter for the benefit of non-node runtimes like CF workers.
|
|
3
|
+
*/
|
|
4
|
+
import { Emitter } from '@customerio/cdp-analytics-core';
|
|
5
|
+
import { detectRuntime } from './env';
|
|
6
|
+
/**
|
|
7
|
+
* adapted from: https://www.npmjs.com/package/node-abort-controller
|
|
8
|
+
*/
|
|
9
|
+
class AbortSignal {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.onabort = null;
|
|
12
|
+
this.aborted = false;
|
|
13
|
+
this.eventEmitter = new Emitter();
|
|
14
|
+
}
|
|
15
|
+
toString() {
|
|
16
|
+
return '[object AbortSignal]';
|
|
17
|
+
}
|
|
18
|
+
get [Symbol.toStringTag]() {
|
|
19
|
+
return 'AbortSignal';
|
|
20
|
+
}
|
|
21
|
+
removeEventListener(...args) {
|
|
22
|
+
this.eventEmitter.off(...args);
|
|
23
|
+
}
|
|
24
|
+
addEventListener(...args) {
|
|
25
|
+
this.eventEmitter.on(...args);
|
|
26
|
+
}
|
|
27
|
+
dispatchEvent(type) {
|
|
28
|
+
const event = { type, target: this };
|
|
29
|
+
const handlerName = `on${type}`;
|
|
30
|
+
if (typeof this[handlerName] === 'function') {
|
|
31
|
+
;
|
|
32
|
+
this[handlerName](event);
|
|
33
|
+
}
|
|
34
|
+
this.eventEmitter.emit(type, event);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* This polyfill is only neccessary to support versions of node < 14.17.
|
|
39
|
+
* Can be removed once node 14 support is dropped.
|
|
40
|
+
*/
|
|
41
|
+
class AbortController {
|
|
42
|
+
constructor() {
|
|
43
|
+
this.signal = new AbortSignal();
|
|
44
|
+
}
|
|
45
|
+
abort() {
|
|
46
|
+
if (this.signal.aborted)
|
|
47
|
+
return;
|
|
48
|
+
this.signal.aborted = true;
|
|
49
|
+
this.signal.dispatchEvent('abort');
|
|
50
|
+
}
|
|
51
|
+
toString() {
|
|
52
|
+
return '[object AbortController]';
|
|
53
|
+
}
|
|
54
|
+
get [Symbol.toStringTag]() {
|
|
55
|
+
return 'AbortController';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* @param timeoutMs - Set a request timeout, after which the request is cancelled.
|
|
60
|
+
*/
|
|
61
|
+
export const abortSignalAfterTimeout = (timeoutMs) => {
|
|
62
|
+
if (detectRuntime() === 'cloudflare-worker') {
|
|
63
|
+
return []; // TODO: this is broken in cloudflare workers, otherwise results in "A hanging Promise was canceled..." error.
|
|
64
|
+
}
|
|
65
|
+
const ac = new (global.AbortController || AbortController)();
|
|
66
|
+
const timeoutId = setTimeout(() => {
|
|
67
|
+
ac.abort();
|
|
68
|
+
}, timeoutMs);
|
|
69
|
+
// Allow Node.js processes to exit early if only the timeout is running
|
|
70
|
+
timeoutId?.unref?.();
|
|
71
|
+
return [ac.signal, timeoutId];
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=abort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort.js","sourceRoot":"","sources":["../../../src/lib/abort.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC;;GAEG;AACH,MAAM,WAAW;IAAjB;QACE,YAAO,GAAsC,IAAI,CAAA;QACjD,YAAO,GAAG,KAAK,CAAA;QACf,iBAAY,GAAG,IAAI,OAAO,EAAE,CAAA;IAyB9B,CAAC;IAvBC,QAAQ;QACN,OAAO,sBAAsB,CAAA;IAC/B,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,aAAa,CAAA;IACtB,CAAC;IACD,mBAAmB,CAAC,GAAG,IAAgC;QACrD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;IAChC,CAAC;IACD,gBAAgB,CAAC,GAAG,IAA+B;QACjD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;IAC/B,CAAC;IACD,aAAa,CAAC,IAAY;QACxB,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;QAEpC,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE,CAAA;QAE/B,IAAI,OAAQ,IAAY,CAAC,WAAW,CAAC,KAAK,UAAU,EAAE;YACpD,CAAC;YAAE,IAAY,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAA;SACpC;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACrC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,eAAe;IAArB;QACE,WAAM,GAAG,IAAI,WAAW,EAAE,CAAA;IAa5B,CAAC;IAZC,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAM;QAE/B,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;QAC1B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;IACD,QAAQ;QACN,OAAO,0BAA0B,CAAA;IACnC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,iBAAiB,CAAA;IAC1B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,SAAiB,EAAE,EAAE;IAC3D,IAAI,aAAa,EAAE,KAAK,mBAAmB,EAAE;QAC3C,OAAO,EAAE,CAAA,CAAC,8GAA8G;KACzH;IACD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,eAAe,CAAC,EAAE,CAAA;IAE5D,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;QAChC,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC,EAAE,SAAS,CAAC,CAAA;IAEb,uEAAuE;IACvE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAA;IAEpB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAU,CAAA;AACxC,CAAC,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base64 encoder that works in browser, worker, node runtimes.
|
|
3
|
+
*/
|
|
4
|
+
export const b64encode = (str) => {
|
|
5
|
+
if (
|
|
6
|
+
// in node env
|
|
7
|
+
typeof Buffer !== 'undefined') {
|
|
8
|
+
return Buffer.from(str).toString('base64');
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
// in worker env
|
|
12
|
+
return btoa(str);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=base-64-encode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-64-encode.js","sourceRoot":"","sources":["../../../src/lib/base-64-encode.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAU,EAAE;IAC/C;IACE,cAAc;IACd,OAAO,MAAM,KAAK,WAAW,EAC7B;QACA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;KAC3C;SAAM;QACL,gBAAgB;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;KACjB;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const stripTrailingSlash = (str) => str.replace(/\/$/, '');
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @param host e.g. "http://foo.com"
|
|
5
|
+
* @param path e.g. "/bar"
|
|
6
|
+
* @returns "e.g." "http://foo.com/bar"
|
|
7
|
+
*/
|
|
8
|
+
export const tryCreateFormattedUrl = (host, path) => {
|
|
9
|
+
return stripTrailingSlash(new URL(path || '', host).href);
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=create-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-url.js","sourceRoot":"","sources":["../../../src/lib/create-url.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAElE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,IAAa,EAAE,EAAE;IACnE,OAAO,kBAAkB,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAA;AAC3D,CAAC,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const detectRuntime = () => {
|
|
2
|
+
if (typeof process === 'object' && process && process.env) {
|
|
3
|
+
return 'node';
|
|
4
|
+
}
|
|
5
|
+
if (typeof window === 'object') {
|
|
6
|
+
return 'browser';
|
|
7
|
+
}
|
|
8
|
+
// @ts-ignore
|
|
9
|
+
if (typeof WebSocketPair !== 'undefined') {
|
|
10
|
+
return 'cloudflare-worker';
|
|
11
|
+
}
|
|
12
|
+
if (
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
typeof WorkerGlobalScope !== 'undefined' &&
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
typeof importScripts === 'function') {
|
|
17
|
+
return 'web-worker';
|
|
18
|
+
}
|
|
19
|
+
return 'unknown';
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/lib/env.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,aAAa,GAAG,GAAe,EAAE;IAC5C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE;QACzD,OAAO,MAAM,CAAA;KACd;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,OAAO,SAAS,CAAA;KACjB;IAED,aAAa;IACb,IAAI,OAAO,aAAa,KAAK,WAAW,EAAE;QACxC,OAAO,mBAAmB,CAAA;KAC3B;IAED;IACE,aAAa;IACb,OAAO,iBAAiB,KAAK,WAAW;QACxC,aAAa;QACb,OAAO,aAAa,KAAK,UAAU,EACnC;QACA,OAAO,YAAY,CAAA;KACpB;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns a promise and its associated `resolve` and `reject` methods.
|
|
3
|
+
*/
|
|
4
|
+
export function extractPromiseParts() {
|
|
5
|
+
let resolver;
|
|
6
|
+
let rejecter;
|
|
7
|
+
const promise = new Promise((resolve, reject) => {
|
|
8
|
+
resolver = resolve;
|
|
9
|
+
rejecter = reject;
|
|
10
|
+
});
|
|
11
|
+
return {
|
|
12
|
+
promise,
|
|
13
|
+
resolve: resolver,
|
|
14
|
+
reject: rejecter,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=extract-promise-parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-promise-parts.js","sourceRoot":"","sources":["../../../src/lib/extract-promise-parts.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,mBAAmB;IAKjC,IAAI,QAA4B,CAAA;IAChC,IAAI,QAAoC,CAAA;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACjD,QAAQ,GAAG,OAAO,CAAA;QAClB,QAAQ,GAAG,MAAM,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,OAAO;QACP,OAAO,EAAE,QAAS;QAClB,MAAM,EAAE,QAAS;KAClB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/lib/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,MAAM,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { uuid } from './uuid';
|
|
2
|
+
/**
|
|
3
|
+
* get a unique messageId with a very low chance of collisions
|
|
4
|
+
* using @lukeed/uuid/secure uses the node crypto module, which is the fastest
|
|
5
|
+
* @example "node-next-1668208232027-743be593-7789-4b74-8078-cbcc8894c586"
|
|
6
|
+
*/
|
|
7
|
+
export const createMessageId = () => {
|
|
8
|
+
return `node-next-${Date.now()}-${uuid()}`;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=get-message-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-message-id.js","sourceRoot":"","sources":["../../../src/lib/get-message-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAW,EAAE;IAC1C,OAAO,aAAa,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,CAAA;AAC5C,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../../src/lib/uuid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { v4 as uuid } from '@lukeed/uuid';
|
|
2
|
+
const MAX_EVENT_SIZE_IN_KB = 32;
|
|
3
|
+
const MAX_BATCH_SIZE_IN_KB = 480; // (500 KB is the limit, leaving some padding)
|
|
4
|
+
export class ContextBatch {
|
|
5
|
+
constructor(maxEventCount) {
|
|
6
|
+
this.id = uuid();
|
|
7
|
+
this.items = [];
|
|
8
|
+
this.sizeInBytes = 0;
|
|
9
|
+
this.maxEventCount = Math.max(1, maxEventCount);
|
|
10
|
+
}
|
|
11
|
+
tryAdd(item) {
|
|
12
|
+
if (this.length === this.maxEventCount)
|
|
13
|
+
return {
|
|
14
|
+
success: false,
|
|
15
|
+
message: `Event limit of ${this.maxEventCount} has been exceeded.`,
|
|
16
|
+
};
|
|
17
|
+
const eventSize = this.calculateSize(item.context);
|
|
18
|
+
if (eventSize > MAX_EVENT_SIZE_IN_KB * 1024) {
|
|
19
|
+
return {
|
|
20
|
+
success: false,
|
|
21
|
+
message: `Event exceeds maximum event size of ${MAX_EVENT_SIZE_IN_KB} KB`,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (this.sizeInBytes + eventSize > MAX_BATCH_SIZE_IN_KB * 1024) {
|
|
25
|
+
return {
|
|
26
|
+
success: false,
|
|
27
|
+
message: `Event has caused batch size to exceed ${MAX_BATCH_SIZE_IN_KB} KB`,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
this.items.push(item);
|
|
31
|
+
this.sizeInBytes += eventSize;
|
|
32
|
+
return { success: true };
|
|
33
|
+
}
|
|
34
|
+
get length() {
|
|
35
|
+
return this.items.length;
|
|
36
|
+
}
|
|
37
|
+
calculateSize(ctx) {
|
|
38
|
+
return encodeURI(JSON.stringify(ctx.event)).split(/%..|i/).length;
|
|
39
|
+
}
|
|
40
|
+
getEvents() {
|
|
41
|
+
const events = this.items.map(({ context }) => context.event);
|
|
42
|
+
return events;
|
|
43
|
+
}
|
|
44
|
+
getContexts() {
|
|
45
|
+
return this.items.map((item) => item.context);
|
|
46
|
+
}
|
|
47
|
+
resolveEvents() {
|
|
48
|
+
this.items.forEach(({ resolver, context }) => resolver(context));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=context-batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-batch.js","sourceRoot":"","sources":["../../../../src/plugins/customerio/context-batch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,cAAc,CAAA;AAIzC,MAAM,oBAAoB,GAAG,EAAE,CAAA;AAC/B,MAAM,oBAAoB,GAAG,GAAG,CAAA,CAAC,+CAA+C;AAOhF,MAAM,OAAO,YAAY;IAMvB,YAAY,aAAqB;QAL1B,OAAE,GAAG,IAAI,EAAE,CAAA;QACV,UAAK,GAAkB,EAAE,CAAA;QACzB,gBAAW,GAAG,CAAC,CAAA;QAIrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;IACjD,CAAC;IACM,MAAM,CACX,IAAiB;QAEjB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa;YACpC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,kBAAkB,IAAI,CAAC,aAAa,qBAAqB;aACnE,CAAA;QAEH,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClD,IAAI,SAAS,GAAG,oBAAoB,GAAG,IAAI,EAAE;YAC3C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,uCAAuC,oBAAoB,KAAK;aAC1E,CAAA;SACF;QAED,IAAI,IAAI,CAAC,WAAW,GAAG,SAAS,GAAG,oBAAoB,GAAG,IAAI,EAAE;YAC9D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,yCAAyC,oBAAoB,KAAK;aAC5E,CAAA;SACF;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrB,IAAI,CAAC,WAAW,IAAI,SAAS,CAAA;QAC7B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;IAC1B,CAAC;IAEO,aAAa,CAAC,GAAY;QAChC,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAA;IACnE,CAAC;IAED,SAAS;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC7D,OAAO,MAAM,CAAA;IACf,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/C,CAAC;IAED,aAAa;QACX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;IAClE,CAAC;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Publisher } from './publisher';
|
|
2
|
+
import { version } from '../../generated/version';
|
|
3
|
+
import { detectRuntime } from '../../lib/env';
|
|
4
|
+
function normalizeEvent(ctx) {
|
|
5
|
+
ctx.updateEvent('context.library.name', '@customerio/cdp-analytics-node');
|
|
6
|
+
ctx.updateEvent('context.library.version', version);
|
|
7
|
+
const runtime = detectRuntime();
|
|
8
|
+
if (runtime === 'node') {
|
|
9
|
+
ctx.updateEvent('_metadata.nodeVersion', process.versions.node);
|
|
10
|
+
}
|
|
11
|
+
ctx.updateEvent('_metadata.jsRuntime', runtime);
|
|
12
|
+
}
|
|
13
|
+
export function createNodePlugin(publisher) {
|
|
14
|
+
function action(ctx) {
|
|
15
|
+
normalizeEvent(ctx);
|
|
16
|
+
return publisher.enqueue(ctx);
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
name: 'Customer.io Data Pipelines',
|
|
20
|
+
type: 'after',
|
|
21
|
+
version: '1.0.0',
|
|
22
|
+
isLoaded: () => true,
|
|
23
|
+
load: () => Promise.resolve(),
|
|
24
|
+
alias: action,
|
|
25
|
+
group: action,
|
|
26
|
+
identify: action,
|
|
27
|
+
page: action,
|
|
28
|
+
screen: action,
|
|
29
|
+
track: action,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export const createConfiguredNodePlugin = (props, emitter) => {
|
|
33
|
+
const publisher = new Publisher(props, emitter);
|
|
34
|
+
return {
|
|
35
|
+
publisher: publisher,
|
|
36
|
+
plugin: createNodePlugin(publisher),
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/customerio/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAK7C,SAAS,cAAc,CAAC,GAAY;IAClC,GAAG,CAAC,WAAW,CAAC,sBAAsB,EAAE,gCAAgC,CAAC,CAAA;IACzE,GAAG,CAAC,WAAW,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAA;IAC/B,IAAI,OAAO,KAAK,MAAM,EAAE;QACtB,GAAG,CAAC,WAAW,CAAC,uBAAuB,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;KAChE;IACD,GAAG,CAAC,WAAW,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAA;AACjD,CAAC;AAmBD,MAAM,UAAU,gBAAgB,CAAC,SAAoB;IACnD,SAAS,MAAM,CAAC,GAAY;QAC1B,cAAc,CAAC,GAAG,CAAC,CAAA;QACnB,OAAO,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO;QACL,IAAI,EAAE,4BAA4B;QAClC,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;QACpB,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;QAC7B,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,MAAM;KACd,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,KAA+B,EAC/B,OAAoB,EACpB,EAAE;IACF,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC/C,OAAO;QACL,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC;KACpC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { backoff } from '@customerio/cdp-analytics-core';
|
|
2
|
+
import { abortSignalAfterTimeout } from '../../lib/abort';
|
|
3
|
+
import { tryCreateFormattedUrl } from '../../lib/create-url';
|
|
4
|
+
import { extractPromiseParts } from '../../lib/extract-promise-parts';
|
|
5
|
+
import { fetch } from '../../lib/fetch';
|
|
6
|
+
import { ContextBatch } from './context-batch';
|
|
7
|
+
import { b64encode } from '../../lib/base-64-encode';
|
|
8
|
+
function sleep(timeoutInMs) {
|
|
9
|
+
return new Promise((resolve) => setTimeout(resolve, timeoutInMs));
|
|
10
|
+
}
|
|
11
|
+
function noop() { }
|
|
12
|
+
/**
|
|
13
|
+
* The Publisher is responsible for batching events and sending them to the API.
|
|
14
|
+
*/
|
|
15
|
+
export class Publisher {
|
|
16
|
+
constructor({ host, path, maxRetries, maxEventsInBatch, flushInterval, writeKey, httpRequestTimeout, }, emitter) {
|
|
17
|
+
this._emitter = emitter;
|
|
18
|
+
this._maxRetries = maxRetries;
|
|
19
|
+
this._maxEventsInBatch = Math.max(maxEventsInBatch, 1);
|
|
20
|
+
this._flushInterval = flushInterval;
|
|
21
|
+
this._auth = b64encode(`${writeKey}:`);
|
|
22
|
+
this._url = tryCreateFormattedUrl(host ?? 'https://cdp.customer.io', path ?? '/v1/batch');
|
|
23
|
+
this._httpRequestTimeout = httpRequestTimeout ?? 10000;
|
|
24
|
+
}
|
|
25
|
+
createBatch() {
|
|
26
|
+
this.pendingFlushTimeout && clearTimeout(this.pendingFlushTimeout);
|
|
27
|
+
const batch = new ContextBatch(this._maxEventsInBatch);
|
|
28
|
+
this._batch = batch;
|
|
29
|
+
this.pendingFlushTimeout = setTimeout(() => {
|
|
30
|
+
if (batch === this._batch) {
|
|
31
|
+
this._batch = undefined;
|
|
32
|
+
}
|
|
33
|
+
this.pendingFlushTimeout = undefined;
|
|
34
|
+
if (batch.length) {
|
|
35
|
+
this.send(batch).catch(noop);
|
|
36
|
+
}
|
|
37
|
+
}, this._flushInterval);
|
|
38
|
+
return batch;
|
|
39
|
+
}
|
|
40
|
+
clearBatch() {
|
|
41
|
+
this.pendingFlushTimeout && clearTimeout(this.pendingFlushTimeout);
|
|
42
|
+
this._batch = undefined;
|
|
43
|
+
}
|
|
44
|
+
flushAfterClose(pendingItemsCount) {
|
|
45
|
+
if (!pendingItemsCount) {
|
|
46
|
+
// if number of pending items is 0, there will never be anything else entering the batch, since the app is closed.
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
this._closeAndFlushPendingItemsCount = pendingItemsCount;
|
|
50
|
+
// if batch is empty, there's nothing to flush, and when things come in, enqueue will handle them.
|
|
51
|
+
if (!this._batch)
|
|
52
|
+
return;
|
|
53
|
+
// the number of globally pending items will always be larger or the same as batch size.
|
|
54
|
+
// Any mismatch is because some globally pending items are in plugins.
|
|
55
|
+
const isExpectingNoMoreItems = this._batch.length === pendingItemsCount;
|
|
56
|
+
if (isExpectingNoMoreItems) {
|
|
57
|
+
this.send(this._batch).catch(noop);
|
|
58
|
+
this.clearBatch();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Enqueues the context for future delivery.
|
|
63
|
+
* @param ctx - Context containing an event.
|
|
64
|
+
* @returns a promise that resolves with the context after the event has been delivered.
|
|
65
|
+
*/
|
|
66
|
+
enqueue(ctx) {
|
|
67
|
+
const batch = this._batch ?? this.createBatch();
|
|
68
|
+
const { promise: ctxPromise, resolve } = extractPromiseParts();
|
|
69
|
+
const pendingItem = {
|
|
70
|
+
context: ctx,
|
|
71
|
+
resolver: resolve,
|
|
72
|
+
};
|
|
73
|
+
/*
|
|
74
|
+
The following logic ensures that a batch is never orphaned,
|
|
75
|
+
and is always sent before a new batch is created.
|
|
76
|
+
|
|
77
|
+
Add an event to the existing batch.
|
|
78
|
+
Success: Check if batch is full or no more items are expected to come in (i.e. closing). If so, send batch.
|
|
79
|
+
Failure: Assume event is too big to fit in current batch - send existing batch.
|
|
80
|
+
Add an event to the new batch.
|
|
81
|
+
Success: Check if batch is full and send if it is.
|
|
82
|
+
Failure: Event exceeds maximum size (it will never fit), fail the event.
|
|
83
|
+
*/
|
|
84
|
+
const addStatus = batch.tryAdd(pendingItem);
|
|
85
|
+
if (addStatus.success) {
|
|
86
|
+
const isExpectingNoMoreItems = batch.length === this._closeAndFlushPendingItemsCount;
|
|
87
|
+
const isFull = batch.length === this._maxEventsInBatch;
|
|
88
|
+
if (isFull || isExpectingNoMoreItems) {
|
|
89
|
+
this.send(batch).catch(noop);
|
|
90
|
+
this.clearBatch();
|
|
91
|
+
}
|
|
92
|
+
return ctxPromise;
|
|
93
|
+
}
|
|
94
|
+
// If the new item causes the maximimum event size to be exceeded, send the current batch and create a new one.
|
|
95
|
+
if (batch.length) {
|
|
96
|
+
this.send(batch).catch(noop);
|
|
97
|
+
this.clearBatch();
|
|
98
|
+
}
|
|
99
|
+
const fallbackBatch = this.createBatch();
|
|
100
|
+
const fbAddStatus = fallbackBatch.tryAdd(pendingItem);
|
|
101
|
+
if (fbAddStatus.success) {
|
|
102
|
+
const isExpectingNoMoreItems = fallbackBatch.length === this._closeAndFlushPendingItemsCount;
|
|
103
|
+
if (isExpectingNoMoreItems) {
|
|
104
|
+
this.send(fallbackBatch).catch(noop);
|
|
105
|
+
this.clearBatch();
|
|
106
|
+
}
|
|
107
|
+
return ctxPromise;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// this should only occur if max event size is exceeded
|
|
111
|
+
ctx.setFailedDelivery({
|
|
112
|
+
reason: new Error(fbAddStatus.message),
|
|
113
|
+
});
|
|
114
|
+
return Promise.resolve(ctx);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async send(batch) {
|
|
118
|
+
if (this._closeAndFlushPendingItemsCount) {
|
|
119
|
+
this._closeAndFlushPendingItemsCount -= batch.length;
|
|
120
|
+
}
|
|
121
|
+
const events = batch.getEvents();
|
|
122
|
+
const payload = JSON.stringify({ batch: events });
|
|
123
|
+
const maxAttempts = this._maxRetries + 1;
|
|
124
|
+
let currentAttempt = 0;
|
|
125
|
+
while (currentAttempt < maxAttempts) {
|
|
126
|
+
currentAttempt++;
|
|
127
|
+
let failureReason;
|
|
128
|
+
const [signal, timeoutId] = abortSignalAfterTimeout(this._httpRequestTimeout);
|
|
129
|
+
try {
|
|
130
|
+
const requestInit = {
|
|
131
|
+
signal: signal,
|
|
132
|
+
method: 'POST',
|
|
133
|
+
headers: {
|
|
134
|
+
'Content-Type': 'application/json',
|
|
135
|
+
Authorization: `Basic ${this._auth}`,
|
|
136
|
+
'User-Agent': 'cdp-analytics-node/latest',
|
|
137
|
+
},
|
|
138
|
+
body: payload,
|
|
139
|
+
};
|
|
140
|
+
this._emitter.emit('http_request', {
|
|
141
|
+
url: this._url,
|
|
142
|
+
method: requestInit.method,
|
|
143
|
+
headers: requestInit.headers,
|
|
144
|
+
body: requestInit.body,
|
|
145
|
+
});
|
|
146
|
+
const response = await fetch(this._url, requestInit);
|
|
147
|
+
clearTimeout(timeoutId);
|
|
148
|
+
if (response.ok) {
|
|
149
|
+
// Successfully sent events, so exit!
|
|
150
|
+
batch.resolveEvents();
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
else if (response.status === 400) {
|
|
154
|
+
// Request either malformed or size exceeded - don't retry.
|
|
155
|
+
resolveFailedBatch(batch, new Error(`[${response.status}] ${response.statusText}`));
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// Treat other errors as transient and retry.
|
|
160
|
+
failureReason = new Error(`[${response.status}] ${response.statusText}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
// Network errors get thrown, retry them.
|
|
165
|
+
failureReason = err;
|
|
166
|
+
}
|
|
167
|
+
// Final attempt failed, update context and resolve events.
|
|
168
|
+
if (currentAttempt === maxAttempts) {
|
|
169
|
+
resolveFailedBatch(batch, failureReason);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
// Retry after attempt-based backoff.
|
|
173
|
+
await sleep(backoff({
|
|
174
|
+
attempt: currentAttempt,
|
|
175
|
+
minTimeout: 25,
|
|
176
|
+
maxTimeout: 1000,
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function resolveFailedBatch(batch, reason) {
|
|
182
|
+
batch.getContexts().forEach((ctx) => ctx.setFailedDelivery({ reason }));
|
|
183
|
+
batch.resolveEvents();
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=publisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisher.js","sourceRoot":"","sources":["../../../../src/plugins/customerio/publisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { CoreAnalytics } from '@customerio/cdp-analytics-core';
|
|
2
|
+
import { AnalyticsSettings } from './settings';
|
|
3
|
+
import { Callback } from './dispatch-emit';
|
|
4
|
+
import { NodeEmitter } from './emitter';
|
|
5
|
+
import { AliasParams, GroupParams, IdentifyParams, PageParams, TrackParams, Plugin } from './types';
|
|
6
|
+
export declare class Analytics extends NodeEmitter implements CoreAnalytics {
|
|
7
|
+
private readonly _eventFactory;
|
|
8
|
+
private _isClosed;
|
|
9
|
+
private _pendingEvents;
|
|
10
|
+
private readonly _closeAndFlushDefaultTimeout;
|
|
11
|
+
private readonly _publisher;
|
|
12
|
+
private readonly _queue;
|
|
13
|
+
ready: Promise<void>;
|
|
14
|
+
constructor(settings: AnalyticsSettings);
|
|
15
|
+
get VERSION(): string;
|
|
16
|
+
/**
|
|
17
|
+
* Call this method to stop collecting new events and flush all existing events.
|
|
18
|
+
* This method also waits for any event method-specific callbacks to be triggered,
|
|
19
|
+
* and any of their subsequent promises to be resolved/rejected.
|
|
20
|
+
*/
|
|
21
|
+
closeAndFlush({ timeout, }?: {
|
|
22
|
+
/** Set a maximum time permitted to wait before resolving. */
|
|
23
|
+
timeout?: number;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
private _dispatch;
|
|
26
|
+
/**
|
|
27
|
+
* Combines two unassociated user identities.
|
|
28
|
+
*/
|
|
29
|
+
alias({ userId, previousId, context, timestamp, integrations }: AliasParams, callback?: Callback): void;
|
|
30
|
+
/**
|
|
31
|
+
* Associates an identified user with a collective.
|
|
32
|
+
*/
|
|
33
|
+
group({ timestamp, groupId, userId, anonymousId, traits, context, integrations, }: GroupParams, callback?: Callback): void;
|
|
34
|
+
/**
|
|
35
|
+
* Includes a unique userId and (maybe anonymousId) and any optional traits you know about them.
|
|
36
|
+
*/
|
|
37
|
+
identify({ userId, anonymousId, traits, context, timestamp, integrations, }: IdentifyParams, callback?: Callback): void;
|
|
38
|
+
/**
|
|
39
|
+
* The page method lets you record page views on your website, along with optional extra information about the page being viewed.
|
|
40
|
+
*/
|
|
41
|
+
page({ userId, anonymousId, category, name, properties, context, timestamp, integrations, }: PageParams, callback?: Callback): void;
|
|
42
|
+
/**
|
|
43
|
+
* Records screen views on your app, along with optional extra information
|
|
44
|
+
* about the screen viewed by the user.
|
|
45
|
+
*/
|
|
46
|
+
screen({ userId, anonymousId, category, name, properties, context, timestamp, integrations, }: PageParams, callback?: Callback): void;
|
|
47
|
+
/**
|
|
48
|
+
* Records actions your users perform.
|
|
49
|
+
*/
|
|
50
|
+
track({ userId, anonymousId, event, properties, context, timestamp, integrations, }: TrackParams, callback?: Callback): void;
|
|
51
|
+
/**
|
|
52
|
+
* Registers one or more plugins to augment Analytics functionality.
|
|
53
|
+
* @param plugins
|
|
54
|
+
*/
|
|
55
|
+
register(...plugins: Plugin[]): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Deregisters one or more plugins based on their names.
|
|
58
|
+
* @param pluginNames - The names of one or more plugins to deregister.
|
|
59
|
+
*/
|
|
60
|
+
deregister(...pluginNames: string[]): Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=analytics-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-node.d.ts","sourceRoot":"","sources":["../../../src/app/analytics-node.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAGd,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAA;AAIhE,OAAO,EAAE,QAAQ,EAAmB,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,UAAU,EACV,WAAW,EACX,MAAM,EAEP,MAAM,SAAS,CAAA;AAIhB,qBAAa,SAAU,SAAQ,WAAY,YAAW,aAAa;IACjE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAChD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAQ;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAEb;IAEd,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IAEvC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;gBAER,QAAQ,EAAE,iBAAiB;IA+BvC,IAAI,OAAO,WAEV;IAED;;;;OAIG;IACI,aAAa,CAAC,EACnB,OAA2C,GAC5C,GAAE;QACD,6DAA6D;QAC7D,OAAO,CAAC,EAAE,MAAM,CAAA;KACZ,GAAG,OAAO,CAAC,IAAI,CAAC;IAatB,OAAO,CAAC,SAAS;IAmBjB;;OAEG;IACH,KAAK,CACH,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,WAAW,EACrE,QAAQ,CAAC,EAAE,QAAQ,GAClB,IAAI;IASP;;OAEG;IACH,KAAK,CACH,EACE,SAAS,EACT,OAAO,EACP,MAAM,EACN,WAAW,EACX,MAAW,EACX,OAAO,EACP,YAAY,GACb,EAAE,WAAW,EACd,QAAQ,CAAC,EAAE,QAAQ,GAClB,IAAI;IAYP;;OAEG;IACH,QAAQ,CACN,EACE,MAAM,EACN,WAAW,EACX,MAAW,EACX,OAAO,EACP,SAAS,EACT,YAAY,GACb,EAAE,cAAc,EACjB,QAAQ,CAAC,EAAE,QAAQ,GAClB,IAAI;IAWP;;OAEG;IACH,IAAI,CACF,EACE,MAAM,EACN,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,OAAO,EACP,SAAS,EACT,YAAY,GACb,EAAE,UAAU,EACb,QAAQ,CAAC,EAAE,QAAQ,GAClB,IAAI;IAUP;;;OAGG;IACH,MAAM,CACJ,EACE,MAAM,EACN,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,OAAO,EACP,SAAS,EACT,YAAY,GACb,EAAE,UAAU,EACb,QAAQ,CAAC,EAAE,QAAQ,GAClB,IAAI;IAWP;;OAEG;IACH,KAAK,CACH,EACE,MAAM,EACN,WAAW,EACX,KAAK,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,YAAY,GACb,EAAE,WAAW,EACd,QAAQ,CAAC,EAAE,QAAQ,GAClB,IAAI;IAYP;;;OAGG;IACH,QAAQ,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7C;;;OAGG;IACG,UAAU,CAAC,GAAG,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAe1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/app/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAGzC,qBAAa,OAAQ,SAAQ,WAAW,CAAC,eAAe,CAAC;WACvC,MAAM;CAGvB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NodeEmitter } from './emitter';
|
|
2
|
+
import { Context } from './context';
|
|
3
|
+
import { NodeEventQueue } from './event-queue';
|
|
4
|
+
import { CustomerioEvent } from './types';
|
|
5
|
+
export type Callback = (err?: unknown, ctx?: Context) => void;
|
|
6
|
+
export declare const dispatchAndEmit: (event: CustomerioEvent, queue: NodeEventQueue, emitter: NodeEmitter, callback?: Callback) => Promise<void>;
|
|
7
|
+
//# sourceMappingURL=dispatch-emit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch-emit.d.ts","sourceRoot":"","sources":["../../../src/app/dispatch-emit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAEzC,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;AAQ7D,eAAO,MAAM,eAAe,UACnB,eAAe,SACf,cAAc,WACZ,WAAW,aACT,QAAQ,KAClB,QAAQ,IAAI,CAsBd,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CoreEmitterContract, Emitter } from '@customerio/cdp-analytics-core';
|
|
2
|
+
import { Context } from './context';
|
|
3
|
+
import type { AnalyticsSettings } from './settings';
|
|
4
|
+
import { CustomerioEvent } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* Map of emitter event names to method args.
|
|
7
|
+
*/
|
|
8
|
+
export type NodeEmitterEvents = CoreEmitterContract<Context> & {
|
|
9
|
+
initialize: [AnalyticsSettings];
|
|
10
|
+
call_after_close: [CustomerioEvent];
|
|
11
|
+
http_request: [
|
|
12
|
+
{
|
|
13
|
+
url: string;
|
|
14
|
+
method: string;
|
|
15
|
+
headers: Record<string, string>;
|
|
16
|
+
body: string;
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
drained: [];
|
|
20
|
+
};
|
|
21
|
+
export declare class NodeEmitter extends Emitter<NodeEmitterEvents> {
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../../src/app/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAEzC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG;IAC7D,UAAU,EAAE,CAAC,iBAAiB,CAAC,CAAA;IAC/B,gBAAgB,EAAE,CAAC,eAAe,CAAC,CAAA;IACnC,YAAY,EAAE;QACZ;YACE,GAAG,EAAE,MAAM,CAAA;YACX,MAAM,EAAE,MAAM,CAAA;YACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC/B,IAAI,EAAE,MAAM,CAAA;SACb;KACF,CAAA;IACD,OAAO,EAAE,EAAE,CAAA;CACZ,CAAA;AAED,qBAAa,WAAY,SAAQ,OAAO,CAAC,iBAAiB,CAAC;CAAI"}
|