@amplitude/analytics-core 2.2.0-featadddiagnostics.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/cjs/config.d.ts +3 -4
- package/lib/cjs/config.d.ts.map +1 -1
- package/lib/cjs/config.js +3 -7
- package/lib/cjs/config.js.map +1 -1
- package/lib/cjs/index.d.ts +0 -3
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +4 -12
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/plugins/destination.d.ts +0 -1
- package/lib/cjs/plugins/destination.d.ts.map +1 -1
- package/lib/cjs/plugins/destination.js +7 -44
- package/lib/cjs/plugins/destination.js.map +1 -1
- package/lib/esm/config.d.ts +3 -4
- package/lib/esm/config.d.ts.map +1 -1
- package/lib/esm/config.js +3 -7
- package/lib/esm/config.js.map +1 -1
- package/lib/esm/index.d.ts +0 -3
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +0 -3
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/plugins/destination.d.ts +0 -1
- package/lib/esm/plugins/destination.d.ts.map +1 -1
- package/lib/esm/plugins/destination.js +7 -44
- package/lib/esm/plugins/destination.js.map +1 -1
- package/package.json +3 -3
- package/lib/cjs/diagnostics/constants.d.ts +0 -12
- package/lib/cjs/diagnostics/constants.d.ts.map +0 -1
- package/lib/cjs/diagnostics/constants.js +0 -14
- package/lib/cjs/diagnostics/constants.js.map +0 -1
- package/lib/cjs/diagnostics/diagnostic.d.ts +0 -16
- package/lib/cjs/diagnostics/diagnostic.d.ts.map +0 -1
- package/lib/cjs/diagnostics/diagnostic.js +0 -72
- package/lib/cjs/diagnostics/diagnostic.js.map +0 -1
- package/lib/cjs/diagnostics/typings.d.ts +0 -14
- package/lib/cjs/diagnostics/typings.d.ts.map +0 -1
- package/lib/cjs/diagnostics/typings.js +0 -2
- package/lib/cjs/diagnostics/typings.js.map +0 -1
- package/lib/esm/diagnostics/constants.d.ts +0 -12
- package/lib/esm/diagnostics/constants.d.ts.map +0 -1
- package/lib/esm/diagnostics/constants.js +0 -12
- package/lib/esm/diagnostics/constants.js.map +0 -1
- package/lib/esm/diagnostics/diagnostic.d.ts +0 -16
- package/lib/esm/diagnostics/diagnostic.d.ts.map +0 -1
- package/lib/esm/diagnostics/diagnostic.js +0 -70
- package/lib/esm/diagnostics/diagnostic.js.map +0 -1
- package/lib/esm/diagnostics/typings.d.ts +0 -14
- package/lib/esm/diagnostics/typings.d.ts.map +0 -1
- package/lib/esm/diagnostics/typings.js +0 -2
- package/lib/esm/diagnostics/typings.js.map +0 -1
package/lib/esm/index.js
CHANGED
|
@@ -2,8 +2,6 @@ export { AmplitudeCore } from './core-client';
|
|
|
2
2
|
export { Identify } from './identify';
|
|
3
3
|
export { Revenue } from './revenue';
|
|
4
4
|
export { Destination } from './plugins/destination';
|
|
5
|
-
export { BaseDiagnostic } from './diagnostics/diagnostic';
|
|
6
|
-
export { DIAGNOSTIC_MESSAGES, DIAGNOSTIC_METADATA_TYPE, DIAGNOSTIC_ENDPOINT } from './diagnostics/constants';
|
|
7
5
|
export { Config } from './config';
|
|
8
6
|
export { Logger } from './logger';
|
|
9
7
|
export { AMPLITUDE_PREFIX, STORAGE_PREFIX } from './constants';
|
|
@@ -13,5 +11,4 @@ export { UUID } from './utils/uuid';
|
|
|
13
11
|
export { MemoryStorage } from './storage/memory';
|
|
14
12
|
export { BaseTransport } from './transports/base';
|
|
15
13
|
export { createIdentifyEvent } from './utils/event-builder';
|
|
16
|
-
export { buildResult } from './utils/result-builder';
|
|
17
14
|
//# sourceMappingURL=index.js.map
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["export { AmplitudeCore } from './core-client';\nexport { Identify } from './identify';\nexport { Revenue } from './revenue';\nexport { Destination } from './plugins/destination';\nexport { Config } from './config';\nexport { Logger } from './logger';\nexport { AMPLITUDE_PREFIX, STORAGE_PREFIX } from './constants';\nexport { returnWrapper } from './utils/return-wrapper';\nexport { debugWrapper, getClientLogConfig, getClientStates } from './utils/debug';\nexport { UUID } from './utils/uuid';\nexport { MemoryStorage } from './storage/memory';\nexport { BaseTransport } from './transports/base';\nexport { createIdentifyEvent } from './utils/event-builder';\n"]}
|
|
@@ -15,7 +15,6 @@ export declare class Destination implements DestinationPlugin {
|
|
|
15
15
|
schedule(timeout: number): void;
|
|
16
16
|
flush(useRetry?: boolean): Promise<void>;
|
|
17
17
|
send(list: Context[], useRetry?: boolean): Promise<void>;
|
|
18
|
-
processResponseDiagnostics(res: Response, list: Context[]): void;
|
|
19
18
|
handleResponse(res: Response, list: Context[]): void;
|
|
20
19
|
handleSuccessResponse(res: SuccessResponse, list: Context[]): void;
|
|
21
20
|
handleInvalidResponse(res: InvalidResponse, list: Context[]): void;
|
|
@@ -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,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,iBAAiB,EACjB,QAAQ,EACR,MAAM,EAEN,eAAe,EAChB,MAAM,4BAA4B,CAAC;AAkBpC,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,UAUlD;AAED,qBAAa,WAAY,YAAW,iBAAiB;IACnD,IAAI,SAAe;IACnB,IAAI,gBAA0B;IAE9B,YAAY,SAAQ;IACpB,eAAe,SAAS;IACxB,UAAU,SAAM;IAIhB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,SAAS,CAA8C;IAC/D,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;IAclB,KAAK,CAAC,QAAQ,UAAQ;IAqBtB,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,QAAQ,UAAO;IAyC3C,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;IA8B7C,qBAAqB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE;IAI3D,qBAAqB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE;IA6B3D,6BAA6B,CAAC,GAAG,EAAE,uBAAuB,EAAE,IAAI,EAAE,OAAO,EAAE;IAa3E,uBAAuB,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE;IA8B/D,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE;IASnC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAK7D;;;;;OAKG;IACH,UAAU;CAOX"}
|
|
@@ -5,7 +5,6 @@ import { STORAGE_PREFIX } from '../constants';
|
|
|
5
5
|
import { chunk } from '../utils/chunk';
|
|
6
6
|
import { buildResult } from '../utils/result-builder';
|
|
7
7
|
import { createServerConfig } from '../config';
|
|
8
|
-
import { DIAGNOSTIC_MESSAGES } from '../diagnostics/constants';
|
|
9
8
|
function getErrorMessage(error) {
|
|
10
9
|
if (error instanceof Error)
|
|
11
10
|
return error.message;
|
|
@@ -79,7 +78,6 @@ var Destination = /** @class */ (function () {
|
|
|
79
78
|
return true;
|
|
80
79
|
}
|
|
81
80
|
void _this.fulfillRequest([context], 500, MAX_RETRIES_EXCEEDED_MESSAGE);
|
|
82
|
-
_this.config.diagnosticProvider.track(list.length, 500, DIAGNOSTIC_MESSAGES.EXCEEDED_MAX_RETRY);
|
|
83
81
|
return false;
|
|
84
82
|
});
|
|
85
83
|
tryable.forEach(function (context) {
|
|
@@ -97,8 +95,9 @@ var Destination = /** @class */ (function () {
|
|
|
97
95
|
};
|
|
98
96
|
Destination.prototype.schedule = function (timeout) {
|
|
99
97
|
var _this = this;
|
|
100
|
-
if (this.scheduled)
|
|
98
|
+
if (this.scheduled || this.config.offline) {
|
|
101
99
|
return;
|
|
100
|
+
}
|
|
102
101
|
this.scheduled = setTimeout(function () {
|
|
103
102
|
void _this.flush(true).then(function () {
|
|
104
103
|
if (_this.queue.length > 0) {
|
|
@@ -115,6 +114,11 @@ var Destination = /** @class */ (function () {
|
|
|
115
114
|
return __generator(this, function (_a) {
|
|
116
115
|
switch (_a.label) {
|
|
117
116
|
case 0:
|
|
117
|
+
// Skip flush if offline
|
|
118
|
+
if (this.config.offline) {
|
|
119
|
+
this.config.loggerProvider.debug('Skipping flush while offline.');
|
|
120
|
+
return [2 /*return*/];
|
|
121
|
+
}
|
|
118
122
|
list = [];
|
|
119
123
|
later = [];
|
|
120
124
|
this.queue.forEach(function (context) { return (context.timeout === 0 ? list.push(context) : later.push(context)); });
|
|
@@ -162,7 +166,6 @@ var Destination = /** @class */ (function () {
|
|
|
162
166
|
case 2:
|
|
163
167
|
res = _a.sent();
|
|
164
168
|
if (res === null) {
|
|
165
|
-
this.config.diagnosticProvider.track(list.length, 0, DIAGNOSTIC_MESSAGES.UNEXPECTED_ERROR);
|
|
166
169
|
this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);
|
|
167
170
|
return [2 /*return*/];
|
|
168
171
|
}
|
|
@@ -173,7 +176,6 @@ var Destination = /** @class */ (function () {
|
|
|
173
176
|
else {
|
|
174
177
|
this.fulfillRequest(list, res.statusCode, res.status);
|
|
175
178
|
}
|
|
176
|
-
this.processResponseDiagnostics(res, list);
|
|
177
179
|
return [2 /*return*/];
|
|
178
180
|
}
|
|
179
181
|
this.handleResponse(res, list);
|
|
@@ -183,39 +185,12 @@ var Destination = /** @class */ (function () {
|
|
|
183
185
|
errorMessage = getErrorMessage(e_1);
|
|
184
186
|
this.config.loggerProvider.error(errorMessage);
|
|
185
187
|
this.fulfillRequest(list, 0, errorMessage);
|
|
186
|
-
this.config.diagnosticProvider.track(list.length, 0, DIAGNOSTIC_MESSAGES.UNEXPECTED_ERROR);
|
|
187
188
|
return [3 /*break*/, 4];
|
|
188
189
|
case 4: return [2 /*return*/];
|
|
189
190
|
}
|
|
190
191
|
});
|
|
191
192
|
});
|
|
192
193
|
};
|
|
193
|
-
Destination.prototype.processResponseDiagnostics = function (res, list) {
|
|
194
|
-
var status = res.status;
|
|
195
|
-
switch (status) {
|
|
196
|
-
case Status.Invalid: {
|
|
197
|
-
if (res.body.missingField && !res.body.error.startsWith(INVALID_API_KEY)) {
|
|
198
|
-
this.config.diagnosticProvider.track(list.length, 400, DIAGNOSTIC_MESSAGES.INVALID_OR_MISSING_FIELDS);
|
|
199
|
-
}
|
|
200
|
-
else {
|
|
201
|
-
this.config.diagnosticProvider.track(list.length, 400, DIAGNOSTIC_MESSAGES.EVENT_ERROR);
|
|
202
|
-
}
|
|
203
|
-
break;
|
|
204
|
-
}
|
|
205
|
-
case Status.PayloadTooLarge: {
|
|
206
|
-
this.config.diagnosticProvider.track(list.length, 413, DIAGNOSTIC_MESSAGES.PAYLOAD_TOO_LARGE);
|
|
207
|
-
break;
|
|
208
|
-
}
|
|
209
|
-
case Status.RateLimit: {
|
|
210
|
-
this.config.diagnosticProvider.track(list.length, 429, DIAGNOSTIC_MESSAGES.EXCEEDED_DAILY_QUOTA);
|
|
211
|
-
break;
|
|
212
|
-
}
|
|
213
|
-
default: {
|
|
214
|
-
this.config.diagnosticProvider.track(list.length, 0, DIAGNOSTIC_MESSAGES.UNEXPECTED_ERROR);
|
|
215
|
-
break;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
};
|
|
219
194
|
Destination.prototype.handleResponse = function (res, list) {
|
|
220
195
|
var status = res.status;
|
|
221
196
|
switch (status) {
|
|
@@ -248,18 +223,12 @@ var Destination = /** @class */ (function () {
|
|
|
248
223
|
};
|
|
249
224
|
Destination.prototype.handleInvalidResponse = function (res, list) {
|
|
250
225
|
var _this = this;
|
|
251
|
-
if (res.body.missingField && !res.body.error.startsWith(INVALID_API_KEY)) {
|
|
252
|
-
this.config.diagnosticProvider.track(list.length, 400, DIAGNOSTIC_MESSAGES.INVALID_OR_MISSING_FIELDS);
|
|
253
|
-
}
|
|
254
226
|
if (res.body.missingField || res.body.error.startsWith(INVALID_API_KEY)) {
|
|
255
227
|
this.fulfillRequest(list, res.statusCode, res.body.error);
|
|
256
228
|
return;
|
|
257
229
|
}
|
|
258
230
|
var dropIndex = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(Object.values(res.body.eventsWithInvalidFields)), false), __read(Object.values(res.body.eventsWithMissingFields)), false), __read(Object.values(res.body.eventsWithInvalidIdLengths)), false), __read(res.body.silencedEvents), false).flat();
|
|
259
231
|
var dropIndexSet = new Set(dropIndex);
|
|
260
|
-
if (dropIndexSet.size) {
|
|
261
|
-
this.config.diagnosticProvider.track(dropIndexSet.size, 400, DIAGNOSTIC_MESSAGES.EVENT_ERROR);
|
|
262
|
-
}
|
|
263
232
|
var retry = list.filter(function (context, index) {
|
|
264
233
|
if (dropIndexSet.has(index)) {
|
|
265
234
|
_this.fulfillRequest([context], res.statusCode, res.body.error);
|
|
@@ -275,7 +244,6 @@ var Destination = /** @class */ (function () {
|
|
|
275
244
|
};
|
|
276
245
|
Destination.prototype.handlePayloadTooLargeResponse = function (res, list) {
|
|
277
246
|
if (list.length === 1) {
|
|
278
|
-
this.config.diagnosticProvider.track(list.length, 413, DIAGNOSTIC_MESSAGES.PAYLOAD_TOO_LARGE);
|
|
279
247
|
this.fulfillRequest(list, res.statusCode, res.body.error);
|
|
280
248
|
return;
|
|
281
249
|
}
|
|
@@ -292,12 +260,10 @@ var Destination = /** @class */ (function () {
|
|
|
292
260
|
var dropUserIdsSet = new Set(dropUserIds);
|
|
293
261
|
var dropDeviceIdsSet = new Set(dropDeviceIds);
|
|
294
262
|
var throttledIndexSet = new Set(throttledIndex);
|
|
295
|
-
var dropList = [];
|
|
296
263
|
var retry = list.filter(function (context, index) {
|
|
297
264
|
if ((context.event.user_id && dropUserIdsSet.has(context.event.user_id)) ||
|
|
298
265
|
(context.event.device_id && dropDeviceIdsSet.has(context.event.device_id))) {
|
|
299
266
|
_this.fulfillRequest([context], res.statusCode, res.body.error);
|
|
300
|
-
dropList.push(context);
|
|
301
267
|
return;
|
|
302
268
|
}
|
|
303
269
|
if (throttledIndexSet.has(index)) {
|
|
@@ -305,9 +271,6 @@ var Destination = /** @class */ (function () {
|
|
|
305
271
|
}
|
|
306
272
|
return true;
|
|
307
273
|
});
|
|
308
|
-
if (dropList.length > 0) {
|
|
309
|
-
this.config.diagnosticProvider.track(dropList.length, 429, DIAGNOSTIC_MESSAGES.EXCEEDED_DAILY_QUOTA);
|
|
310
|
-
}
|
|
311
274
|
if (retry.length > 0) {
|
|
312
275
|
// log intermediate event status before retry
|
|
313
276
|
this.config.loggerProvider.warn(getResponseBodyString(res));
|
|
@@ -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 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';\nimport { DIAGNOSTIC_MESSAGES } from '../diagnostics/constants';\n\nfunction getErrorMessage(error: unknown) {\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nexport function getResponseBodyString(res: Response) {\n let responseBodyString = '';\n try {\n if ('body' in res) {\n responseBodyString = JSON.stringify(res.body, null, 2);\n }\n } catch {\n // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n }\n return responseBodyString;\n}\n\nexport class Destination implements DestinationPlugin {\n name = 'amplitude';\n type = '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 private scheduled: ReturnType<typeof setTimeout> | null = null;\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 this.config.diagnosticProvider.track(list.length, 500, DIAGNOSTIC_MESSAGES.EXCEEDED_MAX_RETRY);\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 = setTimeout(() => {\n void this.flush(true).then(() => {\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 if (this.scheduled) {\n clearTimeout(this.scheduled);\n this.scheduled = null;\n }\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) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { extra, ...eventWithoutExtra } = context.event;\n return eventWithoutExtra;\n }),\n options: {\n min_id_length: this.config.minIdLength,\n },\n client_upload_time: new Date().toISOString(),\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.config.diagnosticProvider.track(list.length, 0, DIAGNOSTIC_MESSAGES.UNEXPECTED_ERROR);\n this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);\n return;\n }\n if (!useRetry) {\n if ('body' in res) {\n this.fulfillRequest(list, res.statusCode, `${res.status}: ${getResponseBodyString(res)}`);\n } else {\n this.fulfillRequest(list, res.statusCode, res.status);\n }\n this.processResponseDiagnostics(res, list);\n return;\n }\n this.handleResponse(res, list);\n } catch (e) {\n const errorMessage = getErrorMessage(e);\n this.config.loggerProvider.error(errorMessage);\n this.fulfillRequest(list, 0, errorMessage);\n this.config.diagnosticProvider.track(list.length, 0, DIAGNOSTIC_MESSAGES.UNEXPECTED_ERROR);\n }\n }\n\n processResponseDiagnostics(res: Response, list: Context[]) {\n const { status } = res;\n\n switch (status) {\n case Status.Invalid: {\n if (res.body.missingField && !res.body.error.startsWith(INVALID_API_KEY)) {\n this.config.diagnosticProvider.track(list.length, 400, DIAGNOSTIC_MESSAGES.INVALID_OR_MISSING_FIELDS);\n } else {\n this.config.diagnosticProvider.track(list.length, 400, DIAGNOSTIC_MESSAGES.EVENT_ERROR);\n }\n break;\n }\n case Status.PayloadTooLarge: {\n this.config.diagnosticProvider.track(list.length, 413, DIAGNOSTIC_MESSAGES.PAYLOAD_TOO_LARGE);\n break;\n }\n case Status.RateLimit: {\n this.config.diagnosticProvider.track(list.length, 429, DIAGNOSTIC_MESSAGES.EXCEEDED_DAILY_QUOTA);\n break;\n }\n default: {\n this.config.diagnosticProvider.track(list.length, 0, DIAGNOSTIC_MESSAGES.UNEXPECTED_ERROR);\n break;\n }\n }\n }\n\n handleResponse(res: Response, list: Context[]) {\n const { status } = res;\n\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 // log intermediate event status before retry\n this.config.loggerProvider.warn(`{code: 0, error: \"Status '${status}' provided for ${list.length} events\"}`);\n\n this.handleOtherResponse(list);\n break;\n }\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.config.diagnosticProvider.track(list.length, 400, DIAGNOSTIC_MESSAGES.INVALID_OR_MISSING_FIELDS);\n }\n\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 if (dropIndexSet.size) {\n this.config.diagnosticProvider.track(dropIndexSet.size, 400, DIAGNOSTIC_MESSAGES.EVENT_ERROR);\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 if (retry.length > 0) {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n }\n this.addToQueue(...retry);\n }\n\n handlePayloadTooLargeResponse(res: PayloadTooLargeResponse, list: Context[]) {\n if (list.length === 1) {\n this.config.diagnosticProvider.track(list.length, 413, DIAGNOSTIC_MESSAGES.PAYLOAD_TOO_LARGE);\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\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 const dropList = [];\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 dropList.push(context);\n return;\n }\n if (throttledIndexSet.has(index)) {\n context.timeout = this.throttleTimeout;\n }\n return true;\n });\n\n if (dropList.length > 0) {\n this.config.diagnosticProvider.track(dropList.length, 429, DIAGNOSTIC_MESSAGES.EXCEEDED_DAILY_QUOTA);\n }\n\n if (retry.length > 0) {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n }\n\n this.addToQueue(...retry);\n }\n\n handleOtherResponse(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"]}
|
|
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 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\nfunction getErrorMessage(error: unknown) {\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nexport function getResponseBodyString(res: Response) {\n let responseBodyString = '';\n try {\n if ('body' in res) {\n responseBodyString = JSON.stringify(res.body, null, 2);\n }\n } catch {\n // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n }\n return responseBodyString;\n}\n\nexport class Destination implements DestinationPlugin {\n name = 'amplitude';\n type = '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 private scheduled: ReturnType<typeof setTimeout> | null = null;\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 || this.config.offline) {\n return;\n }\n\n this.scheduled = setTimeout(() => {\n void this.flush(true).then(() => {\n if (this.queue.length > 0) {\n this.schedule(timeout);\n }\n });\n }, timeout);\n }\n\n async flush(useRetry = false) {\n // Skip flush if offline\n if (this.config.offline) {\n this.config.loggerProvider.debug('Skipping flush while offline.');\n return;\n }\n\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 if (this.scheduled) {\n clearTimeout(this.scheduled);\n this.scheduled = null;\n }\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) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { extra, ...eventWithoutExtra } = context.event;\n return eventWithoutExtra;\n }),\n options: {\n min_id_length: this.config.minIdLength,\n },\n client_upload_time: new Date().toISOString(),\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 if ('body' in res) {\n this.fulfillRequest(list, res.statusCode, `${res.status}: ${getResponseBodyString(res)}`);\n } else {\n this.fulfillRequest(list, res.statusCode, res.status);\n }\n return;\n }\n this.handleResponse(res, list);\n } catch (e) {\n const errorMessage = getErrorMessage(e);\n this.config.loggerProvider.error(errorMessage);\n this.fulfillRequest(list, 0, errorMessage);\n }\n }\n\n handleResponse(res: Response, list: Context[]) {\n const { status } = res;\n\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 // log intermediate event status before retry\n this.config.loggerProvider.warn(`{code: 0, error: \"Status '${status}' provided for ${list.length} events\"}`);\n\n this.handleOtherResponse(list);\n break;\n }\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 if (retry.length > 0) {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\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\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\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 if (retry.length > 0) {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n }\n\n this.addToQueue(...retry);\n }\n\n handleOtherResponse(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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amplitude/analytics-core",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "Amplitude Inc",
|
|
6
6
|
"homepage": "https://github.com/amplitude/Amplitude-TypeScript",
|
|
@@ -35,11 +35,11 @@
|
|
|
35
35
|
"url": "https://github.com/amplitude/Amplitude-TypeScript/issues"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@amplitude/analytics-types": "^2.
|
|
38
|
+
"@amplitude/analytics-types": "^2.5.0",
|
|
39
39
|
"tslib": "^2.4.1"
|
|
40
40
|
},
|
|
41
41
|
"files": [
|
|
42
42
|
"lib"
|
|
43
43
|
],
|
|
44
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "33fa1bd2b8e307a8a8d0a86610f8d893bf8aa5aa"
|
|
45
45
|
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export declare const DIAGNOSTIC_METADATA_TYPE = "SDK_DIAGNOSTIC";
|
|
2
|
-
export declare const DIAGNOSTIC_ENDPOINT = "https://api-omni.stag2.amplitude.com/omni/metrics";
|
|
3
|
-
export declare const DIAGNOSTIC_MESSAGES: {
|
|
4
|
-
EXCEEDED_MAX_RETRY: string;
|
|
5
|
-
MISSING_API_KEY: string;
|
|
6
|
-
UNEXPECTED_ERROR: string;
|
|
7
|
-
INVALID_OR_MISSING_FIELDS: string;
|
|
8
|
-
EVENT_ERROR: string;
|
|
9
|
-
PAYLOAD_TOO_LARGE: string;
|
|
10
|
-
EXCEEDED_DAILY_QUOTA: string;
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/diagnostics/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AACzD,eAAO,MAAM,mBAAmB,sDAAsD,CAAC;AAEvF,eAAO,MAAM,mBAAmB;;;;;;;;CAQ/B,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
exports.DIAGNOSTIC_MESSAGES = exports.DIAGNOSTIC_ENDPOINT = exports.DIAGNOSTIC_METADATA_TYPE = void 0;
|
|
3
|
-
exports.DIAGNOSTIC_METADATA_TYPE = 'SDK_DIAGNOSTIC';
|
|
4
|
-
exports.DIAGNOSTIC_ENDPOINT = 'https://api-omni.stag2.amplitude.com/omni/metrics';
|
|
5
|
-
exports.DIAGNOSTIC_MESSAGES = {
|
|
6
|
-
EXCEEDED_MAX_RETRY: 'exceeded max retries',
|
|
7
|
-
MISSING_API_KEY: 'missing API key',
|
|
8
|
-
UNEXPECTED_ERROR: 'unexpected error',
|
|
9
|
-
INVALID_OR_MISSING_FIELDS: 'invalid or missing fields',
|
|
10
|
-
EVENT_ERROR: 'event error',
|
|
11
|
-
PAYLOAD_TOO_LARGE: 'payload too large',
|
|
12
|
-
EXCEEDED_DAILY_QUOTA: 'exceeded daily quota users or devices',
|
|
13
|
-
};
|
|
14
|
-
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/diagnostics/constants.ts"],"names":[],"mappings":";;AAAa,QAAA,wBAAwB,GAAG,gBAAgB,CAAC;AAC5C,QAAA,mBAAmB,GAAG,mDAAmD,CAAC;AAE1E,QAAA,mBAAmB,GAAG;IACjC,kBAAkB,EAAE,sBAAsB;IAC1C,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,yBAAyB,EAAE,2BAA2B;IACtD,WAAW,EAAE,aAAa;IAC1B,iBAAiB,EAAE,mBAAmB;IACtC,oBAAoB,EAAE,uCAAuC;CAC9D,CAAC","sourcesContent":["export const DIAGNOSTIC_METADATA_TYPE = 'SDK_DIAGNOSTIC';\nexport const DIAGNOSTIC_ENDPOINT = 'https://api-omni.stag2.amplitude.com/omni/metrics';\n\nexport const DIAGNOSTIC_MESSAGES = {\n EXCEEDED_MAX_RETRY: 'exceeded max retries',\n MISSING_API_KEY: 'missing API key',\n UNEXPECTED_ERROR: 'unexpected error',\n INVALID_OR_MISSING_FIELDS: 'invalid or missing fields',\n EVENT_ERROR: 'event error',\n PAYLOAD_TOO_LARGE: 'payload too large',\n EXCEEDED_DAILY_QUOTA: 'exceeded daily quota users or devices',\n};\n"]}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Diagnostic, DiagnosticOptions } from '@amplitude/analytics-types';
|
|
2
|
-
import { DiagnosticOmniMetrics } from './typings';
|
|
3
|
-
export declare class BaseDiagnostic implements Diagnostic {
|
|
4
|
-
isDisabled: boolean;
|
|
5
|
-
serverUrl: string;
|
|
6
|
-
apiKey: string;
|
|
7
|
-
queue: DiagnosticOmniMetrics[];
|
|
8
|
-
private scheduled;
|
|
9
|
-
private delay;
|
|
10
|
-
constructor(options?: DiagnosticOptions);
|
|
11
|
-
track(eventCount: number, code: number, message: string): void;
|
|
12
|
-
flush(): Promise<void>;
|
|
13
|
-
diagnosticRequestBuilder(eventCount: number, code: number, message: string): DiagnosticOmniMetrics;
|
|
14
|
-
requestPayloadBuilder(events: DiagnosticOmniMetrics[]): object;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=diagnostic.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostic.d.ts","sourceRoot":"","sources":["../../../src/diagnostics/diagnostic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAGlD,qBAAa,cAAe,YAAW,UAAU;IAC/C,UAAU,UAAQ;IAClB,SAAS,EAAE,MAAM,CAAuB;IACxC,MAAM,SAAM;IACZ,KAAK,EAAE,qBAAqB,EAAE,CAAM;IAEpC,OAAO,CAAC,SAAS,CAA8C;IAG/D,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,CAAC,EAAE,iBAAiB;IAMvC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAcjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,qBAAqB;IAYlG,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM;CAY/D"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
exports.BaseDiagnostic = void 0;
|
|
3
|
-
var tslib_1 = require("tslib");
|
|
4
|
-
var constants_1 = require("../diagnostics/constants");
|
|
5
|
-
var constants_2 = require("./constants");
|
|
6
|
-
var BaseDiagnostic = /** @class */ (function () {
|
|
7
|
-
function BaseDiagnostic(options) {
|
|
8
|
-
var _a, _b, _c;
|
|
9
|
-
this.isDisabled = true;
|
|
10
|
-
this.serverUrl = constants_1.DIAGNOSTIC_ENDPOINT;
|
|
11
|
-
this.apiKey = '';
|
|
12
|
-
this.queue = [];
|
|
13
|
-
this.scheduled = null;
|
|
14
|
-
// deault delay is 1 minute
|
|
15
|
-
// make it private to prevent users from changing it to smaller value
|
|
16
|
-
this.delay = 60000;
|
|
17
|
-
this.isDisabled = (_a = options === null || options === void 0 ? void 0 : options.isDisabled) !== null && _a !== void 0 ? _a : true;
|
|
18
|
-
this.serverUrl = (_b = options === null || options === void 0 ? void 0 : options.serverUrl) !== null && _b !== void 0 ? _b : constants_1.DIAGNOSTIC_ENDPOINT;
|
|
19
|
-
this.apiKey = (_c = options === null || options === void 0 ? void 0 : options.apiKey) !== null && _c !== void 0 ? _c : '';
|
|
20
|
-
}
|
|
21
|
-
BaseDiagnostic.prototype.track = function (eventCount, code, message) {
|
|
22
|
-
var _this = this;
|
|
23
|
-
if (this.isDisabled) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
this.queue.push(this.diagnosticRequestBuilder(eventCount, code, message));
|
|
27
|
-
if (!this.scheduled) {
|
|
28
|
-
this.scheduled = setTimeout(function () {
|
|
29
|
-
void _this.flush();
|
|
30
|
-
}, this.delay);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
BaseDiagnostic.prototype.flush = function () {
|
|
34
|
-
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
35
|
-
return tslib_1.__generator(this, function (_a) {
|
|
36
|
-
// send http request based on environment
|
|
37
|
-
// implemented in its child class
|
|
38
|
-
if (this.scheduled) {
|
|
39
|
-
clearTimeout(this.scheduled);
|
|
40
|
-
this.scheduled = null;
|
|
41
|
-
}
|
|
42
|
-
return [2 /*return*/];
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
};
|
|
46
|
-
BaseDiagnostic.prototype.diagnosticRequestBuilder = function (eventCount, code, message) {
|
|
47
|
-
return {
|
|
48
|
-
metadata_type: constants_2.DIAGNOSTIC_METADATA_TYPE,
|
|
49
|
-
library: 'amplitude-ts',
|
|
50
|
-
accounting_time_min: Math.floor(Date.now() / 60 / 1000),
|
|
51
|
-
response_code: code,
|
|
52
|
-
trigger: message,
|
|
53
|
-
action: 'drop events',
|
|
54
|
-
event_count: eventCount,
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
BaseDiagnostic.prototype.requestPayloadBuilder = function (events) {
|
|
58
|
-
return {
|
|
59
|
-
method: 'POST',
|
|
60
|
-
headers: {
|
|
61
|
-
'Content-Type': 'application/json',
|
|
62
|
-
},
|
|
63
|
-
body: JSON.stringify({
|
|
64
|
-
api_key: this.apiKey || '',
|
|
65
|
-
omni_metrics: events,
|
|
66
|
-
}),
|
|
67
|
-
};
|
|
68
|
-
};
|
|
69
|
-
return BaseDiagnostic;
|
|
70
|
-
}());
|
|
71
|
-
exports.BaseDiagnostic = BaseDiagnostic;
|
|
72
|
-
//# sourceMappingURL=diagnostic.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostic.js","sourceRoot":"","sources":["../../../src/diagnostics/diagnostic.ts"],"names":[],"mappings":";;;AACA,sDAA+D;AAE/D,yCAAuD;AAEvD;IAWE,wBAAY,OAA2B;;QAVvC,eAAU,GAAG,IAAI,CAAC;QAClB,cAAS,GAAW,+BAAmB,CAAC;QACxC,WAAM,GAAG,EAAE,CAAC;QACZ,UAAK,GAA4B,EAAE,CAAC;QAE5B,cAAS,GAAyC,IAAI,CAAC;QAC/D,2BAA2B;QAC3B,qEAAqE;QAC7D,UAAK,GAAG,KAAK,CAAC;QAGpB,IAAI,CAAC,UAAU,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,mCAAI,IAAI,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,mCAAI,+BAAmB,CAAC;QAC3D,IAAI,CAAC,MAAM,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,mCAAI,EAAE,CAAC;IACtC,CAAC;IAED,8BAAK,GAAL,UAAM,UAAkB,EAAE,IAAY,EAAE,OAAe;QAAvD,iBAYC;QAXC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO;SACR;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAE1E,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC;gBAC1B,KAAK,KAAI,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SAChB;IACH,CAAC;IAEK,8BAAK,GAAX;;;gBACE,yCAAyC;gBACzC,iCAAiC;gBAEjC,IAAI,IAAI,CAAC,SAAS,EAAE;oBAClB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;iBACvB;;;;KACF;IAED,iDAAwB,GAAxB,UAAyB,UAAkB,EAAE,IAAY,EAAE,OAAe;QACxE,OAAO;YACL,aAAa,EAAE,oCAAwB;YACvC,OAAO,EAAE,cAAc;YACvB,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACvD,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,aAAa;YACrB,WAAW,EAAE,UAAU;SACxB,CAAC;IACJ,CAAC;IAED,8CAAqB,GAArB,UAAsB,MAA+B;QACnD,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;gBAC1B,YAAY,EAAE,MAAM;aACrB,CAAC;SACH,CAAC;IACJ,CAAC;IACH,qBAAC;AAAD,CAAC,AAjED,IAiEC;AAjEY,wCAAc","sourcesContent":["import { Diagnostic, DiagnosticOptions } from '@amplitude/analytics-types';\nimport { DIAGNOSTIC_ENDPOINT } from '../diagnostics/constants';\nimport { DiagnosticOmniMetrics } from './typings';\nimport { DIAGNOSTIC_METADATA_TYPE } from './constants';\n\nexport class BaseDiagnostic implements Diagnostic {\n isDisabled = true;\n serverUrl: string = DIAGNOSTIC_ENDPOINT;\n apiKey = '';\n queue: DiagnosticOmniMetrics[] = [];\n\n private scheduled: ReturnType<typeof setTimeout> | null = null;\n // deault delay is 1 minute\n // make it private to prevent users from changing it to smaller value\n private delay = 60000;\n\n constructor(options?: DiagnosticOptions) {\n this.isDisabled = options?.isDisabled ?? true;\n this.serverUrl = options?.serverUrl ?? DIAGNOSTIC_ENDPOINT;\n this.apiKey = options?.apiKey ?? '';\n }\n\n track(eventCount: number, code: number, message: string) {\n if (this.isDisabled) {\n return;\n }\n\n this.queue.push(this.diagnosticRequestBuilder(eventCount, code, message));\n\n if (!this.scheduled) {\n this.scheduled = setTimeout(() => {\n void this.flush();\n }, this.delay);\n }\n }\n\n async flush(): Promise<void> {\n // send http request based on environment\n // implemented in its child class\n\n if (this.scheduled) {\n clearTimeout(this.scheduled);\n this.scheduled = null;\n }\n }\n\n diagnosticRequestBuilder(eventCount: number, code: number, message: string): DiagnosticOmniMetrics {\n return {\n metadata_type: DIAGNOSTIC_METADATA_TYPE,\n library: 'amplitude-ts',\n accounting_time_min: Math.floor(Date.now() / 60 / 1000),\n response_code: code,\n trigger: message,\n action: 'drop events',\n event_count: eventCount,\n };\n }\n\n requestPayloadBuilder(events: DiagnosticOmniMetrics[]): object {\n return {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n api_key: this.apiKey || '',\n omni_metrics: events,\n }),\n };\n }\n}\n"]}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export interface DiagnosticOmniMetrics {
|
|
2
|
-
metadata_type: string;
|
|
3
|
-
library: string;
|
|
4
|
-
accounting_time_min: number;
|
|
5
|
-
response_code: number;
|
|
6
|
-
trigger: string;
|
|
7
|
-
action: string;
|
|
8
|
-
event_count: number;
|
|
9
|
-
}
|
|
10
|
-
export interface DiagnosticRequest {
|
|
11
|
-
api_key: string;
|
|
12
|
-
omni_metrics: DiagnosticOmniMetrics;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=typings.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typings.d.ts","sourceRoot":"","sources":["../../../src/diagnostics/typings.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,qBAAqB,CAAC;CACrC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typings.js","sourceRoot":"","sources":["../../../src/diagnostics/typings.ts"],"names":[],"mappings":"","sourcesContent":["export interface DiagnosticOmniMetrics {\n metadata_type: string;\n library: string;\n accounting_time_min: number;\n response_code: number;\n trigger: string;\n action: string;\n event_count: number;\n}\n\nexport interface DiagnosticRequest {\n api_key: string;\n omni_metrics: DiagnosticOmniMetrics;\n}\n"]}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export declare const DIAGNOSTIC_METADATA_TYPE = "SDK_DIAGNOSTIC";
|
|
2
|
-
export declare const DIAGNOSTIC_ENDPOINT = "https://api-omni.stag2.amplitude.com/omni/metrics";
|
|
3
|
-
export declare const DIAGNOSTIC_MESSAGES: {
|
|
4
|
-
EXCEEDED_MAX_RETRY: string;
|
|
5
|
-
MISSING_API_KEY: string;
|
|
6
|
-
UNEXPECTED_ERROR: string;
|
|
7
|
-
INVALID_OR_MISSING_FIELDS: string;
|
|
8
|
-
EVENT_ERROR: string;
|
|
9
|
-
PAYLOAD_TOO_LARGE: string;
|
|
10
|
-
EXCEEDED_DAILY_QUOTA: string;
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/diagnostics/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AACzD,eAAO,MAAM,mBAAmB,sDAAsD,CAAC;AAEvF,eAAO,MAAM,mBAAmB;;;;;;;;CAQ/B,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export var DIAGNOSTIC_METADATA_TYPE = 'SDK_DIAGNOSTIC';
|
|
2
|
-
export var DIAGNOSTIC_ENDPOINT = 'https://api-omni.stag2.amplitude.com/omni/metrics';
|
|
3
|
-
export var DIAGNOSTIC_MESSAGES = {
|
|
4
|
-
EXCEEDED_MAX_RETRY: 'exceeded max retries',
|
|
5
|
-
MISSING_API_KEY: 'missing API key',
|
|
6
|
-
UNEXPECTED_ERROR: 'unexpected error',
|
|
7
|
-
INVALID_OR_MISSING_FIELDS: 'invalid or missing fields',
|
|
8
|
-
EVENT_ERROR: 'event error',
|
|
9
|
-
PAYLOAD_TOO_LARGE: 'payload too large',
|
|
10
|
-
EXCEEDED_DAILY_QUOTA: 'exceeded daily quota users or devices',
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/diagnostics/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,wBAAwB,GAAG,gBAAgB,CAAC;AACzD,MAAM,CAAC,IAAM,mBAAmB,GAAG,mDAAmD,CAAC;AAEvF,MAAM,CAAC,IAAM,mBAAmB,GAAG;IACjC,kBAAkB,EAAE,sBAAsB;IAC1C,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,yBAAyB,EAAE,2BAA2B;IACtD,WAAW,EAAE,aAAa;IAC1B,iBAAiB,EAAE,mBAAmB;IACtC,oBAAoB,EAAE,uCAAuC;CAC9D,CAAC","sourcesContent":["export const DIAGNOSTIC_METADATA_TYPE = 'SDK_DIAGNOSTIC';\nexport const DIAGNOSTIC_ENDPOINT = 'https://api-omni.stag2.amplitude.com/omni/metrics';\n\nexport const DIAGNOSTIC_MESSAGES = {\n EXCEEDED_MAX_RETRY: 'exceeded max retries',\n MISSING_API_KEY: 'missing API key',\n UNEXPECTED_ERROR: 'unexpected error',\n INVALID_OR_MISSING_FIELDS: 'invalid or missing fields',\n EVENT_ERROR: 'event error',\n PAYLOAD_TOO_LARGE: 'payload too large',\n EXCEEDED_DAILY_QUOTA: 'exceeded daily quota users or devices',\n};\n"]}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Diagnostic, DiagnosticOptions } from '@amplitude/analytics-types';
|
|
2
|
-
import { DiagnosticOmniMetrics } from './typings';
|
|
3
|
-
export declare class BaseDiagnostic implements Diagnostic {
|
|
4
|
-
isDisabled: boolean;
|
|
5
|
-
serverUrl: string;
|
|
6
|
-
apiKey: string;
|
|
7
|
-
queue: DiagnosticOmniMetrics[];
|
|
8
|
-
private scheduled;
|
|
9
|
-
private delay;
|
|
10
|
-
constructor(options?: DiagnosticOptions);
|
|
11
|
-
track(eventCount: number, code: number, message: string): void;
|
|
12
|
-
flush(): Promise<void>;
|
|
13
|
-
diagnosticRequestBuilder(eventCount: number, code: number, message: string): DiagnosticOmniMetrics;
|
|
14
|
-
requestPayloadBuilder(events: DiagnosticOmniMetrics[]): object;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=diagnostic.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostic.d.ts","sourceRoot":"","sources":["../../../src/diagnostics/diagnostic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAGlD,qBAAa,cAAe,YAAW,UAAU;IAC/C,UAAU,UAAQ;IAClB,SAAS,EAAE,MAAM,CAAuB;IACxC,MAAM,SAAM;IACZ,KAAK,EAAE,qBAAqB,EAAE,CAAM;IAEpC,OAAO,CAAC,SAAS,CAA8C;IAG/D,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,CAAC,EAAE,iBAAiB;IAMvC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAcjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,qBAAqB;IAYlG,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM;CAY/D"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { __awaiter, __generator } from "tslib";
|
|
2
|
-
import { DIAGNOSTIC_ENDPOINT } from '../diagnostics/constants';
|
|
3
|
-
import { DIAGNOSTIC_METADATA_TYPE } from './constants';
|
|
4
|
-
var BaseDiagnostic = /** @class */ (function () {
|
|
5
|
-
function BaseDiagnostic(options) {
|
|
6
|
-
var _a, _b, _c;
|
|
7
|
-
this.isDisabled = true;
|
|
8
|
-
this.serverUrl = DIAGNOSTIC_ENDPOINT;
|
|
9
|
-
this.apiKey = '';
|
|
10
|
-
this.queue = [];
|
|
11
|
-
this.scheduled = null;
|
|
12
|
-
// deault delay is 1 minute
|
|
13
|
-
// make it private to prevent users from changing it to smaller value
|
|
14
|
-
this.delay = 60000;
|
|
15
|
-
this.isDisabled = (_a = options === null || options === void 0 ? void 0 : options.isDisabled) !== null && _a !== void 0 ? _a : true;
|
|
16
|
-
this.serverUrl = (_b = options === null || options === void 0 ? void 0 : options.serverUrl) !== null && _b !== void 0 ? _b : DIAGNOSTIC_ENDPOINT;
|
|
17
|
-
this.apiKey = (_c = options === null || options === void 0 ? void 0 : options.apiKey) !== null && _c !== void 0 ? _c : '';
|
|
18
|
-
}
|
|
19
|
-
BaseDiagnostic.prototype.track = function (eventCount, code, message) {
|
|
20
|
-
var _this = this;
|
|
21
|
-
if (this.isDisabled) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
this.queue.push(this.diagnosticRequestBuilder(eventCount, code, message));
|
|
25
|
-
if (!this.scheduled) {
|
|
26
|
-
this.scheduled = setTimeout(function () {
|
|
27
|
-
void _this.flush();
|
|
28
|
-
}, this.delay);
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
BaseDiagnostic.prototype.flush = function () {
|
|
32
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
33
|
-
return __generator(this, function (_a) {
|
|
34
|
-
// send http request based on environment
|
|
35
|
-
// implemented in its child class
|
|
36
|
-
if (this.scheduled) {
|
|
37
|
-
clearTimeout(this.scheduled);
|
|
38
|
-
this.scheduled = null;
|
|
39
|
-
}
|
|
40
|
-
return [2 /*return*/];
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
BaseDiagnostic.prototype.diagnosticRequestBuilder = function (eventCount, code, message) {
|
|
45
|
-
return {
|
|
46
|
-
metadata_type: DIAGNOSTIC_METADATA_TYPE,
|
|
47
|
-
library: 'amplitude-ts',
|
|
48
|
-
accounting_time_min: Math.floor(Date.now() / 60 / 1000),
|
|
49
|
-
response_code: code,
|
|
50
|
-
trigger: message,
|
|
51
|
-
action: 'drop events',
|
|
52
|
-
event_count: eventCount,
|
|
53
|
-
};
|
|
54
|
-
};
|
|
55
|
-
BaseDiagnostic.prototype.requestPayloadBuilder = function (events) {
|
|
56
|
-
return {
|
|
57
|
-
method: 'POST',
|
|
58
|
-
headers: {
|
|
59
|
-
'Content-Type': 'application/json',
|
|
60
|
-
},
|
|
61
|
-
body: JSON.stringify({
|
|
62
|
-
api_key: this.apiKey || '',
|
|
63
|
-
omni_metrics: events,
|
|
64
|
-
}),
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
return BaseDiagnostic;
|
|
68
|
-
}());
|
|
69
|
-
export { BaseDiagnostic };
|
|
70
|
-
//# sourceMappingURL=diagnostic.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostic.js","sourceRoot":"","sources":["../../../src/diagnostics/diagnostic.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD;IAWE,wBAAY,OAA2B;;QAVvC,eAAU,GAAG,IAAI,CAAC;QAClB,cAAS,GAAW,mBAAmB,CAAC;QACxC,WAAM,GAAG,EAAE,CAAC;QACZ,UAAK,GAA4B,EAAE,CAAC;QAE5B,cAAS,GAAyC,IAAI,CAAC;QAC/D,2BAA2B;QAC3B,qEAAqE;QAC7D,UAAK,GAAG,KAAK,CAAC;QAGpB,IAAI,CAAC,UAAU,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,mCAAI,IAAI,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,mCAAI,mBAAmB,CAAC;QAC3D,IAAI,CAAC,MAAM,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,mCAAI,EAAE,CAAC;IACtC,CAAC;IAED,8BAAK,GAAL,UAAM,UAAkB,EAAE,IAAY,EAAE,OAAe;QAAvD,iBAYC;QAXC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO;SACR;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAE1E,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC;gBAC1B,KAAK,KAAI,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SAChB;IACH,CAAC;IAEK,8BAAK,GAAX;;;gBACE,yCAAyC;gBACzC,iCAAiC;gBAEjC,IAAI,IAAI,CAAC,SAAS,EAAE;oBAClB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;iBACvB;;;;KACF;IAED,iDAAwB,GAAxB,UAAyB,UAAkB,EAAE,IAAY,EAAE,OAAe;QACxE,OAAO;YACL,aAAa,EAAE,wBAAwB;YACvC,OAAO,EAAE,cAAc;YACvB,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACvD,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,aAAa;YACrB,WAAW,EAAE,UAAU;SACxB,CAAC;IACJ,CAAC;IAED,8CAAqB,GAArB,UAAsB,MAA+B;QACnD,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;gBAC1B,YAAY,EAAE,MAAM;aACrB,CAAC;SACH,CAAC;IACJ,CAAC;IACH,qBAAC;AAAD,CAAC,AAjED,IAiEC","sourcesContent":["import { Diagnostic, DiagnosticOptions } from '@amplitude/analytics-types';\nimport { DIAGNOSTIC_ENDPOINT } from '../diagnostics/constants';\nimport { DiagnosticOmniMetrics } from './typings';\nimport { DIAGNOSTIC_METADATA_TYPE } from './constants';\n\nexport class BaseDiagnostic implements Diagnostic {\n isDisabled = true;\n serverUrl: string = DIAGNOSTIC_ENDPOINT;\n apiKey = '';\n queue: DiagnosticOmniMetrics[] = [];\n\n private scheduled: ReturnType<typeof setTimeout> | null = null;\n // deault delay is 1 minute\n // make it private to prevent users from changing it to smaller value\n private delay = 60000;\n\n constructor(options?: DiagnosticOptions) {\n this.isDisabled = options?.isDisabled ?? true;\n this.serverUrl = options?.serverUrl ?? DIAGNOSTIC_ENDPOINT;\n this.apiKey = options?.apiKey ?? '';\n }\n\n track(eventCount: number, code: number, message: string) {\n if (this.isDisabled) {\n return;\n }\n\n this.queue.push(this.diagnosticRequestBuilder(eventCount, code, message));\n\n if (!this.scheduled) {\n this.scheduled = setTimeout(() => {\n void this.flush();\n }, this.delay);\n }\n }\n\n async flush(): Promise<void> {\n // send http request based on environment\n // implemented in its child class\n\n if (this.scheduled) {\n clearTimeout(this.scheduled);\n this.scheduled = null;\n }\n }\n\n diagnosticRequestBuilder(eventCount: number, code: number, message: string): DiagnosticOmniMetrics {\n return {\n metadata_type: DIAGNOSTIC_METADATA_TYPE,\n library: 'amplitude-ts',\n accounting_time_min: Math.floor(Date.now() / 60 / 1000),\n response_code: code,\n trigger: message,\n action: 'drop events',\n event_count: eventCount,\n };\n }\n\n requestPayloadBuilder(events: DiagnosticOmniMetrics[]): object {\n return {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n api_key: this.apiKey || '',\n omni_metrics: events,\n }),\n };\n }\n}\n"]}
|