@amplitude/analytics-core 0.6.1 → 0.6.4
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/lib/cjs/config.d.ts +1 -3
- package/lib/cjs/config.d.ts.map +1 -1
- package/lib/cjs/config.js +5 -7
- package/lib/cjs/config.js.map +1 -1
- package/lib/cjs/core-client.d.ts +1 -1
- package/lib/cjs/core-client.d.ts.map +1 -1
- package/lib/cjs/core-client.js +15 -9
- package/lib/cjs/core-client.js.map +1 -1
- package/lib/cjs/messages.d.ts +1 -0
- package/lib/cjs/messages.d.ts.map +1 -1
- package/lib/cjs/messages.js +2 -1
- package/lib/cjs/messages.js.map +1 -1
- package/lib/cjs/plugins/destination.d.ts.map +1 -1
- package/lib/cjs/plugins/destination.js +8 -7
- package/lib/cjs/plugins/destination.js.map +1 -1
- package/lib/cjs/timeline.d.ts +3 -2
- package/lib/cjs/timeline.d.ts.map +1 -1
- package/lib/cjs/timeline.js +11 -8
- package/lib/cjs/timeline.js.map +1 -1
- package/lib/cjs/utils/valid-properties.d.ts.map +1 -1
- package/lib/cjs/utils/valid-properties.js +3 -0
- package/lib/cjs/utils/valid-properties.js.map +1 -1
- package/lib/esm/config.d.ts +1 -3
- package/lib/esm/config.d.ts.map +1 -1
- package/lib/esm/config.js +5 -7
- package/lib/esm/config.js.map +1 -1
- package/lib/esm/core-client.d.ts +1 -1
- package/lib/esm/core-client.d.ts.map +1 -1
- package/lib/esm/core-client.js +15 -9
- package/lib/esm/core-client.js.map +1 -1
- package/lib/esm/messages.d.ts +1 -0
- package/lib/esm/messages.d.ts.map +1 -1
- package/lib/esm/messages.js +1 -0
- package/lib/esm/messages.js.map +1 -1
- package/lib/esm/plugins/destination.d.ts.map +1 -1
- package/lib/esm/plugins/destination.js +9 -8
- package/lib/esm/plugins/destination.js.map +1 -1
- package/lib/esm/timeline.d.ts +3 -2
- package/lib/esm/timeline.d.ts.map +1 -1
- package/lib/esm/timeline.js +11 -8
- package/lib/esm/timeline.js.map +1 -1
- package/lib/esm/utils/valid-properties.d.ts.map +1 -1
- package/lib/esm/utils/valid-properties.js +3 -0
- package/lib/esm/utils/valid-properties.js.map +1 -1
- package/package.json +4 -3
package/lib/cjs/config.d.ts
CHANGED
|
@@ -6,7 +6,6 @@ export declare const getDefaultConfig: () => {
|
|
|
6
6
|
flushIntervalMillis: number;
|
|
7
7
|
logLevel: LogLevel;
|
|
8
8
|
loggerProvider: Logger;
|
|
9
|
-
saveEvents: boolean;
|
|
10
9
|
optOut: boolean;
|
|
11
10
|
serverUrl: string;
|
|
12
11
|
serverZone: ServerZone;
|
|
@@ -21,11 +20,10 @@ export declare class Config implements IConfig {
|
|
|
21
20
|
logLevel: LogLevel;
|
|
22
21
|
minIdLength?: number;
|
|
23
22
|
plan?: Plan;
|
|
24
|
-
saveEvents: boolean;
|
|
25
23
|
serverUrl: string | undefined;
|
|
26
24
|
serverZone?: ServerZone;
|
|
27
25
|
transportProvider: Transport;
|
|
28
|
-
storageProvider
|
|
26
|
+
storageProvider?: Storage<Event[]>;
|
|
29
27
|
useBatch: boolean;
|
|
30
28
|
private _optOut;
|
|
31
29
|
get optOut(): boolean;
|
package/lib/cjs/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,MAAM,IAAI,OAAO,EACjB,MAAM,IAAI,OAAO,EACjB,WAAW,EACX,QAAQ,EACR,OAAO,EACP,SAAS,EACT,IAAI,EACJ,UAAU,EACX,MAAM,4BAA4B,CAAC;AAQpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,MAAM,IAAI,OAAO,EACjB,MAAM,IAAI,OAAO,EACjB,WAAW,EACX,QAAQ,EACR,OAAO,EACP,SAAS,EACT,IAAI,EACJ,UAAU,EACX,MAAM,4BAA4B,CAAC;AAQpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,gBAAgB;;;;;;;;;;CAU3B,CAAC;AAEH,qBAAa,MAAO,YAAW,OAAO;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAElB,OAAO,CAAC,OAAO,CAAS;IACxB,IAAI,MAAM,IAGS,OAAO,CADzB;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAEzB;gBAEW,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;CAsB1C;AAED,eAAO,MAAM,YAAY,eAAgB,UAAU,YAAY,OAAO,kKAKrE,CAAC;AAEF,eAAO,MAAM,kBAAkB,oCAEjB,UAAU,aACZ,OAAO;;;;;;CAUlB,CAAC"}
|
package/lib/cjs/config.js
CHANGED
|
@@ -4,12 +4,11 @@ var analytics_types_1 = require("@amplitude/analytics-types");
|
|
|
4
4
|
var constants_1 = require("./constants");
|
|
5
5
|
var logger_1 = require("./logger");
|
|
6
6
|
var getDefaultConfig = function () { return ({
|
|
7
|
-
flushMaxRetries:
|
|
8
|
-
flushQueueSize:
|
|
9
|
-
flushIntervalMillis:
|
|
7
|
+
flushMaxRetries: 12,
|
|
8
|
+
flushQueueSize: 200,
|
|
9
|
+
flushIntervalMillis: 10000,
|
|
10
10
|
logLevel: analytics_types_1.LogLevel.Warn,
|
|
11
11
|
loggerProvider: new logger_1.Logger(),
|
|
12
|
-
saveEvents: true,
|
|
13
12
|
optOut: false,
|
|
14
13
|
serverUrl: constants_1.AMPLITUDE_SERVER_URL,
|
|
15
14
|
serverZone: analytics_types_1.ServerZone.US,
|
|
@@ -18,7 +17,7 @@ var getDefaultConfig = function () { return ({
|
|
|
18
17
|
exports.getDefaultConfig = getDefaultConfig;
|
|
19
18
|
var Config = /** @class */ (function () {
|
|
20
19
|
function Config(options) {
|
|
21
|
-
var _a, _b, _c
|
|
20
|
+
var _a, _b, _c;
|
|
22
21
|
this._optOut = false;
|
|
23
22
|
var defaultConfig = (0, exports.getDefaultConfig)();
|
|
24
23
|
this.apiKey = options.apiKey;
|
|
@@ -30,12 +29,11 @@ var Config = /** @class */ (function () {
|
|
|
30
29
|
this.minIdLength = options.minIdLength;
|
|
31
30
|
this.plan = options.plan;
|
|
32
31
|
this.optOut = (_b = options.optOut) !== null && _b !== void 0 ? _b : defaultConfig.optOut;
|
|
33
|
-
this.saveEvents = (_c = options.saveEvents) !== null && _c !== void 0 ? _c : defaultConfig.saveEvents;
|
|
34
32
|
this.serverUrl = options.serverUrl;
|
|
35
33
|
this.serverZone = options.serverZone || defaultConfig.serverZone;
|
|
36
34
|
this.storageProvider = options.storageProvider;
|
|
37
35
|
this.transportProvider = options.transportProvider;
|
|
38
|
-
this.useBatch = (
|
|
36
|
+
this.useBatch = (_c = options.useBatch) !== null && _c !== void 0 ? _c : defaultConfig.useBatch;
|
|
39
37
|
this.loggerProvider.enable(this.logLevel);
|
|
40
38
|
var serverConfig = (0, exports.createServerConfig)(options.serverUrl, options.serverZone, options.useBatch);
|
|
41
39
|
this.serverZone = serverConfig.serverZone;
|
package/lib/cjs/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;AAAA,8DAUoC;AACpC,yCAKqB;AAErB,mCAAkC;AAE3B,IAAM,gBAAgB,GAAG,cAAM,OAAA,CAAC;IACrC,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Event,\n Config as IConfig,\n Logger as ILogger,\n InitOptions,\n LogLevel,\n Storage,\n Transport,\n Plan,\n ServerZone,\n} from '@amplitude/analytics-types';\nimport {\n AMPLITUDE_SERVER_URL,\n AMPLITUDE_BATCH_SERVER_URL,\n EU_AMPLITUDE_SERVER_URL,\n EU_AMPLITUDE_BATCH_SERVER_URL,\n} from './constants';\n\nimport { Logger } from './logger';\n\nexport const getDefaultConfig = () => ({\n flushMaxRetries: 12,\n flushQueueSize: 200,\n flushIntervalMillis: 10000,\n logLevel: LogLevel.Warn,\n loggerProvider: new Logger(),\n optOut: false,\n serverUrl: AMPLITUDE_SERVER_URL,\n serverZone: ServerZone.US,\n useBatch: false,\n});\n\nexport class Config implements IConfig {\n apiKey: string;\n flushIntervalMillis: number;\n flushMaxRetries: number;\n flushQueueSize: number;\n loggerProvider: ILogger;\n logLevel: LogLevel;\n minIdLength?: number;\n plan?: Plan;\n serverUrl: string | undefined;\n serverZone?: ServerZone;\n transportProvider: Transport;\n storageProvider?: Storage<Event[]>;\n useBatch: boolean;\n\n private _optOut = false;\n get optOut() {\n return this._optOut;\n }\n set optOut(optOut: boolean) {\n this._optOut = optOut;\n }\n\n constructor(options: InitOptions<IConfig>) {\n const defaultConfig = getDefaultConfig();\n this.apiKey = options.apiKey;\n this.flushIntervalMillis = options.flushIntervalMillis || defaultConfig.flushIntervalMillis;\n this.flushMaxRetries = options.flushMaxRetries || defaultConfig.flushMaxRetries;\n this.flushQueueSize = options.flushQueueSize || defaultConfig.flushQueueSize;\n this.loggerProvider = options.loggerProvider || defaultConfig.loggerProvider;\n this.logLevel = options.logLevel ?? defaultConfig.logLevel;\n this.minIdLength = options.minIdLength;\n this.plan = options.plan;\n this.optOut = options.optOut ?? defaultConfig.optOut;\n this.serverUrl = options.serverUrl;\n this.serverZone = options.serverZone || defaultConfig.serverZone;\n this.storageProvider = options.storageProvider;\n this.transportProvider = options.transportProvider;\n this.useBatch = options.useBatch ?? defaultConfig.useBatch;\n this.loggerProvider.enable(this.logLevel);\n\n const serverConfig = createServerConfig(options.serverUrl, options.serverZone, options.useBatch);\n this.serverZone = serverConfig.serverZone;\n this.serverUrl = serverConfig.serverUrl;\n }\n}\n\nexport const getServerUrl = (serverZone: ServerZone, useBatch: boolean) => {\n if (serverZone === ServerZone.EU) {\n return useBatch ? EU_AMPLITUDE_BATCH_SERVER_URL : EU_AMPLITUDE_SERVER_URL;\n }\n return useBatch ? AMPLITUDE_BATCH_SERVER_URL : AMPLITUDE_SERVER_URL;\n};\n\nexport const createServerConfig = (\n serverUrl = '',\n serverZone: ServerZone = getDefaultConfig().serverZone,\n useBatch: boolean = getDefaultConfig().useBatch,\n) => {\n if (serverUrl) {\n return { serverUrl, serverZone: undefined };\n }\n const _serverZone = [ServerZone.US, ServerZone.EU].includes(serverZone) ? serverZone : getDefaultConfig().serverZone;\n return {\n serverZone: _serverZone,\n serverUrl: getServerUrl(_serverZone, useBatch),\n };\n};\n"]}
|
package/lib/cjs/core-client.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare class AmplitudeCore<T extends Config> implements CoreClient<T> {
|
|
|
5
5
|
config: T;
|
|
6
6
|
timeline: Timeline;
|
|
7
7
|
constructor(name?: string);
|
|
8
|
-
|
|
8
|
+
_init(config: T): Promise<void>;
|
|
9
9
|
track(eventInput: BaseEvent | string, eventProperties?: Record<string, any>, eventOptions?: EventOptions): Promise<import("@amplitude/analytics-types").Result>;
|
|
10
10
|
logEvent: (eventInput: BaseEvent | string, eventProperties?: Record<string, any> | undefined, eventOptions?: EventOptions | undefined) => Promise<import("@amplitude/analytics-types").Result>;
|
|
11
11
|
identify(identify: Identify, eventOptions?: EventOptions): Promise<import("@amplitude/analytics-types").Result>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-client.d.ts","sourceRoot":"","sources":["../../src/core-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,MAAM,EACN,KAAK,EACL,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,OAAO,EACR,MAAM,4BAA4B,CAAC;AAQpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"core-client.d.ts","sourceRoot":"","sources":["../../src/core-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,MAAM,EACN,KAAK,EACL,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,OAAO,EACR,MAAM,4BAA4B,CAAC;AAQpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,qBAAa,aAAa,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,UAAU,CAAC,CAAC,CAAC;IACnE,IAAI,EAAE,MAAM,CAAC;IAGb,MAAM,EAAE,CAAC,CAAC;IAGV,QAAQ,EAAE,QAAQ,CAAC;gBAEP,IAAI,SAAa;IAK7B,KAAK,CAAC,MAAM,EAAE,CAAC;IAMf,KAAK,CAAC,UAAU,EAAE,SAAS,GAAG,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY;IAKxG,QAAQ,eALU,SAAS,GAAG,MAAM,sJAKH;IAEjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,YAAY;IAKxD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,YAAY;IAK9G,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAKxD,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,YAAY;IAK/C,GAAG,CAAC,MAAM,EAAE,MAAM;IAKlB,MAAM,CAAC,UAAU,EAAE,MAAM;IAIzB,QAAQ,CAAC,KAAK,EAAE,KAAK;IAoB3B,SAAS,CAAC,MAAM,EAAE,OAAO;IAKzB,KAAK;CAGN"}
|
package/lib/cjs/core-client.js
CHANGED
|
@@ -4,16 +4,17 @@ var tslib_1 = require("tslib");
|
|
|
4
4
|
var event_builder_1 = require("./utils/event-builder");
|
|
5
5
|
var timeline_1 = require("./timeline");
|
|
6
6
|
var result_builder_1 = require("./utils/result-builder");
|
|
7
|
+
var messages_1 = require("./messages");
|
|
7
8
|
var AmplitudeCore = /** @class */ (function () {
|
|
8
9
|
function AmplitudeCore(name) {
|
|
9
10
|
if (name === void 0) { name = '$default'; }
|
|
10
11
|
this.logEvent = this.track.bind(this);
|
|
12
|
+
this.timeline = new timeline_1.Timeline();
|
|
11
13
|
this.name = name;
|
|
12
14
|
}
|
|
13
|
-
|
|
14
|
-
AmplitudeCore.prototype.init = function (_apiKey, _userId, config) {
|
|
15
|
+
AmplitudeCore.prototype._init = function (config) {
|
|
15
16
|
this.config = config;
|
|
16
|
-
this.timeline
|
|
17
|
+
this.timeline.reset();
|
|
17
18
|
return Promise.resolve();
|
|
18
19
|
};
|
|
19
20
|
AmplitudeCore.prototype.track = function (eventInput, eventProperties, eventOptions) {
|
|
@@ -53,15 +54,20 @@ var AmplitudeCore = /** @class */ (function () {
|
|
|
53
54
|
});
|
|
54
55
|
};
|
|
55
56
|
AmplitudeCore.prototype.dispatch = function (event) {
|
|
57
|
+
var _a;
|
|
56
58
|
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
57
59
|
var result, e_1, message;
|
|
58
|
-
return (0, tslib_1.__generator)(this, function (
|
|
59
|
-
switch (
|
|
60
|
+
return (0, tslib_1.__generator)(this, function (_b) {
|
|
61
|
+
switch (_b.label) {
|
|
60
62
|
case 0:
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
_b.trys.push([0, 2, , 3]);
|
|
64
|
+
// skip event processing if opt out
|
|
65
|
+
if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.optOut) {
|
|
66
|
+
return [2 /*return*/, (0, result_builder_1.buildResult)(event, 0, messages_1.OPT_OUT_MESSAGE)];
|
|
67
|
+
}
|
|
68
|
+
return [4 /*yield*/, this.timeline.push(event)];
|
|
63
69
|
case 1:
|
|
64
|
-
result =
|
|
70
|
+
result = _b.sent();
|
|
65
71
|
if (result.code === 200) {
|
|
66
72
|
this.config.loggerProvider.log(result.message);
|
|
67
73
|
}
|
|
@@ -70,7 +76,7 @@ var AmplitudeCore = /** @class */ (function () {
|
|
|
70
76
|
}
|
|
71
77
|
return [2 /*return*/, result];
|
|
72
78
|
case 2:
|
|
73
|
-
e_1 =
|
|
79
|
+
e_1 = _b.sent();
|
|
74
80
|
message = String(e_1);
|
|
75
81
|
this.config.loggerProvider.error(message);
|
|
76
82
|
return [2 /*return*/, (0, result_builder_1.buildResult)(event, 0, message)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-client.js","sourceRoot":"","sources":["../../src/core-client.ts"],"names":[],"mappings":";;;AAUA,uDAM+B;AAC/B,uCAAsC;AACtC,yDAAqD;AACrD;IASE,uBAAY,IAAiB;QAAjB,qBAAA,EAAA,iBAAiB;QAgB7B,aAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAf/B,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"core-client.js","sourceRoot":"","sources":["../../src/core-client.ts"],"names":[],"mappings":";;;AAUA,uDAM+B;AAC/B,uCAAsC;AACtC,yDAAqD;AACrD,uCAA6C;AAE7C;IASE,uBAAY,IAAiB;QAAjB,qBAAA,EAAA,iBAAiB;QAgB7B,aAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAf/B,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,6BAAK,GAAL,UAAM,MAAS;QACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,6BAAK,GAAL,UAAM,UAA8B,EAAE,eAAqC,EAAE,YAA2B;QACtG,IAAM,KAAK,GAAG,IAAA,gCAAgB,EAAC,UAAU,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAID,gCAAQ,GAAR,UAAS,QAAkB,EAAE,YAA2B;QACtD,IAAM,KAAK,GAAG,IAAA,mCAAmB,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,qCAAa,GAAb,UAAc,SAAiB,EAAE,SAA4B,EAAE,QAAkB,EAAE,YAA2B;QAC5G,IAAM,KAAK,GAAG,IAAA,wCAAwB,EAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,gCAAQ,GAAR,UAAS,SAAiB,EAAE,SAA4B;QACtD,IAAM,KAAK,GAAG,IAAA,gCAAgB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,+BAAO,GAAP,UAAQ,OAAgB,EAAE,YAA2B;QACnD,IAAM,KAAK,GAAG,IAAA,kCAAkB,EAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAEK,2BAAG,GAAT,UAAU,MAAc;;;;gBAChB,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC3B,sBAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAC;;;KAC/C;IAEK,8BAAM,GAAZ,UAAa,UAAkB;;;gBAC7B,sBAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAAC;;;KAC7C;IAEK,gCAAQ,GAAd,UAAe,KAAY;;;;;;;;wBAEvB,mCAAmC;wBACnC,IAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,EAAE;4BACvB,sBAAO,IAAA,4BAAW,EAAC,KAAK,EAAE,CAAC,EAAE,0BAAe,CAAC,EAAC;yBAC/C;wBACc,qBAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAA;;wBAAxC,MAAM,GAAG,SAA+B;wBAC9C,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE;4BACvB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;yBAChD;6BAAM;4BACL,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;yBAClD;wBACD,sBAAO,MAAM,EAAC;;;wBAER,OAAO,GAAG,MAAM,CAAC,GAAC,CAAC,CAAC;wBAC1B,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBAC1C,sBAAO,IAAA,4BAAW,EAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAC;;;;;KAEzC;IAED,iCAAS,GAAT,UAAU,MAAe;QACvB,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,6BAAK,GAAL;QACE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IACH,oBAAC;AAAD,CAAC,AApFD,IAoFC;AApFY,sCAAa","sourcesContent":["import {\n CoreClient,\n Config,\n Event,\n BaseEvent,\n EventOptions,\n Identify,\n Plugin,\n Revenue,\n} from '@amplitude/analytics-types';\nimport {\n createGroupIdentifyEvent,\n createIdentifyEvent,\n createTrackEvent,\n createRevenueEvent,\n createGroupEvent,\n} from './utils/event-builder';\nimport { Timeline } from './timeline';\nimport { buildResult } from './utils/result-builder';\nimport { OPT_OUT_MESSAGE } from './messages';\n\nexport class AmplitudeCore<T extends Config> implements CoreClient<T> {\n name: string;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: T;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n timeline: Timeline;\n\n constructor(name = '$default') {\n this.timeline = new Timeline();\n this.name = name;\n }\n\n _init(config: T) {\n this.config = config;\n this.timeline.reset();\n return Promise.resolve();\n }\n\n track(eventInput: BaseEvent | string, eventProperties?: Record<string, any>, eventOptions?: EventOptions) {\n const event = createTrackEvent(eventInput, eventProperties, eventOptions);\n return this.dispatch(event);\n }\n\n logEvent = this.track.bind(this);\n\n identify(identify: Identify, eventOptions?: EventOptions) {\n const event = createIdentifyEvent(identify, eventOptions);\n return this.dispatch(event);\n }\n\n groupIdentify(groupType: string, groupName: string | string[], identify: Identify, eventOptions?: EventOptions) {\n const event = createGroupIdentifyEvent(groupType, groupName, identify, eventOptions);\n return this.dispatch(event);\n }\n\n setGroup(groupType: string, groupName: string | string[]) {\n const event = createGroupEvent(groupType, groupName);\n return this.dispatch(event);\n }\n\n revenue(revenue: Revenue, eventOptions?: EventOptions) {\n const event = createRevenueEvent(revenue, eventOptions);\n return this.dispatch(event);\n }\n\n async add(plugin: Plugin) {\n const config = this.config;\n return this.timeline.register(plugin, config);\n }\n\n async remove(pluginName: string) {\n return this.timeline.deregister(pluginName);\n }\n\n async dispatch(event: Event) {\n try {\n // skip event processing if opt out\n if (this.config?.optOut) {\n return buildResult(event, 0, OPT_OUT_MESSAGE);\n }\n const result = await this.timeline.push(event);\n if (result.code === 200) {\n this.config.loggerProvider.log(result.message);\n } else {\n this.config.loggerProvider.error(result.message);\n }\n return result;\n } catch (e) {\n const message = String(e);\n this.config.loggerProvider.error(message);\n return buildResult(event, 0, message);\n }\n }\n\n setOptOut(optOut: boolean) {\n const config = this.config;\n config.optOut = Boolean(optOut);\n }\n\n flush() {\n return this.timeline.flush();\n }\n}\n"]}
|
package/lib/cjs/messages.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export declare const UNEXPECTED_ERROR_MESSAGE = "Unexpected error occurred";
|
|
|
3
3
|
export declare const MAX_RETRIES_EXCEEDED_MESSAGE = "Event rejected due to exceeded retry count";
|
|
4
4
|
export declare const OPT_OUT_MESSAGE = "Event skipped due to optOut config";
|
|
5
5
|
export declare const MISSING_API_KEY_MESSAGE = "Event rejected due to missing API key";
|
|
6
|
+
export declare const INVALID_API_KEY = "Invalid API key";
|
|
6
7
|
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,+BAA+B,CAAC;AAC5D,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,4BAA4B,+CAA+C,CAAC;AACzF,eAAO,MAAM,eAAe,uCAAuC,CAAC;AACpE,eAAO,MAAM,uBAAuB,0CAA0C,CAAC"}
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,+BAA+B,CAAC;AAC5D,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,4BAA4B,+CAA+C,CAAC;AACzF,eAAO,MAAM,eAAe,uCAAuC,CAAC;AACpE,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAC/E,eAAO,MAAM,eAAe,oBAAoB,CAAC"}
|
package/lib/cjs/messages.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
exports.MISSING_API_KEY_MESSAGE = exports.OPT_OUT_MESSAGE = exports.MAX_RETRIES_EXCEEDED_MESSAGE = exports.UNEXPECTED_ERROR_MESSAGE = exports.SUCCESS_MESSAGE = void 0;
|
|
2
|
+
exports.INVALID_API_KEY = exports.MISSING_API_KEY_MESSAGE = exports.OPT_OUT_MESSAGE = exports.MAX_RETRIES_EXCEEDED_MESSAGE = exports.UNEXPECTED_ERROR_MESSAGE = exports.SUCCESS_MESSAGE = void 0;
|
|
3
3
|
exports.SUCCESS_MESSAGE = 'Event tracked successfully';
|
|
4
4
|
exports.UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';
|
|
5
5
|
exports.MAX_RETRIES_EXCEEDED_MESSAGE = 'Event rejected due to exceeded retry count';
|
|
6
6
|
exports.OPT_OUT_MESSAGE = 'Event skipped due to optOut config';
|
|
7
7
|
exports.MISSING_API_KEY_MESSAGE = 'Event rejected due to missing API key';
|
|
8
|
+
exports.INVALID_API_KEY = 'Invalid API key';
|
|
8
9
|
//# sourceMappingURL=messages.js.map
|
package/lib/cjs/messages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/messages.ts"],"names":[],"mappings":";;AAAa,QAAA,eAAe,GAAG,4BAA4B,CAAC;AAC/C,QAAA,wBAAwB,GAAG,2BAA2B,CAAC;AACvD,QAAA,4BAA4B,GAAG,4CAA4C,CAAC;AAC5E,QAAA,eAAe,GAAG,oCAAoC,CAAC;AACvD,QAAA,uBAAuB,GAAG,uCAAuC,CAAC","sourcesContent":["export const SUCCESS_MESSAGE = 'Event tracked successfully';\nexport const UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport const MAX_RETRIES_EXCEEDED_MESSAGE = 'Event rejected due to exceeded retry count';\nexport const OPT_OUT_MESSAGE = 'Event skipped due to optOut config';\nexport const MISSING_API_KEY_MESSAGE = 'Event rejected due to missing API key';\n"]}
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/messages.ts"],"names":[],"mappings":";;AAAa,QAAA,eAAe,GAAG,4BAA4B,CAAC;AAC/C,QAAA,wBAAwB,GAAG,2BAA2B,CAAC;AACvD,QAAA,4BAA4B,GAAG,4CAA4C,CAAC;AAC5E,QAAA,eAAe,GAAG,oCAAoC,CAAC;AACvD,QAAA,uBAAuB,GAAG,uCAAuC,CAAC;AAClE,QAAA,eAAe,GAAG,iBAAiB,CAAC","sourcesContent":["export const SUCCESS_MESSAGE = 'Event tracked successfully';\nexport const UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport const MAX_RETRIES_EXCEEDED_MESSAGE = 'Event rejected due to exceeded retry count';\nexport const OPT_OUT_MESSAGE = 'Event skipped due to optOut config';\nexport const MISSING_API_KEY_MESSAGE = 'Event rejected due to missing API key';\nexport const INVALID_API_KEY = 'Invalid API key';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"destination.d.ts","sourceRoot":"","sources":["../../../src/plugins/destination.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,IAAI,OAAO,EAC7B,iBAAiB,EACjB,KAAK,EACL,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,MAAM,EAEN,eAAe,EAChB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"destination.d.ts","sourceRoot":"","sources":["../../../src/plugins/destination.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,IAAI,OAAO,EAC7B,iBAAiB,EACjB,KAAK,EACL,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,MAAM,EAEN,eAAe,EAChB,MAAM,4BAA4B,CAAC;AAapC,qBAAa,WAAY,YAAW,iBAAiB;IACnD,IAAI,SAAe;IACnB,IAAI,yBAAmC;IAEvC,YAAY,SAAQ;IACpB,eAAe,SAAS;IACxB,UAAU,SAAM;IAIhB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,UAAS;IAClB,KAAK,EAAE,OAAO,EAAE,CAAM;IAEhB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAa/C,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAYtC,UAAU,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE;IA0B7B,QAAQ,CAAC,OAAO,EAAE,MAAM;IAalB,KAAK,CAAC,QAAQ,UAAQ;IAUtB,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,QAAQ,UAAO;IA8B3C,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;IAwB5C,qBAAqB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE;IAI3D,qBAAqB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE;IAyB3D,6BAA6B,CAAC,GAAG,EAAE,uBAAuB,EAAE,IAAI,EAAE,OAAO,EAAE;IAS3E,uBAAuB,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE;IAyB/D,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE;IASlC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAK7D;;;;;OAKG;IACH,UAAU;CAOX"}
|
|
@@ -18,17 +18,18 @@ var Destination = /** @class */ (function () {
|
|
|
18
18
|
this.queue = [];
|
|
19
19
|
}
|
|
20
20
|
Destination.prototype.setup = function (config) {
|
|
21
|
+
var _a;
|
|
21
22
|
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
22
23
|
var unsent;
|
|
23
24
|
var _this = this;
|
|
24
|
-
return (0, tslib_1.__generator)(this, function (
|
|
25
|
-
switch (
|
|
25
|
+
return (0, tslib_1.__generator)(this, function (_b) {
|
|
26
|
+
switch (_b.label) {
|
|
26
27
|
case 0:
|
|
27
28
|
this.config = config;
|
|
28
29
|
this.storageKey = "".concat(constants_1.STORAGE_PREFIX, "_").concat(this.config.apiKey.substring(0, 10));
|
|
29
|
-
return [4 /*yield*/, this.config.storageProvider.get(this.storageKey)];
|
|
30
|
+
return [4 /*yield*/, ((_a = this.config.storageProvider) === null || _a === void 0 ? void 0 : _a.get(this.storageKey))];
|
|
30
31
|
case 1:
|
|
31
|
-
unsent =
|
|
32
|
+
unsent = _b.sent();
|
|
32
33
|
this.saveEvents(); // sets storage to '[]'
|
|
33
34
|
if (unsent && unsent.length > 0) {
|
|
34
35
|
void Promise.all(unsent.map(function (event) { return _this.execute(event); })).catch();
|
|
@@ -61,7 +62,7 @@ var Destination = /** @class */ (function () {
|
|
|
61
62
|
context.attempts += 1;
|
|
62
63
|
return true;
|
|
63
64
|
}
|
|
64
|
-
void _this.fulfillRequest([context], 500,
|
|
65
|
+
void _this.fulfillRequest([context], 500, messages_1.MAX_RETRIES_EXCEEDED_MESSAGE);
|
|
65
66
|
return false;
|
|
66
67
|
});
|
|
67
68
|
tryable.forEach(function (context) {
|
|
@@ -179,7 +180,7 @@ var Destination = /** @class */ (function () {
|
|
|
179
180
|
};
|
|
180
181
|
Destination.prototype.handleInvalidResponse = function (res, list) {
|
|
181
182
|
var _this = this;
|
|
182
|
-
if (res.body.missingField) {
|
|
183
|
+
if (res.body.missingField || res.body.error.startsWith(messages_1.INVALID_API_KEY)) {
|
|
183
184
|
this.fulfillRequest(list, res.statusCode, res.body.error);
|
|
184
185
|
return;
|
|
185
186
|
}
|
|
@@ -241,7 +242,7 @@ var Destination = /** @class */ (function () {
|
|
|
241
242
|
* 2) response comes back for a request
|
|
242
243
|
*/
|
|
243
244
|
Destination.prototype.saveEvents = function () {
|
|
244
|
-
if (!this.config.
|
|
245
|
+
if (!this.config.storageProvider) {
|
|
245
246
|
return;
|
|
246
247
|
}
|
|
247
248
|
var events = Array.from(this.queue.map(function (context) { return context.event; }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"destination.js","sourceRoot":"","sources":["../../../src/plugins/destination.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Config,\n DestinationContext as Context,\n DestinationPlugin,\n Event,\n InvalidResponse,\n PayloadTooLargeResponse,\n PluginType,\n RateLimitResponse,\n Response,\n Result,\n Status,\n SuccessResponse,\n} from '@amplitude/analytics-types';\nimport { MISSING_API_KEY_MESSAGE, SUCCESS_MESSAGE, UNEXPECTED_ERROR_MESSAGE } from '../messages';\nimport { STORAGE_PREFIX } from '../constants';\nimport { chunk } from '../utils/chunk';\nimport { buildResult } from '../utils/result-builder';\nimport { createServerConfig } from '../config';\n\nexport class Destination implements DestinationPlugin {\n name = 'amplitude';\n type = PluginType.DESTINATION as const;\n\n retryTimeout = 1000;\n throttleTimeout = 30000;\n storageKey = '';\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: Config;\n scheduled = false;\n queue: Context[] = [];\n\n async setup(config: Config): Promise<undefined> {\n this.config = config;\n\n this.storageKey = `${STORAGE_PREFIX}_${this.config.apiKey.substring(0, 10)}`;\n const unsent = await this.config.storageProvider.get(this.storageKey);\n this.saveEvents(); // sets storage to '[]'\n if (unsent && unsent.length > 0) {\n void Promise.all(unsent.map((event) => this.execute(event))).catch();\n }\n\n return Promise.resolve(undefined);\n }\n\n execute(event: Event): Promise<Result> {\n return new Promise((resolve) => {\n const context = {\n event,\n attempts: 0,\n callback: (result: Result) => resolve(result),\n timeout: 0,\n };\n void this.addToQueue(context);\n });\n }\n\n addToQueue(...list: Context[]) {\n const tryable = list.filter((context) => {\n if (context.attempts < this.config.flushMaxRetries) {\n context.attempts += 1;\n return true;\n }\n void this.fulfillRequest([context], 500, Status.Unknown);\n return false;\n });\n\n tryable.forEach((context) => {\n this.queue = this.queue.concat(context);\n if (context.timeout === 0) {\n this.schedule(this.config.flushIntervalMillis);\n return;\n }\n\n setTimeout(() => {\n context.timeout = 0;\n this.schedule(0);\n }, context.timeout);\n });\n\n this.saveEvents();\n }\n\n schedule(timeout: number) {\n if (this.scheduled) return;\n this.scheduled = true;\n setTimeout(() => {\n void this.flush(true).then(() => {\n this.scheduled = false;\n if (this.queue.length > 0) {\n this.schedule(timeout);\n }\n });\n }, timeout);\n }\n\n async flush(useRetry = false) {\n const list: Context[] = [];\n const later: Context[] = [];\n this.queue.forEach((context) => (context.timeout === 0 ? list.push(context) : later.push(context)));\n this.queue = later;\n\n const batches = chunk(list, this.config.flushQueueSize);\n await Promise.all(batches.map((batch) => this.send(batch, useRetry)));\n }\n\n async send(list: Context[], useRetry = true) {\n if (!this.config.apiKey) {\n return this.fulfillRequest(list, 400, MISSING_API_KEY_MESSAGE);\n }\n\n const payload = {\n api_key: this.config.apiKey,\n events: list.map((context) => context.event),\n options: {\n min_id_length: this.config.minIdLength,\n },\n };\n\n try {\n const { serverUrl } = createServerConfig(this.config.serverUrl, this.config.serverZone, this.config.useBatch);\n const res = await this.config.transportProvider.send(serverUrl, payload);\n if (res === null) {\n this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);\n return;\n }\n if (!useRetry) {\n this.fulfillRequest(list, res.statusCode, res.status);\n return;\n }\n this.handleReponse(res, list);\n } catch (e) {\n this.fulfillRequest(list, 0, String(e));\n }\n }\n\n handleReponse(res: Response, list: Context[]) {\n const { status } = res;\n switch (status) {\n case Status.Success:\n this.handleSuccessResponse(res, list);\n break;\n\n case Status.Invalid:\n this.handleInvalidResponse(res, list);\n break;\n\n case Status.PayloadTooLarge:\n this.handlePayloadTooLargeResponse(res, list);\n break;\n\n case Status.RateLimit:\n this.handleRateLimitResponse(res, list);\n break;\n\n default:\n this.handleOtherReponse(list);\n }\n }\n\n handleSuccessResponse(res: SuccessResponse, list: Context[]) {\n this.fulfillRequest(list, res.statusCode, SUCCESS_MESSAGE);\n }\n\n handleInvalidResponse(res: InvalidResponse, list: Context[]) {\n if (res.body.missingField) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n\n const dropIndex = [\n ...Object.values(res.body.eventsWithInvalidFields),\n ...Object.values(res.body.eventsWithMissingFields),\n ...Object.values(res.body.eventsWithInvalidIdLengths),\n ...res.body.silencedEvents,\n ].flat();\n const dropIndexSet = new Set(dropIndex);\n\n const retry = list.filter((context, index) => {\n if (dropIndexSet.has(index)) {\n this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n return true;\n });\n\n this.addToQueue(...retry);\n }\n\n handlePayloadTooLargeResponse(res: PayloadTooLargeResponse, list: Context[]) {\n if (list.length === 1) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n this.config.flushQueueSize /= 2;\n this.addToQueue(...list);\n }\n\n handleRateLimitResponse(res: RateLimitResponse, list: Context[]) {\n const dropUserIds = Object.keys(res.body.exceededDailyQuotaUsers);\n const dropDeviceIds = Object.keys(res.body.exceededDailyQuotaDevices);\n const throttledIndex = res.body.throttledEvents;\n const dropUserIdsSet = new Set(dropUserIds);\n const dropDeviceIdsSet = new Set(dropDeviceIds);\n const throttledIndexSet = new Set(throttledIndex);\n\n const retry = list.filter((context, index) => {\n if (\n (context.event.user_id && dropUserIdsSet.has(context.event.user_id)) ||\n (context.event.device_id && dropDeviceIdsSet.has(context.event.device_id))\n ) {\n this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n if (throttledIndexSet.has(index)) {\n context.timeout = this.throttleTimeout;\n }\n return true;\n });\n\n this.addToQueue(...retry);\n }\n\n handleOtherReponse(list: Context[]) {\n this.addToQueue(\n ...list.map((context) => {\n context.timeout = context.attempts * this.retryTimeout;\n return context;\n }),\n );\n }\n\n fulfillRequest(list: Context[], code: number, message: string) {\n this.saveEvents();\n list.forEach((context) => context.callback(buildResult(context.event, code, message)));\n }\n\n /**\n * Saves events to storage\n * This is called on\n * 1) new events are added to queue; or\n * 2) response comes back for a request\n */\n saveEvents() {\n if (!this.config.saveEvents) {\n return;\n }\n const events = Array.from(this.queue.map((context) => context.event));\n void this.config.storageProvider.set(this.storageKey, events);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"destination.js","sourceRoot":"","sources":["../../../src/plugins/destination.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Config,\n DestinationContext as Context,\n DestinationPlugin,\n Event,\n InvalidResponse,\n PayloadTooLargeResponse,\n PluginType,\n RateLimitResponse,\n Response,\n Result,\n Status,\n SuccessResponse,\n} from '@amplitude/analytics-types';\nimport {\n INVALID_API_KEY,\n MAX_RETRIES_EXCEEDED_MESSAGE,\n MISSING_API_KEY_MESSAGE,\n SUCCESS_MESSAGE,\n UNEXPECTED_ERROR_MESSAGE,\n} from '../messages';\nimport { STORAGE_PREFIX } from '../constants';\nimport { chunk } from '../utils/chunk';\nimport { buildResult } from '../utils/result-builder';\nimport { createServerConfig } from '../config';\n\nexport class Destination implements DestinationPlugin {\n name = 'amplitude';\n type = PluginType.DESTINATION as const;\n\n retryTimeout = 1000;\n throttleTimeout = 30000;\n storageKey = '';\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: Config;\n scheduled = false;\n queue: Context[] = [];\n\n async setup(config: Config): Promise<undefined> {\n this.config = config;\n\n this.storageKey = `${STORAGE_PREFIX}_${this.config.apiKey.substring(0, 10)}`;\n const unsent = await this.config.storageProvider?.get(this.storageKey);\n this.saveEvents(); // sets storage to '[]'\n if (unsent && unsent.length > 0) {\n void Promise.all(unsent.map((event) => this.execute(event))).catch();\n }\n\n return Promise.resolve(undefined);\n }\n\n execute(event: Event): Promise<Result> {\n return new Promise((resolve) => {\n const context = {\n event,\n attempts: 0,\n callback: (result: Result) => resolve(result),\n timeout: 0,\n };\n void this.addToQueue(context);\n });\n }\n\n addToQueue(...list: Context[]) {\n const tryable = list.filter((context) => {\n if (context.attempts < this.config.flushMaxRetries) {\n context.attempts += 1;\n return true;\n }\n void this.fulfillRequest([context], 500, MAX_RETRIES_EXCEEDED_MESSAGE);\n return false;\n });\n\n tryable.forEach((context) => {\n this.queue = this.queue.concat(context);\n if (context.timeout === 0) {\n this.schedule(this.config.flushIntervalMillis);\n return;\n }\n\n setTimeout(() => {\n context.timeout = 0;\n this.schedule(0);\n }, context.timeout);\n });\n\n this.saveEvents();\n }\n\n schedule(timeout: number) {\n if (this.scheduled) return;\n this.scheduled = true;\n setTimeout(() => {\n void this.flush(true).then(() => {\n this.scheduled = false;\n if (this.queue.length > 0) {\n this.schedule(timeout);\n }\n });\n }, timeout);\n }\n\n async flush(useRetry = false) {\n const list: Context[] = [];\n const later: Context[] = [];\n this.queue.forEach((context) => (context.timeout === 0 ? list.push(context) : later.push(context)));\n this.queue = later;\n\n const batches = chunk(list, this.config.flushQueueSize);\n await Promise.all(batches.map((batch) => this.send(batch, useRetry)));\n }\n\n async send(list: Context[], useRetry = true) {\n if (!this.config.apiKey) {\n return this.fulfillRequest(list, 400, MISSING_API_KEY_MESSAGE);\n }\n\n const payload = {\n api_key: this.config.apiKey,\n events: list.map((context) => context.event),\n options: {\n min_id_length: this.config.minIdLength,\n },\n };\n\n try {\n const { serverUrl } = createServerConfig(this.config.serverUrl, this.config.serverZone, this.config.useBatch);\n const res = await this.config.transportProvider.send(serverUrl, payload);\n if (res === null) {\n this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);\n return;\n }\n if (!useRetry) {\n this.fulfillRequest(list, res.statusCode, res.status);\n return;\n }\n this.handleReponse(res, list);\n } catch (e) {\n this.fulfillRequest(list, 0, String(e));\n }\n }\n\n handleReponse(res: Response, list: Context[]) {\n const { status } = res;\n switch (status) {\n case Status.Success:\n this.handleSuccessResponse(res, list);\n break;\n\n case Status.Invalid:\n this.handleInvalidResponse(res, list);\n break;\n\n case Status.PayloadTooLarge:\n this.handlePayloadTooLargeResponse(res, list);\n break;\n\n case Status.RateLimit:\n this.handleRateLimitResponse(res, list);\n break;\n\n default:\n this.handleOtherReponse(list);\n }\n }\n\n handleSuccessResponse(res: SuccessResponse, list: Context[]) {\n this.fulfillRequest(list, res.statusCode, SUCCESS_MESSAGE);\n }\n\n handleInvalidResponse(res: InvalidResponse, list: Context[]) {\n if (res.body.missingField || res.body.error.startsWith(INVALID_API_KEY)) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n\n const dropIndex = [\n ...Object.values(res.body.eventsWithInvalidFields),\n ...Object.values(res.body.eventsWithMissingFields),\n ...Object.values(res.body.eventsWithInvalidIdLengths),\n ...res.body.silencedEvents,\n ].flat();\n const dropIndexSet = new Set(dropIndex);\n\n const retry = list.filter((context, index) => {\n if (dropIndexSet.has(index)) {\n this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n return true;\n });\n\n this.addToQueue(...retry);\n }\n\n handlePayloadTooLargeResponse(res: PayloadTooLargeResponse, list: Context[]) {\n if (list.length === 1) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n this.config.flushQueueSize /= 2;\n this.addToQueue(...list);\n }\n\n handleRateLimitResponse(res: RateLimitResponse, list: Context[]) {\n const dropUserIds = Object.keys(res.body.exceededDailyQuotaUsers);\n const dropDeviceIds = Object.keys(res.body.exceededDailyQuotaDevices);\n const throttledIndex = res.body.throttledEvents;\n const dropUserIdsSet = new Set(dropUserIds);\n const dropDeviceIdsSet = new Set(dropDeviceIds);\n const throttledIndexSet = new Set(throttledIndex);\n\n const retry = list.filter((context, index) => {\n if (\n (context.event.user_id && dropUserIdsSet.has(context.event.user_id)) ||\n (context.event.device_id && dropDeviceIdsSet.has(context.event.device_id))\n ) {\n this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n if (throttledIndexSet.has(index)) {\n context.timeout = this.throttleTimeout;\n }\n return true;\n });\n\n this.addToQueue(...retry);\n }\n\n handleOtherReponse(list: Context[]) {\n this.addToQueue(\n ...list.map((context) => {\n context.timeout = context.attempts * this.retryTimeout;\n return context;\n }),\n );\n }\n\n fulfillRequest(list: Context[], code: number, message: string) {\n this.saveEvents();\n list.forEach((context) => context.callback(buildResult(context.event, code, message)));\n }\n\n /**\n * Saves events to storage\n * This is called on\n * 1) new events are added to queue; or\n * 2) response comes back for a request\n */\n saveEvents() {\n if (!this.config.storageProvider) {\n return;\n }\n const events = Array.from(this.queue.map((context) => context.event));\n void this.config.storageProvider.set(this.storageKey, events);\n }\n}\n"]}
|
package/lib/cjs/timeline.d.ts
CHANGED
|
@@ -2,11 +2,12 @@ import { Config, Event, EventCallback, Plugin, Result } from '@amplitude/analyti
|
|
|
2
2
|
export declare class Timeline {
|
|
3
3
|
queue: [Event, EventCallback][];
|
|
4
4
|
applying: boolean;
|
|
5
|
-
|
|
5
|
+
isReady: boolean;
|
|
6
6
|
plugins: Plugin[];
|
|
7
7
|
register(plugin: Plugin, config: Config): Promise<void>;
|
|
8
8
|
deregister(pluginName: string): Promise<void>;
|
|
9
|
-
|
|
9
|
+
reset(): void;
|
|
10
|
+
push(event: Event): Promise<Result>;
|
|
10
11
|
scheduleApply(timeout: number): void;
|
|
11
12
|
apply(item: [Event, EventCallback] | undefined): Promise<void>;
|
|
12
13
|
flush(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EAGN,KAAK,EACL,aAAa,EACb,MAAM,EAEN,MAAM,EACP,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EAGN,KAAK,EACL,aAAa,EACb,MAAM,EAEN,MAAM,EACP,MAAM,4BAA4B,CAAC;AAGpC,qBAAa,QAAQ;IACnB,KAAK,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAM;IAErC,QAAQ,UAAS;IAGjB,OAAO,UAAS;IAChB,OAAO,EAAE,MAAM,EAAE,CAAM;IAEjB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAK7C,UAAU,CAAC,UAAU,EAAE,MAAM;IAQ7B,KAAK;IAML,IAAI,CAAC,KAAK,EAAE,KAAK;IAOjB,aAAa,CAAC,OAAO,EAAE,MAAM;IAavB,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,SAAS;IAwC9C,KAAK;CAgBZ"}
|
package/lib/cjs/timeline.js
CHANGED
|
@@ -2,13 +2,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
2
2
|
exports.Timeline = void 0;
|
|
3
3
|
var tslib_1 = require("tslib");
|
|
4
4
|
var analytics_types_1 = require("@amplitude/analytics-types");
|
|
5
|
-
var messages_1 = require("./messages");
|
|
6
5
|
var result_builder_1 = require("./utils/result-builder");
|
|
7
6
|
var Timeline = /** @class */ (function () {
|
|
8
7
|
function Timeline() {
|
|
9
8
|
this.queue = [];
|
|
9
|
+
// Flag to guarantee one schedule apply is running
|
|
10
10
|
this.applying = false;
|
|
11
|
-
|
|
11
|
+
// Flag indicates whether timeline is ready to process event
|
|
12
|
+
// Events collected before timeline is ready will stay in the queue to be processed later
|
|
13
|
+
this.isReady = false;
|
|
12
14
|
this.plugins = [];
|
|
13
15
|
}
|
|
14
16
|
Timeline.prototype.register = function (plugin, config) {
|
|
@@ -28,20 +30,21 @@ var Timeline = /** @class */ (function () {
|
|
|
28
30
|
this.plugins.splice(this.plugins.findIndex(function (plugin) { return plugin.name === pluginName; }), 1);
|
|
29
31
|
return Promise.resolve();
|
|
30
32
|
};
|
|
31
|
-
Timeline.prototype.
|
|
33
|
+
Timeline.prototype.reset = function () {
|
|
34
|
+
this.applying = false;
|
|
35
|
+
this.isReady = false;
|
|
36
|
+
this.plugins = [];
|
|
37
|
+
};
|
|
38
|
+
Timeline.prototype.push = function (event) {
|
|
32
39
|
var _this = this;
|
|
33
40
|
return new Promise(function (resolve) {
|
|
34
|
-
if (config.optOut) {
|
|
35
|
-
resolve((0, result_builder_1.buildResult)(event, 0, messages_1.OPT_OUT_MESSAGE));
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
41
|
_this.queue.push([event, resolve]);
|
|
39
42
|
_this.scheduleApply(0);
|
|
40
43
|
});
|
|
41
44
|
};
|
|
42
45
|
Timeline.prototype.scheduleApply = function (timeout) {
|
|
43
46
|
var _this = this;
|
|
44
|
-
if (this.applying)
|
|
47
|
+
if (this.applying && this.isReady)
|
|
45
48
|
return;
|
|
46
49
|
this.applying = true;
|
|
47
50
|
setTimeout(function () {
|
package/lib/cjs/timeline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/timeline.ts"],"names":[],"mappings":";;;AAAA,8DAUoC;AACpC,
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/timeline.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BeforePlugin,\n Config,\n DestinationPlugin,\n EnrichmentPlugin,\n Event,\n EventCallback,\n Plugin,\n PluginType,\n Result,\n} from '@amplitude/analytics-types';\nimport { buildResult } from './utils/result-builder';\n\nexport class Timeline {\n queue: [Event, EventCallback][] = [];\n // Flag to guarantee one schedule apply is running\n applying = false;\n // Flag indicates whether timeline is ready to process event\n // Events collected before timeline is ready will stay in the queue to be processed later\n isReady = false;\n plugins: Plugin[] = [];\n\n async register(plugin: Plugin, config: Config) {\n await plugin.setup(config);\n this.plugins.push(plugin);\n }\n\n deregister(pluginName: string) {\n this.plugins.splice(\n this.plugins.findIndex((plugin) => plugin.name === pluginName),\n 1,\n );\n return Promise.resolve();\n }\n\n reset() {\n this.applying = false;\n this.isReady = false;\n this.plugins = [];\n }\n\n push(event: Event) {\n return new Promise<Result>((resolve) => {\n this.queue.push([event, resolve]);\n this.scheduleApply(0);\n });\n }\n\n scheduleApply(timeout: number) {\n if (this.applying && this.isReady) return;\n this.applying = true;\n setTimeout(() => {\n void this.apply(this.queue.shift()).then(() => {\n this.applying = false;\n if (this.queue.length > 0) {\n this.scheduleApply(0);\n }\n });\n }, timeout);\n }\n\n async apply(item: [Event, EventCallback] | undefined) {\n if (!item) {\n return;\n }\n\n let [event] = item;\n const [, resolve] = item;\n\n const before = this.plugins.filter<BeforePlugin>(\n (plugin: Plugin): plugin is BeforePlugin => plugin.type === PluginType.BEFORE,\n );\n\n for (const plugin of before) {\n event = await plugin.execute({ ...event });\n }\n\n const enrichment = this.plugins.filter<EnrichmentPlugin>(\n (plugin: Plugin): plugin is EnrichmentPlugin => plugin.type === PluginType.ENRICHMENT,\n );\n\n for (const plugin of enrichment) {\n event = await plugin.execute({ ...event });\n }\n\n const destination = this.plugins.filter<DestinationPlugin>(\n (plugin: Plugin): plugin is DestinationPlugin => plugin.type === PluginType.DESTINATION,\n );\n\n const executeDestinations = destination.map((plugin) => {\n const eventClone = { ...event };\n return plugin.execute(eventClone).catch((e) => buildResult(eventClone, 0, String(e)));\n });\n\n void Promise.all(executeDestinations).then(([result]) => {\n resolve(result);\n });\n\n return;\n }\n\n async flush() {\n const queue = this.queue;\n this.queue = [];\n\n await Promise.all(queue.map((item) => this.apply(item)));\n\n const destination = this.plugins.filter<DestinationPlugin>(\n (plugin: Plugin): plugin is DestinationPlugin => plugin.type === PluginType.DESTINATION,\n );\n\n const executeDestinations = destination.map((plugin) => {\n return plugin.flush && plugin.flush();\n });\n\n await Promise.all(executeDestinations);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valid-properties.d.ts","sourceRoot":"","sources":["../../../src/utils/valid-properties.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;MAAyC,OAUlE,CAAC;AAEF,eAAO,MAAM,iBAAiB,aAAc,MAAM,SAAS,GAAG,KAAG,
|
|
1
|
+
{"version":3,"file":"valid-properties.d.ts","sourceRoot":"","sources":["../../../src/utils/valid-properties.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;MAAyC,OAUlE,CAAC;AAEF,eAAO,MAAM,iBAAiB,aAAc,MAAM,SAAS,GAAG,KAAG,OAyBhE,CAAC"}
|
|
@@ -46,6 +46,9 @@ var isValidProperties = function (property, value) {
|
|
|
46
46
|
finally { if (e_1) throw e_1.error; }
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
+
else if (value === null || value === undefined) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
49
52
|
else if (typeof value === 'object') {
|
|
50
53
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
51
54
|
return (0, exports.isValidObject)(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valid-properties.js","sourceRoot":"","sources":["../../../src/utils/valid-properties.ts"],"names":[],"mappings":";;;AAAA,IAAM,iBAAiB,GAAG,IAAI,CAAC;AAExB,IAAM,aAAa,GAAG,UAAC,UAAkC;IAC9D,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,iBAAiB,EAAE;QACtD,OAAO,KAAK,CAAC;KACd;IACD,KAAK,IAAM,GAAG,IAAI,UAAU,EAAE;QAC5B,mEAAmE;QACnE,IAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAA,yBAAiB,EAAC,GAAG,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;KAClD;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAVW,QAAA,aAAa,iBAUxB;AAEK,IAAM,iBAAiB,GAAG,UAAC,QAAgB,EAAE,KAAU;;IAC5D,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,IAAI,OAAO,GAAG,IAAI,CAAC;;YACnB,KAA2B,IAAA,UAAA,sBAAA,KAAK,CAAA,4BAAA,+CAAE;gBAA7B,IAAM,YAAY,kBAAA;gBACrB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAC/B,OAAO,KAAK,CAAC;iBACd;qBAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;oBAC3C,OAAO,GAAG,OAAO,IAAI,IAAA,qBAAa,EAAC,YAAsB,CAAC,CAAC;iBAC5D;qBAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,YAAY,CAAC,EAAE;oBAC9D,OAAO,KAAK,CAAC;iBACd;gBACD,IAAI,CAAC,OAAO,EAAE;oBACZ,OAAO,KAAK,CAAC;iBACd;aACF;;;;;;;;;KACF;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACpC,iEAAiE;QACjE,OAAO,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC;KAC7B;SAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE;QAClE,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"valid-properties.js","sourceRoot":"","sources":["../../../src/utils/valid-properties.ts"],"names":[],"mappings":";;;AAAA,IAAM,iBAAiB,GAAG,IAAI,CAAC;AAExB,IAAM,aAAa,GAAG,UAAC,UAAkC;IAC9D,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,iBAAiB,EAAE;QACtD,OAAO,KAAK,CAAC;KACd;IACD,KAAK,IAAM,GAAG,IAAI,UAAU,EAAE;QAC5B,mEAAmE;QACnE,IAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAA,yBAAiB,EAAC,GAAG,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;KAClD;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAVW,QAAA,aAAa,iBAUxB;AAEK,IAAM,iBAAiB,GAAG,UAAC,QAAgB,EAAE,KAAU;;IAC5D,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,IAAI,OAAO,GAAG,IAAI,CAAC;;YACnB,KAA2B,IAAA,UAAA,sBAAA,KAAK,CAAA,4BAAA,+CAAE;gBAA7B,IAAM,YAAY,kBAAA;gBACrB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAC/B,OAAO,KAAK,CAAC;iBACd;qBAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;oBAC3C,OAAO,GAAG,OAAO,IAAI,IAAA,qBAAa,EAAC,YAAsB,CAAC,CAAC;iBAC5D;qBAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,YAAY,CAAC,EAAE;oBAC9D,OAAO,KAAK,CAAC;iBACd;gBACD,IAAI,CAAC,OAAO,EAAE;oBACZ,OAAO,KAAK,CAAC;iBACd;aACF;;;;;;;;;KACF;SAAM,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QAChD,OAAO,KAAK,CAAC;KACd;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACpC,iEAAiE;QACjE,OAAO,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC;KAC7B;SAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE;QAClE,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAzBW,QAAA,iBAAiB,qBAyB5B","sourcesContent":["const MAX_PROPERTY_KEYS = 1000;\n\nexport const isValidObject = (properties: { [key: string]: any }): boolean => {\n if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n return false;\n }\n for (const key in properties) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const value = properties[key];\n if (!isValidProperties(key, value)) return false;\n }\n return true;\n};\n\nexport const isValidProperties = (property: string, value: any): boolean => {\n if (typeof property !== 'string') return false;\n if (Array.isArray(value)) {\n let isValid = true;\n for (const valueElement of value) {\n if (Array.isArray(valueElement)) {\n return false;\n } else if (typeof valueElement === 'object') {\n isValid = isValid && isValidObject(valueElement as object);\n } else if (!['number', 'string'].includes(typeof valueElement)) {\n return false;\n }\n if (!isValid) {\n return false;\n }\n }\n } else if (value === null || value === undefined) {\n return false;\n } else if (typeof value === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return isValidObject(value);\n } else if (!['number', 'string', 'boolean'].includes(typeof value)) {\n return false;\n }\n return true;\n};\n"]}
|
package/lib/esm/config.d.ts
CHANGED
|
@@ -6,7 +6,6 @@ export declare const getDefaultConfig: () => {
|
|
|
6
6
|
flushIntervalMillis: number;
|
|
7
7
|
logLevel: LogLevel;
|
|
8
8
|
loggerProvider: Logger;
|
|
9
|
-
saveEvents: boolean;
|
|
10
9
|
optOut: boolean;
|
|
11
10
|
serverUrl: string;
|
|
12
11
|
serverZone: ServerZone;
|
|
@@ -21,11 +20,10 @@ export declare class Config implements IConfig {
|
|
|
21
20
|
logLevel: LogLevel;
|
|
22
21
|
minIdLength?: number;
|
|
23
22
|
plan?: Plan;
|
|
24
|
-
saveEvents: boolean;
|
|
25
23
|
serverUrl: string | undefined;
|
|
26
24
|
serverZone?: ServerZone;
|
|
27
25
|
transportProvider: Transport;
|
|
28
|
-
storageProvider
|
|
26
|
+
storageProvider?: Storage<Event[]>;
|
|
29
27
|
useBatch: boolean;
|
|
30
28
|
private _optOut;
|
|
31
29
|
get optOut(): boolean;
|
package/lib/esm/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,MAAM,IAAI,OAAO,EACjB,MAAM,IAAI,OAAO,EACjB,WAAW,EACX,QAAQ,EACR,OAAO,EACP,SAAS,EACT,IAAI,EACJ,UAAU,EACX,MAAM,4BAA4B,CAAC;AAQpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,MAAM,IAAI,OAAO,EACjB,MAAM,IAAI,OAAO,EACjB,WAAW,EACX,QAAQ,EACR,OAAO,EACP,SAAS,EACT,IAAI,EACJ,UAAU,EACX,MAAM,4BAA4B,CAAC;AAQpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,gBAAgB;;;;;;;;;;CAU3B,CAAC;AAEH,qBAAa,MAAO,YAAW,OAAO;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAElB,OAAO,CAAC,OAAO,CAAS;IACxB,IAAI,MAAM,IAGS,OAAO,CADzB;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAEzB;gBAEW,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;CAsB1C;AAED,eAAO,MAAM,YAAY,eAAgB,UAAU,YAAY,OAAO,kKAKrE,CAAC;AAEF,eAAO,MAAM,kBAAkB,oCAEjB,UAAU,aACZ,OAAO;;;;;;CAUlB,CAAC"}
|
package/lib/esm/config.js
CHANGED
|
@@ -2,12 +2,11 @@ import { LogLevel, ServerZone, } from '@amplitude/analytics-types';
|
|
|
2
2
|
import { AMPLITUDE_SERVER_URL, AMPLITUDE_BATCH_SERVER_URL, EU_AMPLITUDE_SERVER_URL, EU_AMPLITUDE_BATCH_SERVER_URL, } from './constants';
|
|
3
3
|
import { Logger } from './logger';
|
|
4
4
|
export var getDefaultConfig = function () { return ({
|
|
5
|
-
flushMaxRetries:
|
|
6
|
-
flushQueueSize:
|
|
7
|
-
flushIntervalMillis:
|
|
5
|
+
flushMaxRetries: 12,
|
|
6
|
+
flushQueueSize: 200,
|
|
7
|
+
flushIntervalMillis: 10000,
|
|
8
8
|
logLevel: LogLevel.Warn,
|
|
9
9
|
loggerProvider: new Logger(),
|
|
10
|
-
saveEvents: true,
|
|
11
10
|
optOut: false,
|
|
12
11
|
serverUrl: AMPLITUDE_SERVER_URL,
|
|
13
12
|
serverZone: ServerZone.US,
|
|
@@ -15,7 +14,7 @@ export var getDefaultConfig = function () { return ({
|
|
|
15
14
|
}); };
|
|
16
15
|
var Config = /** @class */ (function () {
|
|
17
16
|
function Config(options) {
|
|
18
|
-
var _a, _b, _c
|
|
17
|
+
var _a, _b, _c;
|
|
19
18
|
this._optOut = false;
|
|
20
19
|
var defaultConfig = getDefaultConfig();
|
|
21
20
|
this.apiKey = options.apiKey;
|
|
@@ -27,12 +26,11 @@ var Config = /** @class */ (function () {
|
|
|
27
26
|
this.minIdLength = options.minIdLength;
|
|
28
27
|
this.plan = options.plan;
|
|
29
28
|
this.optOut = (_b = options.optOut) !== null && _b !== void 0 ? _b : defaultConfig.optOut;
|
|
30
|
-
this.saveEvents = (_c = options.saveEvents) !== null && _c !== void 0 ? _c : defaultConfig.saveEvents;
|
|
31
29
|
this.serverUrl = options.serverUrl;
|
|
32
30
|
this.serverZone = options.serverZone || defaultConfig.serverZone;
|
|
33
31
|
this.storageProvider = options.storageProvider;
|
|
34
32
|
this.transportProvider = options.transportProvider;
|
|
35
|
-
this.useBatch = (
|
|
33
|
+
this.useBatch = (_c = options.useBatch) !== null && _c !== void 0 ? _c : defaultConfig.useBatch;
|
|
36
34
|
this.loggerProvider.enable(this.logLevel);
|
|
37
35
|
var serverConfig = createServerConfig(options.serverUrl, options.serverZone, options.useBatch);
|
|
38
36
|
this.serverZone = serverConfig.serverZone;
|
package/lib/esm/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,QAAQ,EAIR,UAAU,GACX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,CAAC,IAAM,gBAAgB,GAAG,cAAM,OAAA,CAAC;IACrC,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Event,\n Config as IConfig,\n Logger as ILogger,\n InitOptions,\n LogLevel,\n Storage,\n Transport,\n Plan,\n ServerZone,\n} from '@amplitude/analytics-types';\nimport {\n AMPLITUDE_SERVER_URL,\n AMPLITUDE_BATCH_SERVER_URL,\n EU_AMPLITUDE_SERVER_URL,\n EU_AMPLITUDE_BATCH_SERVER_URL,\n} from './constants';\n\nimport { Logger } from './logger';\n\nexport const getDefaultConfig = () => ({\n flushMaxRetries: 12,\n flushQueueSize: 200,\n flushIntervalMillis: 10000,\n logLevel: LogLevel.Warn,\n loggerProvider: new Logger(),\n optOut: false,\n serverUrl: AMPLITUDE_SERVER_URL,\n serverZone: ServerZone.US,\n useBatch: false,\n});\n\nexport class Config implements IConfig {\n apiKey: string;\n flushIntervalMillis: number;\n flushMaxRetries: number;\n flushQueueSize: number;\n loggerProvider: ILogger;\n logLevel: LogLevel;\n minIdLength?: number;\n plan?: Plan;\n serverUrl: string | undefined;\n serverZone?: ServerZone;\n transportProvider: Transport;\n storageProvider?: Storage<Event[]>;\n useBatch: boolean;\n\n private _optOut = false;\n get optOut() {\n return this._optOut;\n }\n set optOut(optOut: boolean) {\n this._optOut = optOut;\n }\n\n constructor(options: InitOptions<IConfig>) {\n const defaultConfig = getDefaultConfig();\n this.apiKey = options.apiKey;\n this.flushIntervalMillis = options.flushIntervalMillis || defaultConfig.flushIntervalMillis;\n this.flushMaxRetries = options.flushMaxRetries || defaultConfig.flushMaxRetries;\n this.flushQueueSize = options.flushQueueSize || defaultConfig.flushQueueSize;\n this.loggerProvider = options.loggerProvider || defaultConfig.loggerProvider;\n this.logLevel = options.logLevel ?? defaultConfig.logLevel;\n this.minIdLength = options.minIdLength;\n this.plan = options.plan;\n this.optOut = options.optOut ?? defaultConfig.optOut;\n this.serverUrl = options.serverUrl;\n this.serverZone = options.serverZone || defaultConfig.serverZone;\n this.storageProvider = options.storageProvider;\n this.transportProvider = options.transportProvider;\n this.useBatch = options.useBatch ?? defaultConfig.useBatch;\n this.loggerProvider.enable(this.logLevel);\n\n const serverConfig = createServerConfig(options.serverUrl, options.serverZone, options.useBatch);\n this.serverZone = serverConfig.serverZone;\n this.serverUrl = serverConfig.serverUrl;\n }\n}\n\nexport const getServerUrl = (serverZone: ServerZone, useBatch: boolean) => {\n if (serverZone === ServerZone.EU) {\n return useBatch ? EU_AMPLITUDE_BATCH_SERVER_URL : EU_AMPLITUDE_SERVER_URL;\n }\n return useBatch ? AMPLITUDE_BATCH_SERVER_URL : AMPLITUDE_SERVER_URL;\n};\n\nexport const createServerConfig = (\n serverUrl = '',\n serverZone: ServerZone = getDefaultConfig().serverZone,\n useBatch: boolean = getDefaultConfig().useBatch,\n) => {\n if (serverUrl) {\n return { serverUrl, serverZone: undefined };\n }\n const _serverZone = [ServerZone.US, ServerZone.EU].includes(serverZone) ? serverZone : getDefaultConfig().serverZone;\n return {\n serverZone: _serverZone,\n serverUrl: getServerUrl(_serverZone, useBatch),\n };\n};\n"]}
|
package/lib/esm/core-client.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare class AmplitudeCore<T extends Config> implements CoreClient<T> {
|
|
|
5
5
|
config: T;
|
|
6
6
|
timeline: Timeline;
|
|
7
7
|
constructor(name?: string);
|
|
8
|
-
|
|
8
|
+
_init(config: T): Promise<void>;
|
|
9
9
|
track(eventInput: BaseEvent | string, eventProperties?: Record<string, any>, eventOptions?: EventOptions): Promise<import("@amplitude/analytics-types").Result>;
|
|
10
10
|
logEvent: (eventInput: BaseEvent | string, eventProperties?: Record<string, any> | undefined, eventOptions?: EventOptions | undefined) => Promise<import("@amplitude/analytics-types").Result>;
|
|
11
11
|
identify(identify: Identify, eventOptions?: EventOptions): Promise<import("@amplitude/analytics-types").Result>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-client.d.ts","sourceRoot":"","sources":["../../src/core-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,MAAM,EACN,KAAK,EACL,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,OAAO,EACR,MAAM,4BAA4B,CAAC;AAQpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"core-client.d.ts","sourceRoot":"","sources":["../../src/core-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,MAAM,EACN,KAAK,EACL,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,OAAO,EACR,MAAM,4BAA4B,CAAC;AAQpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,qBAAa,aAAa,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,UAAU,CAAC,CAAC,CAAC;IACnE,IAAI,EAAE,MAAM,CAAC;IAGb,MAAM,EAAE,CAAC,CAAC;IAGV,QAAQ,EAAE,QAAQ,CAAC;gBAEP,IAAI,SAAa;IAK7B,KAAK,CAAC,MAAM,EAAE,CAAC;IAMf,KAAK,CAAC,UAAU,EAAE,SAAS,GAAG,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY;IAKxG,QAAQ,eALU,SAAS,GAAG,MAAM,sJAKH;IAEjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,YAAY;IAKxD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,YAAY;IAK9G,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAKxD,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,YAAY;IAK/C,GAAG,CAAC,MAAM,EAAE,MAAM;IAKlB,MAAM,CAAC,UAAU,EAAE,MAAM;IAIzB,QAAQ,CAAC,KAAK,EAAE,KAAK;IAoB3B,SAAS,CAAC,MAAM,EAAE,OAAO;IAKzB,KAAK;CAGN"}
|
package/lib/esm/core-client.js
CHANGED
|
@@ -2,16 +2,17 @@ import { __awaiter, __generator } from "tslib";
|
|
|
2
2
|
import { createGroupIdentifyEvent, createIdentifyEvent, createTrackEvent, createRevenueEvent, createGroupEvent, } from './utils/event-builder';
|
|
3
3
|
import { Timeline } from './timeline';
|
|
4
4
|
import { buildResult } from './utils/result-builder';
|
|
5
|
+
import { OPT_OUT_MESSAGE } from './messages';
|
|
5
6
|
var AmplitudeCore = /** @class */ (function () {
|
|
6
7
|
function AmplitudeCore(name) {
|
|
7
8
|
if (name === void 0) { name = '$default'; }
|
|
8
9
|
this.logEvent = this.track.bind(this);
|
|
10
|
+
this.timeline = new Timeline();
|
|
9
11
|
this.name = name;
|
|
10
12
|
}
|
|
11
|
-
|
|
12
|
-
AmplitudeCore.prototype.init = function (_apiKey, _userId, config) {
|
|
13
|
+
AmplitudeCore.prototype._init = function (config) {
|
|
13
14
|
this.config = config;
|
|
14
|
-
this.timeline
|
|
15
|
+
this.timeline.reset();
|
|
15
16
|
return Promise.resolve();
|
|
16
17
|
};
|
|
17
18
|
AmplitudeCore.prototype.track = function (eventInput, eventProperties, eventOptions) {
|
|
@@ -51,15 +52,20 @@ var AmplitudeCore = /** @class */ (function () {
|
|
|
51
52
|
});
|
|
52
53
|
};
|
|
53
54
|
AmplitudeCore.prototype.dispatch = function (event) {
|
|
55
|
+
var _a;
|
|
54
56
|
return __awaiter(this, void 0, void 0, function () {
|
|
55
57
|
var result, e_1, message;
|
|
56
|
-
return __generator(this, function (
|
|
57
|
-
switch (
|
|
58
|
+
return __generator(this, function (_b) {
|
|
59
|
+
switch (_b.label) {
|
|
58
60
|
case 0:
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
_b.trys.push([0, 2, , 3]);
|
|
62
|
+
// skip event processing if opt out
|
|
63
|
+
if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.optOut) {
|
|
64
|
+
return [2 /*return*/, buildResult(event, 0, OPT_OUT_MESSAGE)];
|
|
65
|
+
}
|
|
66
|
+
return [4 /*yield*/, this.timeline.push(event)];
|
|
61
67
|
case 1:
|
|
62
|
-
result =
|
|
68
|
+
result = _b.sent();
|
|
63
69
|
if (result.code === 200) {
|
|
64
70
|
this.config.loggerProvider.log(result.message);
|
|
65
71
|
}
|
|
@@ -68,7 +74,7 @@ var AmplitudeCore = /** @class */ (function () {
|
|
|
68
74
|
}
|
|
69
75
|
return [2 /*return*/, result];
|
|
70
76
|
case 2:
|
|
71
|
-
e_1 =
|
|
77
|
+
e_1 = _b.sent();
|
|
72
78
|
message = String(e_1);
|
|
73
79
|
this.config.loggerProvider.error(message);
|
|
74
80
|
return [2 /*return*/, buildResult(event, 0, message)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-client.js","sourceRoot":"","sources":["../../src/core-client.ts"],"names":[],"mappings":";AAUA,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD;IASE,uBAAY,IAAiB;QAAjB,qBAAA,EAAA,iBAAiB;QAgB7B,aAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAf/B,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"core-client.js","sourceRoot":"","sources":["../../src/core-client.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CoreClient,\n Config,\n Event,\n BaseEvent,\n EventOptions,\n Identify,\n Plugin,\n Revenue,\n} from '@amplitude/analytics-types';\nimport {\n createGroupIdentifyEvent,\n createIdentifyEvent,\n createTrackEvent,\n createRevenueEvent,\n createGroupEvent,\n} from './utils/event-builder';\nimport { Timeline } from './timeline';\nimport { buildResult } from './utils/result-builder';\nimport { OPT_OUT_MESSAGE } from './messages';\n\nexport class AmplitudeCore<T extends Config> implements CoreClient<T> {\n name: string;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: T;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n timeline: Timeline;\n\n constructor(name = '$default') {\n this.timeline = new Timeline();\n this.name = name;\n }\n\n _init(config: T) {\n this.config = config;\n this.timeline.reset();\n return Promise.resolve();\n }\n\n track(eventInput: BaseEvent | string, eventProperties?: Record<string, any>, eventOptions?: EventOptions) {\n const event = createTrackEvent(eventInput, eventProperties, eventOptions);\n return this.dispatch(event);\n }\n\n logEvent = this.track.bind(this);\n\n identify(identify: Identify, eventOptions?: EventOptions) {\n const event = createIdentifyEvent(identify, eventOptions);\n return this.dispatch(event);\n }\n\n groupIdentify(groupType: string, groupName: string | string[], identify: Identify, eventOptions?: EventOptions) {\n const event = createGroupIdentifyEvent(groupType, groupName, identify, eventOptions);\n return this.dispatch(event);\n }\n\n setGroup(groupType: string, groupName: string | string[]) {\n const event = createGroupEvent(groupType, groupName);\n return this.dispatch(event);\n }\n\n revenue(revenue: Revenue, eventOptions?: EventOptions) {\n const event = createRevenueEvent(revenue, eventOptions);\n return this.dispatch(event);\n }\n\n async add(plugin: Plugin) {\n const config = this.config;\n return this.timeline.register(plugin, config);\n }\n\n async remove(pluginName: string) {\n return this.timeline.deregister(pluginName);\n }\n\n async dispatch(event: Event) {\n try {\n // skip event processing if opt out\n if (this.config?.optOut) {\n return buildResult(event, 0, OPT_OUT_MESSAGE);\n }\n const result = await this.timeline.push(event);\n if (result.code === 200) {\n this.config.loggerProvider.log(result.message);\n } else {\n this.config.loggerProvider.error(result.message);\n }\n return result;\n } catch (e) {\n const message = String(e);\n this.config.loggerProvider.error(message);\n return buildResult(event, 0, message);\n }\n }\n\n setOptOut(optOut: boolean) {\n const config = this.config;\n config.optOut = Boolean(optOut);\n }\n\n flush() {\n return this.timeline.flush();\n }\n}\n"]}
|
package/lib/esm/messages.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export declare const UNEXPECTED_ERROR_MESSAGE = "Unexpected error occurred";
|
|
|
3
3
|
export declare const MAX_RETRIES_EXCEEDED_MESSAGE = "Event rejected due to exceeded retry count";
|
|
4
4
|
export declare const OPT_OUT_MESSAGE = "Event skipped due to optOut config";
|
|
5
5
|
export declare const MISSING_API_KEY_MESSAGE = "Event rejected due to missing API key";
|
|
6
|
+
export declare const INVALID_API_KEY = "Invalid API key";
|
|
6
7
|
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,+BAA+B,CAAC;AAC5D,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,4BAA4B,+CAA+C,CAAC;AACzF,eAAO,MAAM,eAAe,uCAAuC,CAAC;AACpE,eAAO,MAAM,uBAAuB,0CAA0C,CAAC"}
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,+BAA+B,CAAC;AAC5D,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,4BAA4B,+CAA+C,CAAC;AACzF,eAAO,MAAM,eAAe,uCAAuC,CAAC;AACpE,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAC/E,eAAO,MAAM,eAAe,oBAAoB,CAAC"}
|
package/lib/esm/messages.js
CHANGED
|
@@ -3,4 +3,5 @@ export var UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';
|
|
|
3
3
|
export var MAX_RETRIES_EXCEEDED_MESSAGE = 'Event rejected due to exceeded retry count';
|
|
4
4
|
export var OPT_OUT_MESSAGE = 'Event skipped due to optOut config';
|
|
5
5
|
export var MISSING_API_KEY_MESSAGE = 'Event rejected due to missing API key';
|
|
6
|
+
export var INVALID_API_KEY = 'Invalid API key';
|
|
6
7
|
//# sourceMappingURL=messages.js.map
|
package/lib/esm/messages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/messages.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,eAAe,GAAG,4BAA4B,CAAC;AAC5D,MAAM,CAAC,IAAM,wBAAwB,GAAG,2BAA2B,CAAC;AACpE,MAAM,CAAC,IAAM,4BAA4B,GAAG,4CAA4C,CAAC;AACzF,MAAM,CAAC,IAAM,eAAe,GAAG,oCAAoC,CAAC;AACpE,MAAM,CAAC,IAAM,uBAAuB,GAAG,uCAAuC,CAAC","sourcesContent":["export const SUCCESS_MESSAGE = 'Event tracked successfully';\nexport const UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport const MAX_RETRIES_EXCEEDED_MESSAGE = 'Event rejected due to exceeded retry count';\nexport const OPT_OUT_MESSAGE = 'Event skipped due to optOut config';\nexport const MISSING_API_KEY_MESSAGE = 'Event rejected due to missing API key';\n"]}
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/messages.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,eAAe,GAAG,4BAA4B,CAAC;AAC5D,MAAM,CAAC,IAAM,wBAAwB,GAAG,2BAA2B,CAAC;AACpE,MAAM,CAAC,IAAM,4BAA4B,GAAG,4CAA4C,CAAC;AACzF,MAAM,CAAC,IAAM,eAAe,GAAG,oCAAoC,CAAC;AACpE,MAAM,CAAC,IAAM,uBAAuB,GAAG,uCAAuC,CAAC;AAC/E,MAAM,CAAC,IAAM,eAAe,GAAG,iBAAiB,CAAC","sourcesContent":["export const SUCCESS_MESSAGE = 'Event tracked successfully';\nexport const UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport const MAX_RETRIES_EXCEEDED_MESSAGE = 'Event rejected due to exceeded retry count';\nexport const OPT_OUT_MESSAGE = 'Event skipped due to optOut config';\nexport const MISSING_API_KEY_MESSAGE = 'Event rejected due to missing API key';\nexport const INVALID_API_KEY = 'Invalid API key';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"destination.d.ts","sourceRoot":"","sources":["../../../src/plugins/destination.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,IAAI,OAAO,EAC7B,iBAAiB,EACjB,KAAK,EACL,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,MAAM,EAEN,eAAe,EAChB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"destination.d.ts","sourceRoot":"","sources":["../../../src/plugins/destination.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,IAAI,OAAO,EAC7B,iBAAiB,EACjB,KAAK,EACL,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,MAAM,EAEN,eAAe,EAChB,MAAM,4BAA4B,CAAC;AAapC,qBAAa,WAAY,YAAW,iBAAiB;IACnD,IAAI,SAAe;IACnB,IAAI,yBAAmC;IAEvC,YAAY,SAAQ;IACpB,eAAe,SAAS;IACxB,UAAU,SAAM;IAIhB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,UAAS;IAClB,KAAK,EAAE,OAAO,EAAE,CAAM;IAEhB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAa/C,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAYtC,UAAU,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE;IA0B7B,QAAQ,CAAC,OAAO,EAAE,MAAM;IAalB,KAAK,CAAC,QAAQ,UAAQ;IAUtB,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,QAAQ,UAAO;IA8B3C,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;IAwB5C,qBAAqB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE;IAI3D,qBAAqB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE;IAyB3D,6BAA6B,CAAC,GAAG,EAAE,uBAAuB,EAAE,IAAI,EAAE,OAAO,EAAE;IAS3E,uBAAuB,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE;IAyB/D,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE;IASlC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAK7D;;;;;OAKG;IACH,UAAU;CAOX"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __awaiter, __generator, __read, __spreadArray } from "tslib";
|
|
2
2
|
import { PluginType, Status, } from '@amplitude/analytics-types';
|
|
3
|
-
import { MISSING_API_KEY_MESSAGE, SUCCESS_MESSAGE, UNEXPECTED_ERROR_MESSAGE } from '../messages';
|
|
3
|
+
import { INVALID_API_KEY, MAX_RETRIES_EXCEEDED_MESSAGE, MISSING_API_KEY_MESSAGE, SUCCESS_MESSAGE, UNEXPECTED_ERROR_MESSAGE, } from '../messages';
|
|
4
4
|
import { STORAGE_PREFIX } from '../constants';
|
|
5
5
|
import { chunk } from '../utils/chunk';
|
|
6
6
|
import { buildResult } from '../utils/result-builder';
|
|
@@ -16,17 +16,18 @@ var Destination = /** @class */ (function () {
|
|
|
16
16
|
this.queue = [];
|
|
17
17
|
}
|
|
18
18
|
Destination.prototype.setup = function (config) {
|
|
19
|
+
var _a;
|
|
19
20
|
return __awaiter(this, void 0, void 0, function () {
|
|
20
21
|
var unsent;
|
|
21
22
|
var _this = this;
|
|
22
|
-
return __generator(this, function (
|
|
23
|
-
switch (
|
|
23
|
+
return __generator(this, function (_b) {
|
|
24
|
+
switch (_b.label) {
|
|
24
25
|
case 0:
|
|
25
26
|
this.config = config;
|
|
26
27
|
this.storageKey = "".concat(STORAGE_PREFIX, "_").concat(this.config.apiKey.substring(0, 10));
|
|
27
|
-
return [4 /*yield*/, this.config.storageProvider.get(this.storageKey)];
|
|
28
|
+
return [4 /*yield*/, ((_a = this.config.storageProvider) === null || _a === void 0 ? void 0 : _a.get(this.storageKey))];
|
|
28
29
|
case 1:
|
|
29
|
-
unsent =
|
|
30
|
+
unsent = _b.sent();
|
|
30
31
|
this.saveEvents(); // sets storage to '[]'
|
|
31
32
|
if (unsent && unsent.length > 0) {
|
|
32
33
|
void Promise.all(unsent.map(function (event) { return _this.execute(event); })).catch();
|
|
@@ -59,7 +60,7 @@ var Destination = /** @class */ (function () {
|
|
|
59
60
|
context.attempts += 1;
|
|
60
61
|
return true;
|
|
61
62
|
}
|
|
62
|
-
void _this.fulfillRequest([context], 500,
|
|
63
|
+
void _this.fulfillRequest([context], 500, MAX_RETRIES_EXCEEDED_MESSAGE);
|
|
63
64
|
return false;
|
|
64
65
|
});
|
|
65
66
|
tryable.forEach(function (context) {
|
|
@@ -177,7 +178,7 @@ var Destination = /** @class */ (function () {
|
|
|
177
178
|
};
|
|
178
179
|
Destination.prototype.handleInvalidResponse = function (res, list) {
|
|
179
180
|
var _this = this;
|
|
180
|
-
if (res.body.missingField) {
|
|
181
|
+
if (res.body.missingField || res.body.error.startsWith(INVALID_API_KEY)) {
|
|
181
182
|
this.fulfillRequest(list, res.statusCode, res.body.error);
|
|
182
183
|
return;
|
|
183
184
|
}
|
|
@@ -239,7 +240,7 @@ var Destination = /** @class */ (function () {
|
|
|
239
240
|
* 2) response comes back for a request
|
|
240
241
|
*/
|
|
241
242
|
Destination.prototype.saveEvents = function () {
|
|
242
|
-
if (!this.config.
|
|
243
|
+
if (!this.config.storageProvider) {
|
|
243
244
|
return;
|
|
244
245
|
}
|
|
245
246
|
var events = Array.from(this.queue.map(function (context) { return context.event; }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"destination.js","sourceRoot":"","sources":["../../../src/plugins/destination.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Config,\n DestinationContext as Context,\n DestinationPlugin,\n Event,\n InvalidResponse,\n PayloadTooLargeResponse,\n PluginType,\n RateLimitResponse,\n Response,\n Result,\n Status,\n SuccessResponse,\n} from '@amplitude/analytics-types';\nimport { MISSING_API_KEY_MESSAGE, SUCCESS_MESSAGE, UNEXPECTED_ERROR_MESSAGE } from '../messages';\nimport { STORAGE_PREFIX } from '../constants';\nimport { chunk } from '../utils/chunk';\nimport { buildResult } from '../utils/result-builder';\nimport { createServerConfig } from '../config';\n\nexport class Destination implements DestinationPlugin {\n name = 'amplitude';\n type = PluginType.DESTINATION as const;\n\n retryTimeout = 1000;\n throttleTimeout = 30000;\n storageKey = '';\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: Config;\n scheduled = false;\n queue: Context[] = [];\n\n async setup(config: Config): Promise<undefined> {\n this.config = config;\n\n this.storageKey = `${STORAGE_PREFIX}_${this.config.apiKey.substring(0, 10)}`;\n const unsent = await this.config.storageProvider.get(this.storageKey);\n this.saveEvents(); // sets storage to '[]'\n if (unsent && unsent.length > 0) {\n void Promise.all(unsent.map((event) => this.execute(event))).catch();\n }\n\n return Promise.resolve(undefined);\n }\n\n execute(event: Event): Promise<Result> {\n return new Promise((resolve) => {\n const context = {\n event,\n attempts: 0,\n callback: (result: Result) => resolve(result),\n timeout: 0,\n };\n void this.addToQueue(context);\n });\n }\n\n addToQueue(...list: Context[]) {\n const tryable = list.filter((context) => {\n if (context.attempts < this.config.flushMaxRetries) {\n context.attempts += 1;\n return true;\n }\n void this.fulfillRequest([context], 500, Status.Unknown);\n return false;\n });\n\n tryable.forEach((context) => {\n this.queue = this.queue.concat(context);\n if (context.timeout === 0) {\n this.schedule(this.config.flushIntervalMillis);\n return;\n }\n\n setTimeout(() => {\n context.timeout = 0;\n this.schedule(0);\n }, context.timeout);\n });\n\n this.saveEvents();\n }\n\n schedule(timeout: number) {\n if (this.scheduled) return;\n this.scheduled = true;\n setTimeout(() => {\n void this.flush(true).then(() => {\n this.scheduled = false;\n if (this.queue.length > 0) {\n this.schedule(timeout);\n }\n });\n }, timeout);\n }\n\n async flush(useRetry = false) {\n const list: Context[] = [];\n const later: Context[] = [];\n this.queue.forEach((context) => (context.timeout === 0 ? list.push(context) : later.push(context)));\n this.queue = later;\n\n const batches = chunk(list, this.config.flushQueueSize);\n await Promise.all(batches.map((batch) => this.send(batch, useRetry)));\n }\n\n async send(list: Context[], useRetry = true) {\n if (!this.config.apiKey) {\n return this.fulfillRequest(list, 400, MISSING_API_KEY_MESSAGE);\n }\n\n const payload = {\n api_key: this.config.apiKey,\n events: list.map((context) => context.event),\n options: {\n min_id_length: this.config.minIdLength,\n },\n };\n\n try {\n const { serverUrl } = createServerConfig(this.config.serverUrl, this.config.serverZone, this.config.useBatch);\n const res = await this.config.transportProvider.send(serverUrl, payload);\n if (res === null) {\n this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);\n return;\n }\n if (!useRetry) {\n this.fulfillRequest(list, res.statusCode, res.status);\n return;\n }\n this.handleReponse(res, list);\n } catch (e) {\n this.fulfillRequest(list, 0, String(e));\n }\n }\n\n handleReponse(res: Response, list: Context[]) {\n const { status } = res;\n switch (status) {\n case Status.Success:\n this.handleSuccessResponse(res, list);\n break;\n\n case Status.Invalid:\n this.handleInvalidResponse(res, list);\n break;\n\n case Status.PayloadTooLarge:\n this.handlePayloadTooLargeResponse(res, list);\n break;\n\n case Status.RateLimit:\n this.handleRateLimitResponse(res, list);\n break;\n\n default:\n this.handleOtherReponse(list);\n }\n }\n\n handleSuccessResponse(res: SuccessResponse, list: Context[]) {\n this.fulfillRequest(list, res.statusCode, SUCCESS_MESSAGE);\n }\n\n handleInvalidResponse(res: InvalidResponse, list: Context[]) {\n if (res.body.missingField) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n\n const dropIndex = [\n ...Object.values(res.body.eventsWithInvalidFields),\n ...Object.values(res.body.eventsWithMissingFields),\n ...Object.values(res.body.eventsWithInvalidIdLengths),\n ...res.body.silencedEvents,\n ].flat();\n const dropIndexSet = new Set(dropIndex);\n\n const retry = list.filter((context, index) => {\n if (dropIndexSet.has(index)) {\n this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n return true;\n });\n\n this.addToQueue(...retry);\n }\n\n handlePayloadTooLargeResponse(res: PayloadTooLargeResponse, list: Context[]) {\n if (list.length === 1) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n this.config.flushQueueSize /= 2;\n this.addToQueue(...list);\n }\n\n handleRateLimitResponse(res: RateLimitResponse, list: Context[]) {\n const dropUserIds = Object.keys(res.body.exceededDailyQuotaUsers);\n const dropDeviceIds = Object.keys(res.body.exceededDailyQuotaDevices);\n const throttledIndex = res.body.throttledEvents;\n const dropUserIdsSet = new Set(dropUserIds);\n const dropDeviceIdsSet = new Set(dropDeviceIds);\n const throttledIndexSet = new Set(throttledIndex);\n\n const retry = list.filter((context, index) => {\n if (\n (context.event.user_id && dropUserIdsSet.has(context.event.user_id)) ||\n (context.event.device_id && dropDeviceIdsSet.has(context.event.device_id))\n ) {\n this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n if (throttledIndexSet.has(index)) {\n context.timeout = this.throttleTimeout;\n }\n return true;\n });\n\n this.addToQueue(...retry);\n }\n\n handleOtherReponse(list: Context[]) {\n this.addToQueue(\n ...list.map((context) => {\n context.timeout = context.attempts * this.retryTimeout;\n return context;\n }),\n );\n }\n\n fulfillRequest(list: Context[], code: number, message: string) {\n this.saveEvents();\n list.forEach((context) => context.callback(buildResult(context.event, code, message)));\n }\n\n /**\n * Saves events to storage\n * This is called on\n * 1) new events are added to queue; or\n * 2) response comes back for a request\n */\n saveEvents() {\n if (!this.config.saveEvents) {\n return;\n }\n const events = Array.from(this.queue.map((context) => context.event));\n void this.config.storageProvider.set(this.storageKey, events);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"destination.js","sourceRoot":"","sources":["../../../src/plugins/destination.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Config,\n DestinationContext as Context,\n DestinationPlugin,\n Event,\n InvalidResponse,\n PayloadTooLargeResponse,\n PluginType,\n RateLimitResponse,\n Response,\n Result,\n Status,\n SuccessResponse,\n} from '@amplitude/analytics-types';\nimport {\n INVALID_API_KEY,\n MAX_RETRIES_EXCEEDED_MESSAGE,\n MISSING_API_KEY_MESSAGE,\n SUCCESS_MESSAGE,\n UNEXPECTED_ERROR_MESSAGE,\n} from '../messages';\nimport { STORAGE_PREFIX } from '../constants';\nimport { chunk } from '../utils/chunk';\nimport { buildResult } from '../utils/result-builder';\nimport { createServerConfig } from '../config';\n\nexport class Destination implements DestinationPlugin {\n name = 'amplitude';\n type = PluginType.DESTINATION as const;\n\n retryTimeout = 1000;\n throttleTimeout = 30000;\n storageKey = '';\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: Config;\n scheduled = false;\n queue: Context[] = [];\n\n async setup(config: Config): Promise<undefined> {\n this.config = config;\n\n this.storageKey = `${STORAGE_PREFIX}_${this.config.apiKey.substring(0, 10)}`;\n const unsent = await this.config.storageProvider?.get(this.storageKey);\n this.saveEvents(); // sets storage to '[]'\n if (unsent && unsent.length > 0) {\n void Promise.all(unsent.map((event) => this.execute(event))).catch();\n }\n\n return Promise.resolve(undefined);\n }\n\n execute(event: Event): Promise<Result> {\n return new Promise((resolve) => {\n const context = {\n event,\n attempts: 0,\n callback: (result: Result) => resolve(result),\n timeout: 0,\n };\n void this.addToQueue(context);\n });\n }\n\n addToQueue(...list: Context[]) {\n const tryable = list.filter((context) => {\n if (context.attempts < this.config.flushMaxRetries) {\n context.attempts += 1;\n return true;\n }\n void this.fulfillRequest([context], 500, MAX_RETRIES_EXCEEDED_MESSAGE);\n return false;\n });\n\n tryable.forEach((context) => {\n this.queue = this.queue.concat(context);\n if (context.timeout === 0) {\n this.schedule(this.config.flushIntervalMillis);\n return;\n }\n\n setTimeout(() => {\n context.timeout = 0;\n this.schedule(0);\n }, context.timeout);\n });\n\n this.saveEvents();\n }\n\n schedule(timeout: number) {\n if (this.scheduled) return;\n this.scheduled = true;\n setTimeout(() => {\n void this.flush(true).then(() => {\n this.scheduled = false;\n if (this.queue.length > 0) {\n this.schedule(timeout);\n }\n });\n }, timeout);\n }\n\n async flush(useRetry = false) {\n const list: Context[] = [];\n const later: Context[] = [];\n this.queue.forEach((context) => (context.timeout === 0 ? list.push(context) : later.push(context)));\n this.queue = later;\n\n const batches = chunk(list, this.config.flushQueueSize);\n await Promise.all(batches.map((batch) => this.send(batch, useRetry)));\n }\n\n async send(list: Context[], useRetry = true) {\n if (!this.config.apiKey) {\n return this.fulfillRequest(list, 400, MISSING_API_KEY_MESSAGE);\n }\n\n const payload = {\n api_key: this.config.apiKey,\n events: list.map((context) => context.event),\n options: {\n min_id_length: this.config.minIdLength,\n },\n };\n\n try {\n const { serverUrl } = createServerConfig(this.config.serverUrl, this.config.serverZone, this.config.useBatch);\n const res = await this.config.transportProvider.send(serverUrl, payload);\n if (res === null) {\n this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);\n return;\n }\n if (!useRetry) {\n this.fulfillRequest(list, res.statusCode, res.status);\n return;\n }\n this.handleReponse(res, list);\n } catch (e) {\n this.fulfillRequest(list, 0, String(e));\n }\n }\n\n handleReponse(res: Response, list: Context[]) {\n const { status } = res;\n switch (status) {\n case Status.Success:\n this.handleSuccessResponse(res, list);\n break;\n\n case Status.Invalid:\n this.handleInvalidResponse(res, list);\n break;\n\n case Status.PayloadTooLarge:\n this.handlePayloadTooLargeResponse(res, list);\n break;\n\n case Status.RateLimit:\n this.handleRateLimitResponse(res, list);\n break;\n\n default:\n this.handleOtherReponse(list);\n }\n }\n\n handleSuccessResponse(res: SuccessResponse, list: Context[]) {\n this.fulfillRequest(list, res.statusCode, SUCCESS_MESSAGE);\n }\n\n handleInvalidResponse(res: InvalidResponse, list: Context[]) {\n if (res.body.missingField || res.body.error.startsWith(INVALID_API_KEY)) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n\n const dropIndex = [\n ...Object.values(res.body.eventsWithInvalidFields),\n ...Object.values(res.body.eventsWithMissingFields),\n ...Object.values(res.body.eventsWithInvalidIdLengths),\n ...res.body.silencedEvents,\n ].flat();\n const dropIndexSet = new Set(dropIndex);\n\n const retry = list.filter((context, index) => {\n if (dropIndexSet.has(index)) {\n this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n return true;\n });\n\n this.addToQueue(...retry);\n }\n\n handlePayloadTooLargeResponse(res: PayloadTooLargeResponse, list: Context[]) {\n if (list.length === 1) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n this.config.flushQueueSize /= 2;\n this.addToQueue(...list);\n }\n\n handleRateLimitResponse(res: RateLimitResponse, list: Context[]) {\n const dropUserIds = Object.keys(res.body.exceededDailyQuotaUsers);\n const dropDeviceIds = Object.keys(res.body.exceededDailyQuotaDevices);\n const throttledIndex = res.body.throttledEvents;\n const dropUserIdsSet = new Set(dropUserIds);\n const dropDeviceIdsSet = new Set(dropDeviceIds);\n const throttledIndexSet = new Set(throttledIndex);\n\n const retry = list.filter((context, index) => {\n if (\n (context.event.user_id && dropUserIdsSet.has(context.event.user_id)) ||\n (context.event.device_id && dropDeviceIdsSet.has(context.event.device_id))\n ) {\n this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n if (throttledIndexSet.has(index)) {\n context.timeout = this.throttleTimeout;\n }\n return true;\n });\n\n this.addToQueue(...retry);\n }\n\n handleOtherReponse(list: Context[]) {\n this.addToQueue(\n ...list.map((context) => {\n context.timeout = context.attempts * this.retryTimeout;\n return context;\n }),\n );\n }\n\n fulfillRequest(list: Context[], code: number, message: string) {\n this.saveEvents();\n list.forEach((context) => context.callback(buildResult(context.event, code, message)));\n }\n\n /**\n * Saves events to storage\n * This is called on\n * 1) new events are added to queue; or\n * 2) response comes back for a request\n */\n saveEvents() {\n if (!this.config.storageProvider) {\n return;\n }\n const events = Array.from(this.queue.map((context) => context.event));\n void this.config.storageProvider.set(this.storageKey, events);\n }\n}\n"]}
|
package/lib/esm/timeline.d.ts
CHANGED
|
@@ -2,11 +2,12 @@ import { Config, Event, EventCallback, Plugin, Result } from '@amplitude/analyti
|
|
|
2
2
|
export declare class Timeline {
|
|
3
3
|
queue: [Event, EventCallback][];
|
|
4
4
|
applying: boolean;
|
|
5
|
-
|
|
5
|
+
isReady: boolean;
|
|
6
6
|
plugins: Plugin[];
|
|
7
7
|
register(plugin: Plugin, config: Config): Promise<void>;
|
|
8
8
|
deregister(pluginName: string): Promise<void>;
|
|
9
|
-
|
|
9
|
+
reset(): void;
|
|
10
|
+
push(event: Event): Promise<Result>;
|
|
10
11
|
scheduleApply(timeout: number): void;
|
|
11
12
|
apply(item: [Event, EventCallback] | undefined): Promise<void>;
|
|
12
13
|
flush(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EAGN,KAAK,EACL,aAAa,EACb,MAAM,EAEN,MAAM,EACP,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EAGN,KAAK,EACL,aAAa,EACb,MAAM,EAEN,MAAM,EACP,MAAM,4BAA4B,CAAC;AAGpC,qBAAa,QAAQ;IACnB,KAAK,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAM;IAErC,QAAQ,UAAS;IAGjB,OAAO,UAAS;IAChB,OAAO,EAAE,MAAM,EAAE,CAAM;IAEjB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAK7C,UAAU,CAAC,UAAU,EAAE,MAAM;IAQ7B,KAAK;IAML,IAAI,CAAC,KAAK,EAAE,KAAK;IAOjB,aAAa,CAAC,OAAO,EAAE,MAAM;IAavB,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,SAAS;IAwC9C,KAAK;CAgBZ"}
|
package/lib/esm/timeline.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { __assign, __awaiter, __generator, __read, __values } from "tslib";
|
|
2
2
|
import { PluginType, } from '@amplitude/analytics-types';
|
|
3
|
-
import { OPT_OUT_MESSAGE } from './messages';
|
|
4
3
|
import { buildResult } from './utils/result-builder';
|
|
5
4
|
var Timeline = /** @class */ (function () {
|
|
6
5
|
function Timeline() {
|
|
7
6
|
this.queue = [];
|
|
7
|
+
// Flag to guarantee one schedule apply is running
|
|
8
8
|
this.applying = false;
|
|
9
|
-
|
|
9
|
+
// Flag indicates whether timeline is ready to process event
|
|
10
|
+
// Events collected before timeline is ready will stay in the queue to be processed later
|
|
11
|
+
this.isReady = false;
|
|
10
12
|
this.plugins = [];
|
|
11
13
|
}
|
|
12
14
|
Timeline.prototype.register = function (plugin, config) {
|
|
@@ -26,20 +28,21 @@ var Timeline = /** @class */ (function () {
|
|
|
26
28
|
this.plugins.splice(this.plugins.findIndex(function (plugin) { return plugin.name === pluginName; }), 1);
|
|
27
29
|
return Promise.resolve();
|
|
28
30
|
};
|
|
29
|
-
Timeline.prototype.
|
|
31
|
+
Timeline.prototype.reset = function () {
|
|
32
|
+
this.applying = false;
|
|
33
|
+
this.isReady = false;
|
|
34
|
+
this.plugins = [];
|
|
35
|
+
};
|
|
36
|
+
Timeline.prototype.push = function (event) {
|
|
30
37
|
var _this = this;
|
|
31
38
|
return new Promise(function (resolve) {
|
|
32
|
-
if (config.optOut) {
|
|
33
|
-
resolve(buildResult(event, 0, OPT_OUT_MESSAGE));
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
39
|
_this.queue.push([event, resolve]);
|
|
37
40
|
_this.scheduleApply(0);
|
|
38
41
|
});
|
|
39
42
|
};
|
|
40
43
|
Timeline.prototype.scheduleApply = function (timeout) {
|
|
41
44
|
var _this = this;
|
|
42
|
-
if (this.applying)
|
|
45
|
+
if (this.applying && this.isReady)
|
|
43
46
|
return;
|
|
44
47
|
this.applying = true;
|
|
45
48
|
setTimeout(function () {
|
package/lib/esm/timeline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/timeline.ts"],"names":[],"mappings":";AAAA,OAAO,EAQL,UAAU,GAEX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/timeline.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BeforePlugin,\n Config,\n DestinationPlugin,\n EnrichmentPlugin,\n Event,\n EventCallback,\n Plugin,\n PluginType,\n Result,\n} from '@amplitude/analytics-types';\nimport { buildResult } from './utils/result-builder';\n\nexport class Timeline {\n queue: [Event, EventCallback][] = [];\n // Flag to guarantee one schedule apply is running\n applying = false;\n // Flag indicates whether timeline is ready to process event\n // Events collected before timeline is ready will stay in the queue to be processed later\n isReady = false;\n plugins: Plugin[] = [];\n\n async register(plugin: Plugin, config: Config) {\n await plugin.setup(config);\n this.plugins.push(plugin);\n }\n\n deregister(pluginName: string) {\n this.plugins.splice(\n this.plugins.findIndex((plugin) => plugin.name === pluginName),\n 1,\n );\n return Promise.resolve();\n }\n\n reset() {\n this.applying = false;\n this.isReady = false;\n this.plugins = [];\n }\n\n push(event: Event) {\n return new Promise<Result>((resolve) => {\n this.queue.push([event, resolve]);\n this.scheduleApply(0);\n });\n }\n\n scheduleApply(timeout: number) {\n if (this.applying && this.isReady) return;\n this.applying = true;\n setTimeout(() => {\n void this.apply(this.queue.shift()).then(() => {\n this.applying = false;\n if (this.queue.length > 0) {\n this.scheduleApply(0);\n }\n });\n }, timeout);\n }\n\n async apply(item: [Event, EventCallback] | undefined) {\n if (!item) {\n return;\n }\n\n let [event] = item;\n const [, resolve] = item;\n\n const before = this.plugins.filter<BeforePlugin>(\n (plugin: Plugin): plugin is BeforePlugin => plugin.type === PluginType.BEFORE,\n );\n\n for (const plugin of before) {\n event = await plugin.execute({ ...event });\n }\n\n const enrichment = this.plugins.filter<EnrichmentPlugin>(\n (plugin: Plugin): plugin is EnrichmentPlugin => plugin.type === PluginType.ENRICHMENT,\n );\n\n for (const plugin of enrichment) {\n event = await plugin.execute({ ...event });\n }\n\n const destination = this.plugins.filter<DestinationPlugin>(\n (plugin: Plugin): plugin is DestinationPlugin => plugin.type === PluginType.DESTINATION,\n );\n\n const executeDestinations = destination.map((plugin) => {\n const eventClone = { ...event };\n return plugin.execute(eventClone).catch((e) => buildResult(eventClone, 0, String(e)));\n });\n\n void Promise.all(executeDestinations).then(([result]) => {\n resolve(result);\n });\n\n return;\n }\n\n async flush() {\n const queue = this.queue;\n this.queue = [];\n\n await Promise.all(queue.map((item) => this.apply(item)));\n\n const destination = this.plugins.filter<DestinationPlugin>(\n (plugin: Plugin): plugin is DestinationPlugin => plugin.type === PluginType.DESTINATION,\n );\n\n const executeDestinations = destination.map((plugin) => {\n return plugin.flush && plugin.flush();\n });\n\n await Promise.all(executeDestinations);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valid-properties.d.ts","sourceRoot":"","sources":["../../../src/utils/valid-properties.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;MAAyC,OAUlE,CAAC;AAEF,eAAO,MAAM,iBAAiB,aAAc,MAAM,SAAS,GAAG,KAAG,
|
|
1
|
+
{"version":3,"file":"valid-properties.d.ts","sourceRoot":"","sources":["../../../src/utils/valid-properties.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;MAAyC,OAUlE,CAAC;AAEF,eAAO,MAAM,iBAAiB,aAAc,MAAM,SAAS,GAAG,KAAG,OAyBhE,CAAC"}
|
|
@@ -43,6 +43,9 @@ export var isValidProperties = function (property, value) {
|
|
|
43
43
|
finally { if (e_1) throw e_1.error; }
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
+
else if (value === null || value === undefined) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
46
49
|
else if (typeof value === 'object') {
|
|
47
50
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
48
51
|
return isValidObject(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valid-properties.js","sourceRoot":"","sources":["../../../src/utils/valid-properties.ts"],"names":[],"mappings":";AAAA,IAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,MAAM,CAAC,IAAM,aAAa,GAAG,UAAC,UAAkC;IAC9D,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,iBAAiB,EAAE;QACtD,OAAO,KAAK,CAAC;KACd;IACD,KAAK,IAAM,GAAG,IAAI,UAAU,EAAE;QAC5B,mEAAmE;QACnE,IAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;KAClD;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,iBAAiB,GAAG,UAAC,QAAgB,EAAE,KAAU;;IAC5D,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,IAAI,OAAO,GAAG,IAAI,CAAC;;YACnB,KAA2B,IAAA,UAAA,SAAA,KAAK,CAAA,4BAAA,+CAAE;gBAA7B,IAAM,YAAY,kBAAA;gBACrB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAC/B,OAAO,KAAK,CAAC;iBACd;qBAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;oBAC3C,OAAO,GAAG,OAAO,IAAI,aAAa,CAAC,YAAsB,CAAC,CAAC;iBAC5D;qBAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,YAAY,CAAC,EAAE;oBAC9D,OAAO,KAAK,CAAC;iBACd;gBACD,IAAI,CAAC,OAAO,EAAE;oBACZ,OAAO,KAAK,CAAC;iBACd;aACF;;;;;;;;;KACF;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACpC,iEAAiE;QACjE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;KAC7B;SAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE;QAClE,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC","sourcesContent":["const MAX_PROPERTY_KEYS = 1000;\n\nexport const isValidObject = (properties: { [key: string]: any }): boolean => {\n if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n return false;\n }\n for (const key in properties) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const value = properties[key];\n if (!isValidProperties(key, value)) return false;\n }\n return true;\n};\n\nexport const isValidProperties = (property: string, value: any): boolean => {\n if (typeof property !== 'string') return false;\n if (Array.isArray(value)) {\n let isValid = true;\n for (const valueElement of value) {\n if (Array.isArray(valueElement)) {\n return false;\n } else if (typeof valueElement === 'object') {\n isValid = isValid && isValidObject(valueElement as object);\n } else if (!['number', 'string'].includes(typeof valueElement)) {\n return false;\n }\n if (!isValid) {\n return false;\n }\n }\n } else if (typeof value === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return isValidObject(value);\n } else if (!['number', 'string', 'boolean'].includes(typeof value)) {\n return false;\n }\n return true;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"valid-properties.js","sourceRoot":"","sources":["../../../src/utils/valid-properties.ts"],"names":[],"mappings":";AAAA,IAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,MAAM,CAAC,IAAM,aAAa,GAAG,UAAC,UAAkC;IAC9D,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,iBAAiB,EAAE;QACtD,OAAO,KAAK,CAAC;KACd;IACD,KAAK,IAAM,GAAG,IAAI,UAAU,EAAE;QAC5B,mEAAmE;QACnE,IAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;KAClD;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,iBAAiB,GAAG,UAAC,QAAgB,EAAE,KAAU;;IAC5D,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,IAAI,OAAO,GAAG,IAAI,CAAC;;YACnB,KAA2B,IAAA,UAAA,SAAA,KAAK,CAAA,4BAAA,+CAAE;gBAA7B,IAAM,YAAY,kBAAA;gBACrB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAC/B,OAAO,KAAK,CAAC;iBACd;qBAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;oBAC3C,OAAO,GAAG,OAAO,IAAI,aAAa,CAAC,YAAsB,CAAC,CAAC;iBAC5D;qBAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,YAAY,CAAC,EAAE;oBAC9D,OAAO,KAAK,CAAC;iBACd;gBACD,IAAI,CAAC,OAAO,EAAE;oBACZ,OAAO,KAAK,CAAC;iBACd;aACF;;;;;;;;;KACF;SAAM,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QAChD,OAAO,KAAK,CAAC;KACd;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACpC,iEAAiE;QACjE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;KAC7B;SAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE;QAClE,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC","sourcesContent":["const MAX_PROPERTY_KEYS = 1000;\n\nexport const isValidObject = (properties: { [key: string]: any }): boolean => {\n if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n return false;\n }\n for (const key in properties) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const value = properties[key];\n if (!isValidProperties(key, value)) return false;\n }\n return true;\n};\n\nexport const isValidProperties = (property: string, value: any): boolean => {\n if (typeof property !== 'string') return false;\n if (Array.isArray(value)) {\n let isValid = true;\n for (const valueElement of value) {\n if (Array.isArray(valueElement)) {\n return false;\n } else if (typeof valueElement === 'object') {\n isValid = isValid && isValidObject(valueElement as object);\n } else if (!['number', 'string'].includes(typeof valueElement)) {\n return false;\n }\n if (!isValid) {\n return false;\n }\n }\n } else if (value === null || value === undefined) {\n return false;\n } else if (typeof value === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return isValidObject(value);\n } else if (!['number', 'string', 'boolean'].includes(typeof value)) {\n return false;\n }\n return true;\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amplitude/analytics-core",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.4",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "Amplitude Inc",
|
|
6
6
|
"homepage": "https://github.com/amplitude/Amplitude-TypeScript",
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
"build": "yarn build:es5 & yarn build:esm",
|
|
20
20
|
"build:es5": "tsc -p ./tsconfig.es5.json",
|
|
21
21
|
"build:esm": "tsc -p ./tsconfig.esm.json",
|
|
22
|
+
"clean": "rimraf node_modules lib coverage",
|
|
22
23
|
"fix": "yarn fix:eslint & yarn fix:prettier",
|
|
23
24
|
"fix:eslint": "eslint '{src,test}/**/*.ts' --fix",
|
|
24
25
|
"fix:prettier": "prettier --write \"{src,test}/**/*.ts\"",
|
|
@@ -32,11 +33,11 @@
|
|
|
32
33
|
"url": "https://github.com/amplitude/Amplitude-TypeScript/issues"
|
|
33
34
|
},
|
|
34
35
|
"dependencies": {
|
|
35
|
-
"@amplitude/analytics-types": "^0.
|
|
36
|
+
"@amplitude/analytics-types": "^0.6.1",
|
|
36
37
|
"tslib": "^2.3.1"
|
|
37
38
|
},
|
|
38
39
|
"files": [
|
|
39
40
|
"lib"
|
|
40
41
|
],
|
|
41
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "321002ef9a539959373204c3d7b15322b0936752"
|
|
42
43
|
}
|