Launch Week Day 2: Introducing Reports: An Extensible Reporting Framework for Socket Data.Learn More
Socket
Book a DemoSign in
Socket

@amplitude/utils

Package Overview
Dependencies
Maintainers
12
Versions
28
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@amplitude/utils - npm Package Compare versions

Comparing version
1.5.3
to
1.5.4
+1
-1
dist/src/queue.d.ts

@@ -8,5 +8,5 @@ /**

private _promiseInProgress;
addToQueue<T = any>(promiseGenerator: () => Promise<T>, limitInMs?: number): Promise<T>;
addToQueue<T = any>(promiseGenerator: () => Promise<T>): Promise<T>;
private _notifyUploadFinish;
}
//# sourceMappingURL=queue.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/queue.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,kBAAkB,CAAS;IAKtB,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,SAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IA4C/F,OAAO,CAAC,mBAAmB;CAY5B"}
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/queue.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,kBAAkB,CAAS;IAKtB,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA+BhF,OAAO,CAAC,mBAAmB;CAQ5B"}

@@ -16,4 +16,3 @@ Object.defineProperty(exports, "__esModule", { value: true });

// or never expire, if limit is not set
AsyncQueue.prototype.addToQueue = function (promiseGenerator, limitInMs) {
if (limitInMs === void 0) { limitInMs = 0; }
AsyncQueue.prototype.addToQueue = function (promiseGenerator) {
return tslib_1.__awaiter(this, void 0, void 0, function () {

@@ -59,15 +58,4 @@ var _this = this;

startPromise: startPromise,
cancellingTimeout: null,
};
_this._promiseQueue.push(queueObject);
// If the limit exists, set a timeout to remove the callback and reject the promise
if (limitInMs > 0) {
queueObject.cancellingTimeout = setTimeout(function () {
var callBackIndex = _this._promiseQueue.indexOf(queueObject);
if (callBackIndex > -1) {
_this._promiseQueue.splice(callBackIndex, 1);
reject(new Error());
}
}, limitInMs);
}
})];

@@ -84,6 +72,2 @@ case 1: return [2 /*return*/, _a.sent()];

if (oldestPromise !== undefined) {
if (oldestPromise.cancellingTimeout !== null) {
// Clear the timeout where we try to remove the callback and reject the promise.
clearTimeout(oldestPromise.cancellingTimeout);
}
// eslint-disable-next-line @typescript-eslint/no-floating-promises

@@ -90,0 +74,0 @@ oldestPromise.startPromise();

@@ -1,1 +0,1 @@

{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue.ts"],"names":[],"mappings":";;;AAQA;;;GAGG;AACH;IAAA;QACmB,kBAAa,GAAkB,EAAE,CAAC;QAC3C,uBAAkB,GAAG,KAAK,CAAC;IA6DrC,CAAC;IA3DC,uEAAuE;IACvE,qEAAqE;IACrE,uCAAuC;IAC1B,+BAAU,GAAvB,UAAiC,gBAAkC,EAAE,SAAa;QAAb,0BAAA,EAAA,aAAa;;;;;4BACzE,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;4BACvC,sDAAsD;4BACtD,IAAM,YAAY,GAAG;;;;;4CACnB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;;;;4CAEhB,qBAAM,gBAAgB,EAAE,EAAA;;4CAA/B,IAAI,GAAG,SAAwB;4CACrC,OAAO,CAAC,IAAI,CAAC,CAAC;;;;4CAEd,MAAM,CAAC,KAAG,CAAC,CAAC;;;4CAEZ,IAAI,CAAC,mBAAmB,EAAE,CAAC;;;;;iCAE9B,CAAC;4BAEF,qCAAqC;4BACrC,qBAAqB;4BACrB,IAAI,CAAC,KAAI,CAAC,kBAAkB,EAAE;gCAC5B,mEAAmE;gCACnE,YAAY,EAAE,CAAC;gCACf,OAAO;6BACR;4BAED,IAAM,WAAW,GAAgB;gCAC/B,YAAY,cAAA;gCACZ,iBAAiB,EAAE,IAAI;6BACxB,CAAC;4BACF,KAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;4BAErC,mFAAmF;4BACnF,IAAI,SAAS,GAAG,CAAC,EAAE;gCACjB,WAAW,CAAC,iBAAiB,GAAG,UAAU,CAAC;oCACzC,IAAM,aAAa,GAAG,KAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oCAE9D,IAAI,aAAa,GAAG,CAAC,CAAC,EAAE;wCACtB,KAAI,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;wCAC5C,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;qCACrB;gCACH,CAAC,EAAE,SAAS,CAAC,CAAC;6BACf;wBACH,CAAC,CAAC,EAAA;4BAvCF,sBAAO,SAuCL,EAAC;;;;KACJ;IAED,wFAAwF;IAChF,wCAAmB,GAA3B;QACE,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACjD,IAAI,aAAa,KAAK,SAAS,EAAE;YAC/B,IAAI,aAAa,CAAC,iBAAiB,KAAK,IAAI,EAAE;gBAC5C,gFAAgF;gBAChF,YAAY,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;aAC/C;YACD,mEAAmE;YACnE,aAAa,CAAC,YAAY,EAAE,CAAC;SAC9B;IACH,CAAC;IACH,iBAAC;AAAD,CAAC,AA/DD,IA+DC;AA/DY,gCAAU","sourcesContent":["interface QueueObject {\n // The callback used to start the promise\n startPromise: () => Promise<void>;\n // If the promise is meant to expire after some time, this is the associated Timeout\n // Meant to be canceled if the promise is started.\n cancellingTimeout: NodeJS.Timeout | null;\n}\n\n/**\n * Helper utility that processes promises one by one in the order they arrive,\n * with an optional time-out value.\n */\nexport class AsyncQueue {\n private readonly _promiseQueue: QueueObject[] = [];\n private _promiseInProgress = false;\n\n // Awaits the finish of all promises that have been queued up before it\n // And will expire itself (reject the promise) after waiting limit ms\n // or never expire, if limit is not set\n public async addToQueue<T = any>(promiseGenerator: () => Promise<T>, limitInMs = 0): Promise<T> {\n return await new Promise((resolve, reject) => {\n // The callback that will start the promise resolution\n const startPromise = async (): Promise<void> => {\n this._promiseInProgress = true;\n try {\n const resp = await promiseGenerator();\n resolve(resp);\n } catch (err) {\n reject(err);\n } finally {\n this._notifyUploadFinish();\n }\n };\n\n // If there is no promise in progress\n // Return immediately\n if (!this._promiseInProgress) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n startPromise();\n return;\n }\n\n const queueObject: QueueObject = {\n startPromise,\n cancellingTimeout: null,\n };\n this._promiseQueue.push(queueObject);\n\n // If the limit exists, set a timeout to remove the callback and reject the promise\n if (limitInMs > 0) {\n queueObject.cancellingTimeout = setTimeout(() => {\n const callBackIndex = this._promiseQueue.indexOf(queueObject);\n\n if (callBackIndex > -1) {\n this._promiseQueue.splice(callBackIndex, 1);\n reject(new Error());\n }\n }, limitInMs);\n }\n });\n }\n\n // Notify the oldest awaiting promise that the queue is ready to process another promise\n private _notifyUploadFinish(): void {\n this._promiseInProgress = false;\n const oldestPromise = this._promiseQueue.shift();\n if (oldestPromise !== undefined) {\n if (oldestPromise.cancellingTimeout !== null) {\n // Clear the timeout where we try to remove the callback and reject the promise.\n clearTimeout(oldestPromise.cancellingTimeout);\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n oldestPromise.startPromise();\n }\n }\n}\n"]}
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue.ts"],"names":[],"mappings":";;;AAKA;;;GAGG;AACH;IAAA;QACmB,kBAAa,GAAkB,EAAE,CAAC;QAC3C,uBAAkB,GAAG,KAAK,CAAC;IA4CrC,CAAC;IA1CC,uEAAuE;IACvE,qEAAqE;IACrE,uCAAuC;IAC1B,+BAAU,GAAvB,UAAiC,gBAAkC;;;;;4BAC1D,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;4BACvC,sDAAsD;4BACtD,IAAM,YAAY,GAAG;;;;;4CACnB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;;;;4CAEhB,qBAAM,gBAAgB,EAAE,EAAA;;4CAA/B,IAAI,GAAG,SAAwB;4CACrC,OAAO,CAAC,IAAI,CAAC,CAAC;;;;4CAEd,MAAM,CAAC,KAAG,CAAC,CAAC;;;4CAEZ,IAAI,CAAC,mBAAmB,EAAE,CAAC;;;;;iCAE9B,CAAC;4BAEF,qCAAqC;4BACrC,qBAAqB;4BACrB,IAAI,CAAC,KAAI,CAAC,kBAAkB,EAAE;gCAC5B,mEAAmE;gCACnE,YAAY,EAAE,CAAC;gCACf,OAAO;6BACR;4BAED,IAAM,WAAW,GAAgB;gCAC/B,YAAY,cAAA;6BACb,CAAC;4BACF,KAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBACvC,CAAC,CAAC,EAAA;4BA1BF,sBAAO,SA0BL,EAAC;;;;KACJ;IAED,wFAAwF;IAChF,wCAAmB,GAA3B;QACE,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACjD,IAAI,aAAa,KAAK,SAAS,EAAE;YAC/B,mEAAmE;YACnE,aAAa,CAAC,YAAY,EAAE,CAAC;SAC9B;IACH,CAAC;IACH,iBAAC;AAAD,CAAC,AA9CD,IA8CC;AA9CY,gCAAU","sourcesContent":["interface QueueObject {\n // The callback used to start the promise\n startPromise: () => Promise<void>;\n}\n\n/**\n * Helper utility that processes promises one by one in the order they arrive,\n * with an optional time-out value.\n */\nexport class AsyncQueue {\n private readonly _promiseQueue: QueueObject[] = [];\n private _promiseInProgress = false;\n\n // Awaits the finish of all promises that have been queued up before it\n // And will expire itself (reject the promise) after waiting limit ms\n // or never expire, if limit is not set\n public async addToQueue<T = any>(promiseGenerator: () => Promise<T>): Promise<T> {\n return await new Promise((resolve, reject) => {\n // The callback that will start the promise resolution\n const startPromise = async (): Promise<void> => {\n this._promiseInProgress = true;\n try {\n const resp = await promiseGenerator();\n resolve(resp);\n } catch (err) {\n reject(err);\n } finally {\n this._notifyUploadFinish();\n }\n };\n\n // If there is no promise in progress\n // Return immediately\n if (!this._promiseInProgress) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n startPromise();\n return;\n }\n\n const queueObject: QueueObject = {\n startPromise,\n };\n this._promiseQueue.push(queueObject);\n });\n }\n\n // Notify the oldest awaiting promise that the queue is ready to process another promise\n private _notifyUploadFinish(): void {\n this._promiseInProgress = false;\n const oldestPromise = this._promiseQueue.shift();\n if (oldestPromise !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n oldestPromise.startPromise();\n }\n }\n}\n"]}

@@ -1,1 +0,1 @@

{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAGvC;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,aAAc,QAAQ,KAAG,MAAM,EAmBrE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,YAAa,eAAe,KAAG,QAQnE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,iBAAkB,GAAG,KAAG,QAAQ,GAAG,IA2DhE,CAAC"}
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAGvC;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,aAAc,QAAQ,KAAG,MAAM,EAmBrE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,YAAa,eAAe,KAAG,QAQnE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,iBAAkB,GAAG,KAAG,QAAQ,GAAG,IA4DhE,CAAC"}

@@ -105,2 +105,3 @@ Object.defineProperty(exports, "__esModule", { value: true });

};
case types_1.Status.Timeout:
default:

@@ -107,0 +108,0 @@ return {

@@ -1,1 +0,1 @@

{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/response.ts"],"names":[],"mappings":"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","sourcesContent":["import { Response, Status } from '@amplitude/types';\nimport { IncomingMessage } from 'http';\nimport { mapHttpCodeToStatus } from './status';\n\n/**\n * Collects the invalid event indices off a HTTP API v2 response\n * and returns them in increasing order.\n *\n * @param response A Response from sending an event payload\n * @returns An concatenated array of indices\n */\nexport const collectInvalidEventIndices = (response: Response): number[] => {\n const invalidEventIndices = new Set<number>();\n if (response.status === Status.Invalid && response.body !== undefined) {\n const { eventsWithInvalidFields, eventsWithMissingFields } = response.body;\n Object.keys(eventsWithInvalidFields).forEach((field: string) => {\n const eventIndices = eventsWithInvalidFields[field] ?? [];\n eventIndices.forEach((index: number) => {\n invalidEventIndices.add(index);\n });\n });\n Object.keys(eventsWithMissingFields).forEach((field: string) => {\n const eventIndices = eventsWithMissingFields[field] ?? [];\n eventIndices.forEach((index: number) => {\n invalidEventIndices.add(index);\n });\n });\n }\n\n return Array.from(invalidEventIndices).sort((numberOne, numberTwo) => numberOne - numberTwo);\n};\n\n/**\n * Converts a http.IncomingMessage object into a Response object.\n *\n * @param httpRes The http response from the HTTP API.\n * @returns Response a nicely typed and cased response object.\n */\nexport const mapHttpMessageToResponse = (httpRes: IncomingMessage): Response => {\n const statusCode = httpRes.statusCode === undefined ? 0 : httpRes.statusCode;\n const status = mapHttpCodeToStatus(statusCode);\n\n return {\n status,\n statusCode,\n };\n};\n\n/**\n * Converts the response from the HTTP V2 API into a Response object.\n * Should be used only if we are pointed towards the v2 api.\n *\n * @param responseJSON The response body from the HTTP V2 API, as a JSON blob\n * @returns Response a nicely typed and cased response object.\n */\nexport const mapJSONToResponse = (responseJSON: any): Response | null => {\n if (typeof responseJSON !== 'object') {\n return null;\n }\n\n const status = mapHttpCodeToStatus(responseJSON.code);\n const statusCode = responseJSON.code;\n\n switch (status) {\n case Status.Success:\n return {\n status,\n statusCode,\n body: {\n eventsIngested: responseJSON.events_ingested,\n payloadSizeBytes: responseJSON.payload_size_bytes,\n serverUploadTime: responseJSON.server_upload_time,\n },\n };\n\n case Status.Invalid:\n return {\n status,\n statusCode,\n body: {\n error: responseJSON.error ?? '',\n missingField: responseJSON.missing_field ?? null,\n eventsWithInvalidFields: responseJSON.events_with_invalid_fields ?? {},\n eventsWithMissingFields: responseJSON.events_with_missing_fields ?? {},\n },\n };\n case Status.PayloadTooLarge:\n return {\n status,\n statusCode,\n body: {\n error: responseJSON.error ?? '',\n },\n };\n case Status.RateLimit:\n return {\n status,\n statusCode,\n body: {\n error: responseJSON.error ?? '',\n epsThreshold: responseJSON.eps_threshold,\n throttledDevices: responseJSON.throttled_devices ?? {},\n throttledUsers: responseJSON.throttled_users ?? {},\n exceededDailyQuotaDevices: responseJSON.exceeded_daily_quota_devices ?? {},\n exceededDailyQuotaUsers: responseJSON.exceeded_daily_quota_users ?? {},\n throttledEvents: responseJSON.throttled_events ?? [],\n },\n };\n default:\n return {\n status,\n statusCode,\n };\n }\n};\n"]}
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/response.ts"],"names":[],"mappings":"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","sourcesContent":["import { Response, Status } from '@amplitude/types';\nimport { IncomingMessage } from 'http';\nimport { mapHttpCodeToStatus } from './status';\n\n/**\n * Collects the invalid event indices off a HTTP API v2 response\n * and returns them in increasing order.\n *\n * @param response A Response from sending an event payload\n * @returns An concatenated array of indices\n */\nexport const collectInvalidEventIndices = (response: Response): number[] => {\n const invalidEventIndices = new Set<number>();\n if (response.status === Status.Invalid && response.body !== undefined) {\n const { eventsWithInvalidFields, eventsWithMissingFields } = response.body;\n Object.keys(eventsWithInvalidFields).forEach((field: string) => {\n const eventIndices = eventsWithInvalidFields[field] ?? [];\n eventIndices.forEach((index: number) => {\n invalidEventIndices.add(index);\n });\n });\n Object.keys(eventsWithMissingFields).forEach((field: string) => {\n const eventIndices = eventsWithMissingFields[field] ?? [];\n eventIndices.forEach((index: number) => {\n invalidEventIndices.add(index);\n });\n });\n }\n\n return Array.from(invalidEventIndices).sort((numberOne, numberTwo) => numberOne - numberTwo);\n};\n\n/**\n * Converts a http.IncomingMessage object into a Response object.\n *\n * @param httpRes The http response from the HTTP API.\n * @returns Response a nicely typed and cased response object.\n */\nexport const mapHttpMessageToResponse = (httpRes: IncomingMessage): Response => {\n const statusCode = httpRes.statusCode === undefined ? 0 : httpRes.statusCode;\n const status = mapHttpCodeToStatus(statusCode);\n\n return {\n status,\n statusCode,\n };\n};\n\n/**\n * Converts the response from the HTTP V2 API into a Response object.\n * Should be used only if we are pointed towards the v2 api.\n *\n * @param responseJSON The response body from the HTTP V2 API, as a JSON blob\n * @returns Response a nicely typed and cased response object.\n */\nexport const mapJSONToResponse = (responseJSON: any): Response | null => {\n if (typeof responseJSON !== 'object') {\n return null;\n }\n\n const status = mapHttpCodeToStatus(responseJSON.code);\n const statusCode = responseJSON.code;\n\n switch (status) {\n case Status.Success:\n return {\n status,\n statusCode,\n body: {\n eventsIngested: responseJSON.events_ingested,\n payloadSizeBytes: responseJSON.payload_size_bytes,\n serverUploadTime: responseJSON.server_upload_time,\n },\n };\n\n case Status.Invalid:\n return {\n status,\n statusCode,\n body: {\n error: responseJSON.error ?? '',\n missingField: responseJSON.missing_field ?? null,\n eventsWithInvalidFields: responseJSON.events_with_invalid_fields ?? {},\n eventsWithMissingFields: responseJSON.events_with_missing_fields ?? {},\n },\n };\n case Status.PayloadTooLarge:\n return {\n status,\n statusCode,\n body: {\n error: responseJSON.error ?? '',\n },\n };\n case Status.RateLimit:\n return {\n status,\n statusCode,\n body: {\n error: responseJSON.error ?? '',\n epsThreshold: responseJSON.eps_threshold,\n throttledDevices: responseJSON.throttled_devices ?? {},\n throttledUsers: responseJSON.throttled_users ?? {},\n exceededDailyQuotaDevices: responseJSON.exceeded_daily_quota_devices ?? {},\n exceededDailyQuotaUsers: responseJSON.exceeded_daily_quota_users ?? {},\n throttledEvents: responseJSON.throttled_events ?? [],\n },\n };\n case Status.Timeout:\n default:\n return {\n status,\n statusCode,\n };\n }\n};\n"]}

@@ -1,1 +0,1 @@

{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAsBxD"}
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0BxD"}

@@ -20,2 +20,5 @@ Object.defineProperty(exports, "__esModule", { value: true });

}
if (code === 408) {
return types_1.Status.Timeout;
}
if (code >= 400 && code < 500) {

@@ -22,0 +25,0 @@ return types_1.Status.Invalid;

@@ -1,1 +0,1 @@

{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/status.ts"],"names":[],"mappings":";;AAAA,0CAA0C;AAE1C;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE;QAC7B,OAAO,cAAM,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,IAAI,KAAK,GAAG,EAAE;QAChB,OAAO,cAAM,CAAC,SAAS,CAAC;KACzB;IAED,IAAI,IAAI,KAAK,GAAG,EAAE;QAChB,OAAO,cAAM,CAAC,eAAe,CAAC;KAC/B;IAED,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE;QAC7B,OAAO,cAAM,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,IAAI,IAAI,GAAG,EAAE;QACf,OAAO,cAAM,CAAC,MAAM,CAAC;KACtB;IAED,OAAO,cAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAtBD,kDAsBC","sourcesContent":["import { Status } from '@amplitude/types';\n\n/**\n * Converts a HTTP status code into a {@link Status}.\n *\n * @param code The HTTP response status code.\n * @returns The send status or {@link Status.Unknown}.\n */\nexport function mapHttpCodeToStatus(code: number): Status {\n if (code >= 200 && code < 300) {\n return Status.Success;\n }\n\n if (code === 429) {\n return Status.RateLimit;\n }\n\n if (code === 413) {\n return Status.PayloadTooLarge;\n }\n\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n\n if (code >= 500) {\n return Status.Failed;\n }\n\n return Status.Unknown;\n}\n"]}
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/status.ts"],"names":[],"mappings":";;AAAA,0CAA0C;AAE1C;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE;QAC7B,OAAO,cAAM,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,IAAI,KAAK,GAAG,EAAE;QAChB,OAAO,cAAM,CAAC,SAAS,CAAC;KACzB;IAED,IAAI,IAAI,KAAK,GAAG,EAAE;QAChB,OAAO,cAAM,CAAC,eAAe,CAAC;KAC/B;IAED,IAAI,IAAI,KAAK,GAAG,EAAE;QAChB,OAAO,cAAM,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE;QAC7B,OAAO,cAAM,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,IAAI,IAAI,GAAG,EAAE;QACf,OAAO,cAAM,CAAC,MAAM,CAAC;KACtB;IAED,OAAO,cAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AA1BD,kDA0BC","sourcesContent":["import { Status } from '@amplitude/types';\n\n/**\n * Converts a HTTP status code into a {@link Status}.\n *\n * @param code The HTTP response status code.\n * @returns The send status or {@link Status.Unknown}.\n */\nexport function mapHttpCodeToStatus(code: number): Status {\n if (code >= 200 && code < 300) {\n return Status.Success;\n }\n\n if (code === 429) {\n return Status.RateLimit;\n }\n\n if (code === 413) {\n return Status.PayloadTooLarge;\n }\n\n if (code === 408) {\n return Status.Timeout;\n }\n\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n\n if (code >= 500) {\n return Status.Failed;\n }\n\n return Status.Unknown;\n}\n"]}

@@ -1,1 +0,1 @@

{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,eAAO,MAAM,YAAY,UAAW,KAAK,KAAG,OAyB3C,CAAC"}
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,eAAO,MAAM,YAAY,UAAW,KAAK,KAAG,OA+B3C,CAAC"}

@@ -11,2 +11,3 @@ Object.defineProperty(exports, "__esModule", { value: true });

var hasUserId = event.user_id !== undefined;
var hasEventProperties = event.event_properties !== undefined;
if (!hasDeviceId && !hasUserId) {

@@ -24,4 +25,8 @@ logger_1.logger.warn('Invalid event: expected at least one of device or user id');

}
if (hasEventProperties && typeof event.event_properties !== 'object') {
logger_1.logger.warn('Invalid event properties: expected event properties to be type object');
return false;
}
return true;
};
//# sourceMappingURL=validate.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":";;AACA,mCAAkC;AAErB,QAAA,YAAY,GAAG,UAAC,KAAY;IACvC,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE;QACxC,eAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC;KACd;IAED,IAAM,WAAW,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC;IAClD,IAAM,SAAS,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;IAE9C,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE;QAC9B,eAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;KACd;IAED,IAAI,WAAW,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE;QACtD,eAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,KAAK,CAAC;KACd;IAED,IAAI,SAAS,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;QAClD,eAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC","sourcesContent":["import { Event } from '@amplitude/types';\nimport { logger } from './logger';\n\nexport const isValidEvent = (event: Event): boolean => {\n if (typeof event.event_type !== 'string') {\n logger.warn('Invalid event: expected string for event_type field');\n return false;\n }\n\n const hasDeviceId = event.device_id !== undefined;\n const hasUserId = event.user_id !== undefined;\n\n if (!hasDeviceId && !hasUserId) {\n logger.warn('Invalid event: expected at least one of device or user id');\n return false;\n }\n\n if (hasDeviceId && typeof event.device_id !== 'string') {\n logger.warn('Invalid event: expected device id to be a string if present');\n return false;\n }\n\n if (hasUserId && typeof event.user_id !== 'string') {\n logger.warn('Invalid event: expected user id to be a string if present');\n return false;\n }\n\n return true;\n};\n"]}
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":";;AACA,mCAAkC;AAErB,QAAA,YAAY,GAAG,UAAC,KAAY;IACvC,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE;QACxC,eAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC;KACd;IAED,IAAM,WAAW,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC;IAClD,IAAM,SAAS,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;IAC9C,IAAM,kBAAkB,GAAG,KAAK,CAAC,gBAAgB,KAAK,SAAS,CAAC;IAEhE,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE;QAC9B,eAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;KACd;IAED,IAAI,WAAW,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE;QACtD,eAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,KAAK,CAAC;KACd;IAED,IAAI,SAAS,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;QAClD,eAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;KACd;IAED,IAAI,kBAAkB,IAAI,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,EAAE;QACpE,eAAM,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACrF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC","sourcesContent":["import { Event } from '@amplitude/types';\nimport { logger } from './logger';\n\nexport const isValidEvent = (event: Event): boolean => {\n if (typeof event.event_type !== 'string') {\n logger.warn('Invalid event: expected string for event_type field');\n return false;\n }\n\n const hasDeviceId = event.device_id !== undefined;\n const hasUserId = event.user_id !== undefined;\n const hasEventProperties = event.event_properties !== undefined;\n\n if (!hasDeviceId && !hasUserId) {\n logger.warn('Invalid event: expected at least one of device or user id');\n return false;\n }\n\n if (hasDeviceId && typeof event.device_id !== 'string') {\n logger.warn('Invalid event: expected device id to be a string if present');\n return false;\n }\n\n if (hasUserId && typeof event.user_id !== 'string') {\n logger.warn('Invalid event: expected user id to be a string if present');\n return false;\n }\n\n if (hasEventProperties && typeof event.event_properties !== 'object') {\n logger.warn('Invalid event properties: expected event properties to be type object');\n return false;\n }\n\n return true;\n};\n"]}

@@ -24,3 +24,3 @@ Object.defineProperty(exports, "__esModule", { value: true });

var e_1, _a;
if (typeof property != 'string')
if (typeof property !== 'string')
return false;

@@ -27,0 +27,0 @@ if (Array.isArray(value)) {

@@ -1,1 +0,1 @@

{"version":3,"file":"validateProperties.js","sourceRoot":"","sources":["../../src/validateProperties.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAClC,IAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,IAAM,cAAc,GAAG,UAAC,UAAkC;IACxD,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,iBAAiB,EAAE;QACtD,eAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;KACd;IACD,KAAK,IAAM,GAAG,IAAI,UAAU,EAAE;QAC5B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,eAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC;SACd;QACD,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;KAClD;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,IAAM,iBAAiB,GAAG,UAAC,QAAgB,EAAE,KAAU;;IACrD,IAAI,OAAO,QAAQ,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;YACxB,KAA2B,IAAA,UAAA,iBAAA,KAAK,CAAA,4BAAA,+CAAE;gBAA7B,IAAM,YAAY,kBAAA;gBACrB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAC/B,eAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,OAAO,YAAY,CAAC,CAAC;oBAChE,OAAO,KAAK,CAAC;iBACd;qBAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;oBAC3C,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;iBAC9B;qBAAM,IAAI,CAAC,CAAC,OAAO,YAAY,KAAK,QAAQ,IAAI,OAAO,YAAY,KAAK,QAAQ,CAAC,EAAE;oBAClF,eAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,OAAO,YAAY,CAAC,CAAC;oBAChE,OAAO,KAAK,CAAC;iBACd;aACF;;;;;;;;;KACF;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACpC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;KAC9B;SAAM,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE;QACpE,eAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,OAAO,KAAK,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACO,8CAAiB","sourcesContent":["import { logger } from './logger';\nconst MAX_PROPERTY_KEYS = 1000;\n\nconst _isValidObject = (properties: { [key: string]: any }): boolean => {\n if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n logger.warn('too many properties. Skipping operation');\n return false;\n }\n for (const key in properties) {\n if (typeof key !== 'string') {\n logger.warn('invalid properties format. Skipping operation');\n return false;\n }\n let value = properties[key];\n if (!isValidProperties(key, value)) return false;\n }\n return true;\n};\n\nconst isValidProperties = (property: string, value: any): boolean => {\n if (typeof property != 'string') return false;\n if (Array.isArray(value)) {\n for (const valueElement of value) {\n if (Array.isArray(valueElement)) {\n logger.warn('invalid array element type ', typeof valueElement);\n return false;\n } else if (typeof valueElement === 'object') {\n return _isValidObject(value);\n } else if (!(typeof valueElement === 'number' || typeof valueElement === 'string')) {\n logger.warn('invalid array element type ', typeof valueElement);\n return false;\n }\n }\n } else if (typeof value === 'object') {\n return _isValidObject(value);\n } else if (!(typeof value === 'number' || typeof value === 'string')) {\n logger.warn('invalid value type ', typeof value);\n return false;\n }\n return true;\n};\nexport { isValidProperties };\n"]}
{"version":3,"file":"validateProperties.js","sourceRoot":"","sources":["../../src/validateProperties.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAClC,IAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,IAAM,cAAc,GAAG,UAAC,UAAkC;IACxD,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,iBAAiB,EAAE;QACtD,eAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;KACd;IACD,KAAK,IAAM,GAAG,IAAI,UAAU,EAAE;QAC5B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,eAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC;SACd;QACD,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,IAAM,iBAAiB,GAAG,UAAC,QAAgB,EAAE,KAAU;;IACrD,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;YACxB,KAA2B,IAAA,UAAA,iBAAA,KAAK,CAAA,4BAAA,+CAAE;gBAA7B,IAAM,YAAY,kBAAA;gBACrB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAC/B,eAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,OAAO,YAAY,CAAC,CAAC;oBAChE,OAAO,KAAK,CAAC;iBACd;qBAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;oBAC3C,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;iBAC9B;qBAAM,IAAI,CAAC,CAAC,OAAO,YAAY,KAAK,QAAQ,IAAI,OAAO,YAAY,KAAK,QAAQ,CAAC,EAAE;oBAClF,eAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,OAAO,YAAY,CAAC,CAAC;oBAChE,OAAO,KAAK,CAAC;iBACd;aACF;;;;;;;;;KACF;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACpC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;KAC9B;SAAM,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE;QACpE,eAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,OAAO,KAAK,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACO,8CAAiB","sourcesContent":["import { logger } from './logger';\nconst MAX_PROPERTY_KEYS = 1000;\n\nconst _isValidObject = (properties: { [key: string]: any }): boolean => {\n if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n logger.warn('too many properties. Skipping operation');\n return false;\n }\n for (const key in properties) {\n if (typeof key !== 'string') {\n logger.warn('invalid properties format. Skipping operation');\n return false;\n }\n const value = properties[key];\n if (!isValidProperties(key, value)) return false;\n }\n return true;\n};\n\nconst isValidProperties = (property: string, value: any): boolean => {\n if (typeof property !== 'string') return false;\n if (Array.isArray(value)) {\n for (const valueElement of value) {\n if (Array.isArray(valueElement)) {\n logger.warn('invalid array element type ', typeof valueElement);\n return false;\n } else if (typeof valueElement === 'object') {\n return _isValidObject(value);\n } else if (!(typeof valueElement === 'number' || typeof valueElement === 'string')) {\n logger.warn('invalid array element type ', typeof valueElement);\n return false;\n }\n }\n } else if (typeof value === 'object') {\n return _isValidObject(value);\n } else if (!(typeof value === 'number' || typeof value === 'string')) {\n logger.warn('invalid value type ', typeof value);\n return false;\n }\n return true;\n};\nexport { isValidProperties };\n"]}

@@ -8,5 +8,5 @@ /**

private _promiseInProgress;
addToQueue<T = any>(promiseGenerator: () => Promise<T>, limitInMs?: number): Promise<T>;
addToQueue<T = any>(promiseGenerator: () => Promise<T>): Promise<T>;
private _notifyUploadFinish;
}
//# sourceMappingURL=queue.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/queue.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,kBAAkB,CAAS;IAKtB,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,SAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IA4C/F,OAAO,CAAC,mBAAmB;CAY5B"}
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/queue.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,kBAAkB,CAAS;IAKtB,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA+BhF,OAAO,CAAC,mBAAmB;CAQ5B"}

@@ -14,4 +14,3 @@ import { __awaiter, __generator } from "tslib";

// or never expire, if limit is not set
AsyncQueue.prototype.addToQueue = function (promiseGenerator, limitInMs) {
if (limitInMs === void 0) { limitInMs = 0; }
AsyncQueue.prototype.addToQueue = function (promiseGenerator) {
return __awaiter(this, void 0, void 0, function () {

@@ -57,15 +56,4 @@ var _this = this;

startPromise: startPromise,
cancellingTimeout: null,
};
_this._promiseQueue.push(queueObject);
// If the limit exists, set a timeout to remove the callback and reject the promise
if (limitInMs > 0) {
queueObject.cancellingTimeout = setTimeout(function () {
var callBackIndex = _this._promiseQueue.indexOf(queueObject);
if (callBackIndex > -1) {
_this._promiseQueue.splice(callBackIndex, 1);
reject(new Error());
}
}, limitInMs);
}
})];

@@ -82,6 +70,2 @@ case 1: return [2 /*return*/, _a.sent()];

if (oldestPromise !== undefined) {
if (oldestPromise.cancellingTimeout !== null) {
// Clear the timeout where we try to remove the callback and reject the promise.
clearTimeout(oldestPromise.cancellingTimeout);
}
// eslint-disable-next-line @typescript-eslint/no-floating-promises

@@ -88,0 +72,0 @@ oldestPromise.startPromise();

@@ -1,1 +0,1 @@

{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue.ts"],"names":[],"mappings":";AAQA;;;GAGG;AACH;IAAA;QACmB,kBAAa,GAAkB,EAAE,CAAC;QAC3C,uBAAkB,GAAG,KAAK,CAAC;IA6DrC,CAAC;IA3DC,uEAAuE;IACvE,qEAAqE;IACrE,uCAAuC;IAC1B,+BAAU,GAAvB,UAAiC,gBAAkC,EAAE,SAAa;QAAb,0BAAA,EAAA,aAAa;;;;;4BACzE,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;4BACvC,sDAAsD;4BACtD,IAAM,YAAY,GAAG;;;;;4CACnB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;;;;4CAEhB,qBAAM,gBAAgB,EAAE,EAAA;;4CAA/B,IAAI,GAAG,SAAwB;4CACrC,OAAO,CAAC,IAAI,CAAC,CAAC;;;;4CAEd,MAAM,CAAC,KAAG,CAAC,CAAC;;;4CAEZ,IAAI,CAAC,mBAAmB,EAAE,CAAC;;;;;iCAE9B,CAAC;4BAEF,qCAAqC;4BACrC,qBAAqB;4BACrB,IAAI,CAAC,KAAI,CAAC,kBAAkB,EAAE;gCAC5B,mEAAmE;gCACnE,YAAY,EAAE,CAAC;gCACf,OAAO;6BACR;4BAED,IAAM,WAAW,GAAgB;gCAC/B,YAAY,cAAA;gCACZ,iBAAiB,EAAE,IAAI;6BACxB,CAAC;4BACF,KAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;4BAErC,mFAAmF;4BACnF,IAAI,SAAS,GAAG,CAAC,EAAE;gCACjB,WAAW,CAAC,iBAAiB,GAAG,UAAU,CAAC;oCACzC,IAAM,aAAa,GAAG,KAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oCAE9D,IAAI,aAAa,GAAG,CAAC,CAAC,EAAE;wCACtB,KAAI,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;wCAC5C,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;qCACrB;gCACH,CAAC,EAAE,SAAS,CAAC,CAAC;6BACf;wBACH,CAAC,CAAC,EAAA;4BAvCF,sBAAO,SAuCL,EAAC;;;;KACJ;IAED,wFAAwF;IAChF,wCAAmB,GAA3B;QACE,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACjD,IAAI,aAAa,KAAK,SAAS,EAAE;YAC/B,IAAI,aAAa,CAAC,iBAAiB,KAAK,IAAI,EAAE;gBAC5C,gFAAgF;gBAChF,YAAY,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;aAC/C;YACD,mEAAmE;YACnE,aAAa,CAAC,YAAY,EAAE,CAAC;SAC9B;IACH,CAAC;IACH,iBAAC;AAAD,CAAC,AA/DD,IA+DC","sourcesContent":["interface QueueObject {\n // The callback used to start the promise\n startPromise: () => Promise<void>;\n // If the promise is meant to expire after some time, this is the associated Timeout\n // Meant to be canceled if the promise is started.\n cancellingTimeout: NodeJS.Timeout | null;\n}\n\n/**\n * Helper utility that processes promises one by one in the order they arrive,\n * with an optional time-out value.\n */\nexport class AsyncQueue {\n private readonly _promiseQueue: QueueObject[] = [];\n private _promiseInProgress = false;\n\n // Awaits the finish of all promises that have been queued up before it\n // And will expire itself (reject the promise) after waiting limit ms\n // or never expire, if limit is not set\n public async addToQueue<T = any>(promiseGenerator: () => Promise<T>, limitInMs = 0): Promise<T> {\n return await new Promise((resolve, reject) => {\n // The callback that will start the promise resolution\n const startPromise = async (): Promise<void> => {\n this._promiseInProgress = true;\n try {\n const resp = await promiseGenerator();\n resolve(resp);\n } catch (err) {\n reject(err);\n } finally {\n this._notifyUploadFinish();\n }\n };\n\n // If there is no promise in progress\n // Return immediately\n if (!this._promiseInProgress) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n startPromise();\n return;\n }\n\n const queueObject: QueueObject = {\n startPromise,\n cancellingTimeout: null,\n };\n this._promiseQueue.push(queueObject);\n\n // If the limit exists, set a timeout to remove the callback and reject the promise\n if (limitInMs > 0) {\n queueObject.cancellingTimeout = setTimeout(() => {\n const callBackIndex = this._promiseQueue.indexOf(queueObject);\n\n if (callBackIndex > -1) {\n this._promiseQueue.splice(callBackIndex, 1);\n reject(new Error());\n }\n }, limitInMs);\n }\n });\n }\n\n // Notify the oldest awaiting promise that the queue is ready to process another promise\n private _notifyUploadFinish(): void {\n this._promiseInProgress = false;\n const oldestPromise = this._promiseQueue.shift();\n if (oldestPromise !== undefined) {\n if (oldestPromise.cancellingTimeout !== null) {\n // Clear the timeout where we try to remove the callback and reject the promise.\n clearTimeout(oldestPromise.cancellingTimeout);\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n oldestPromise.startPromise();\n }\n }\n}\n"]}
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue.ts"],"names":[],"mappings":";AAKA;;;GAGG;AACH;IAAA;QACmB,kBAAa,GAAkB,EAAE,CAAC;QAC3C,uBAAkB,GAAG,KAAK,CAAC;IA4CrC,CAAC;IA1CC,uEAAuE;IACvE,qEAAqE;IACrE,uCAAuC;IAC1B,+BAAU,GAAvB,UAAiC,gBAAkC;;;;;4BAC1D,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;4BACvC,sDAAsD;4BACtD,IAAM,YAAY,GAAG;;;;;4CACnB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;;;;4CAEhB,qBAAM,gBAAgB,EAAE,EAAA;;4CAA/B,IAAI,GAAG,SAAwB;4CACrC,OAAO,CAAC,IAAI,CAAC,CAAC;;;;4CAEd,MAAM,CAAC,KAAG,CAAC,CAAC;;;4CAEZ,IAAI,CAAC,mBAAmB,EAAE,CAAC;;;;;iCAE9B,CAAC;4BAEF,qCAAqC;4BACrC,qBAAqB;4BACrB,IAAI,CAAC,KAAI,CAAC,kBAAkB,EAAE;gCAC5B,mEAAmE;gCACnE,YAAY,EAAE,CAAC;gCACf,OAAO;6BACR;4BAED,IAAM,WAAW,GAAgB;gCAC/B,YAAY,cAAA;6BACb,CAAC;4BACF,KAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBACvC,CAAC,CAAC,EAAA;4BA1BF,sBAAO,SA0BL,EAAC;;;;KACJ;IAED,wFAAwF;IAChF,wCAAmB,GAA3B;QACE,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACjD,IAAI,aAAa,KAAK,SAAS,EAAE;YAC/B,mEAAmE;YACnE,aAAa,CAAC,YAAY,EAAE,CAAC;SAC9B;IACH,CAAC;IACH,iBAAC;AAAD,CAAC,AA9CD,IA8CC","sourcesContent":["interface QueueObject {\n // The callback used to start the promise\n startPromise: () => Promise<void>;\n}\n\n/**\n * Helper utility that processes promises one by one in the order they arrive,\n * with an optional time-out value.\n */\nexport class AsyncQueue {\n private readonly _promiseQueue: QueueObject[] = [];\n private _promiseInProgress = false;\n\n // Awaits the finish of all promises that have been queued up before it\n // And will expire itself (reject the promise) after waiting limit ms\n // or never expire, if limit is not set\n public async addToQueue<T = any>(promiseGenerator: () => Promise<T>): Promise<T> {\n return await new Promise((resolve, reject) => {\n // The callback that will start the promise resolution\n const startPromise = async (): Promise<void> => {\n this._promiseInProgress = true;\n try {\n const resp = await promiseGenerator();\n resolve(resp);\n } catch (err) {\n reject(err);\n } finally {\n this._notifyUploadFinish();\n }\n };\n\n // If there is no promise in progress\n // Return immediately\n if (!this._promiseInProgress) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n startPromise();\n return;\n }\n\n const queueObject: QueueObject = {\n startPromise,\n };\n this._promiseQueue.push(queueObject);\n });\n }\n\n // Notify the oldest awaiting promise that the queue is ready to process another promise\n private _notifyUploadFinish(): void {\n this._promiseInProgress = false;\n const oldestPromise = this._promiseQueue.shift();\n if (oldestPromise !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n oldestPromise.startPromise();\n }\n }\n}\n"]}

@@ -1,1 +0,1 @@

{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAGvC;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,aAAc,QAAQ,KAAG,MAAM,EAmBrE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,YAAa,eAAe,KAAG,QAQnE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,iBAAkB,GAAG,KAAG,QAAQ,GAAG,IA2DhE,CAAC"}
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAGvC;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,aAAc,QAAQ,KAAG,MAAM,EAmBrE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,YAAa,eAAe,KAAG,QAQnE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,iBAAkB,GAAG,KAAG,QAAQ,GAAG,IA4DhE,CAAC"}

@@ -103,2 +103,3 @@ import { Status } from '@amplitude/types';

};
case Status.Timeout:
default:

@@ -105,0 +106,0 @@ return {

@@ -1,1 +0,1 @@

{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/response.ts"],"names":[],"mappings":"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","sourcesContent":["import { Response, Status } from '@amplitude/types';\nimport { IncomingMessage } from 'http';\nimport { mapHttpCodeToStatus } from './status';\n\n/**\n * Collects the invalid event indices off a HTTP API v2 response\n * and returns them in increasing order.\n *\n * @param response A Response from sending an event payload\n * @returns An concatenated array of indices\n */\nexport const collectInvalidEventIndices = (response: Response): number[] => {\n const invalidEventIndices = new Set<number>();\n if (response.status === Status.Invalid && response.body !== undefined) {\n const { eventsWithInvalidFields, eventsWithMissingFields } = response.body;\n Object.keys(eventsWithInvalidFields).forEach((field: string) => {\n const eventIndices = eventsWithInvalidFields[field] ?? [];\n eventIndices.forEach((index: number) => {\n invalidEventIndices.add(index);\n });\n });\n Object.keys(eventsWithMissingFields).forEach((field: string) => {\n const eventIndices = eventsWithMissingFields[field] ?? [];\n eventIndices.forEach((index: number) => {\n invalidEventIndices.add(index);\n });\n });\n }\n\n return Array.from(invalidEventIndices).sort((numberOne, numberTwo) => numberOne - numberTwo);\n};\n\n/**\n * Converts a http.IncomingMessage object into a Response object.\n *\n * @param httpRes The http response from the HTTP API.\n * @returns Response a nicely typed and cased response object.\n */\nexport const mapHttpMessageToResponse = (httpRes: IncomingMessage): Response => {\n const statusCode = httpRes.statusCode === undefined ? 0 : httpRes.statusCode;\n const status = mapHttpCodeToStatus(statusCode);\n\n return {\n status,\n statusCode,\n };\n};\n\n/**\n * Converts the response from the HTTP V2 API into a Response object.\n * Should be used only if we are pointed towards the v2 api.\n *\n * @param responseJSON The response body from the HTTP V2 API, as a JSON blob\n * @returns Response a nicely typed and cased response object.\n */\nexport const mapJSONToResponse = (responseJSON: any): Response | null => {\n if (typeof responseJSON !== 'object') {\n return null;\n }\n\n const status = mapHttpCodeToStatus(responseJSON.code);\n const statusCode = responseJSON.code;\n\n switch (status) {\n case Status.Success:\n return {\n status,\n statusCode,\n body: {\n eventsIngested: responseJSON.events_ingested,\n payloadSizeBytes: responseJSON.payload_size_bytes,\n serverUploadTime: responseJSON.server_upload_time,\n },\n };\n\n case Status.Invalid:\n return {\n status,\n statusCode,\n body: {\n error: responseJSON.error ?? '',\n missingField: responseJSON.missing_field ?? null,\n eventsWithInvalidFields: responseJSON.events_with_invalid_fields ?? {},\n eventsWithMissingFields: responseJSON.events_with_missing_fields ?? {},\n },\n };\n case Status.PayloadTooLarge:\n return {\n status,\n statusCode,\n body: {\n error: responseJSON.error ?? '',\n },\n };\n case Status.RateLimit:\n return {\n status,\n statusCode,\n body: {\n error: responseJSON.error ?? '',\n epsThreshold: responseJSON.eps_threshold,\n throttledDevices: responseJSON.throttled_devices ?? {},\n throttledUsers: responseJSON.throttled_users ?? {},\n exceededDailyQuotaDevices: responseJSON.exceeded_daily_quota_devices ?? {},\n exceededDailyQuotaUsers: responseJSON.exceeded_daily_quota_users ?? {},\n throttledEvents: responseJSON.throttled_events ?? [],\n },\n };\n default:\n return {\n status,\n statusCode,\n };\n }\n};\n"]}
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/response.ts"],"names":[],"mappings":"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","sourcesContent":["import { Response, Status } from '@amplitude/types';\nimport { IncomingMessage } from 'http';\nimport { mapHttpCodeToStatus } from './status';\n\n/**\n * Collects the invalid event indices off a HTTP API v2 response\n * and returns them in increasing order.\n *\n * @param response A Response from sending an event payload\n * @returns An concatenated array of indices\n */\nexport const collectInvalidEventIndices = (response: Response): number[] => {\n const invalidEventIndices = new Set<number>();\n if (response.status === Status.Invalid && response.body !== undefined) {\n const { eventsWithInvalidFields, eventsWithMissingFields } = response.body;\n Object.keys(eventsWithInvalidFields).forEach((field: string) => {\n const eventIndices = eventsWithInvalidFields[field] ?? [];\n eventIndices.forEach((index: number) => {\n invalidEventIndices.add(index);\n });\n });\n Object.keys(eventsWithMissingFields).forEach((field: string) => {\n const eventIndices = eventsWithMissingFields[field] ?? [];\n eventIndices.forEach((index: number) => {\n invalidEventIndices.add(index);\n });\n });\n }\n\n return Array.from(invalidEventIndices).sort((numberOne, numberTwo) => numberOne - numberTwo);\n};\n\n/**\n * Converts a http.IncomingMessage object into a Response object.\n *\n * @param httpRes The http response from the HTTP API.\n * @returns Response a nicely typed and cased response object.\n */\nexport const mapHttpMessageToResponse = (httpRes: IncomingMessage): Response => {\n const statusCode = httpRes.statusCode === undefined ? 0 : httpRes.statusCode;\n const status = mapHttpCodeToStatus(statusCode);\n\n return {\n status,\n statusCode,\n };\n};\n\n/**\n * Converts the response from the HTTP V2 API into a Response object.\n * Should be used only if we are pointed towards the v2 api.\n *\n * @param responseJSON The response body from the HTTP V2 API, as a JSON blob\n * @returns Response a nicely typed and cased response object.\n */\nexport const mapJSONToResponse = (responseJSON: any): Response | null => {\n if (typeof responseJSON !== 'object') {\n return null;\n }\n\n const status = mapHttpCodeToStatus(responseJSON.code);\n const statusCode = responseJSON.code;\n\n switch (status) {\n case Status.Success:\n return {\n status,\n statusCode,\n body: {\n eventsIngested: responseJSON.events_ingested,\n payloadSizeBytes: responseJSON.payload_size_bytes,\n serverUploadTime: responseJSON.server_upload_time,\n },\n };\n\n case Status.Invalid:\n return {\n status,\n statusCode,\n body: {\n error: responseJSON.error ?? '',\n missingField: responseJSON.missing_field ?? null,\n eventsWithInvalidFields: responseJSON.events_with_invalid_fields ?? {},\n eventsWithMissingFields: responseJSON.events_with_missing_fields ?? {},\n },\n };\n case Status.PayloadTooLarge:\n return {\n status,\n statusCode,\n body: {\n error: responseJSON.error ?? '',\n },\n };\n case Status.RateLimit:\n return {\n status,\n statusCode,\n body: {\n error: responseJSON.error ?? '',\n epsThreshold: responseJSON.eps_threshold,\n throttledDevices: responseJSON.throttled_devices ?? {},\n throttledUsers: responseJSON.throttled_users ?? {},\n exceededDailyQuotaDevices: responseJSON.exceeded_daily_quota_devices ?? {},\n exceededDailyQuotaUsers: responseJSON.exceeded_daily_quota_users ?? {},\n throttledEvents: responseJSON.throttled_events ?? [],\n },\n };\n case Status.Timeout:\n default:\n return {\n status,\n statusCode,\n };\n }\n};\n"]}

@@ -1,1 +0,1 @@

{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAsBxD"}
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0BxD"}

@@ -18,2 +18,5 @@ import { Status } from '@amplitude/types';

}
if (code === 408) {
return Status.Timeout;
}
if (code >= 400 && code < 500) {

@@ -20,0 +23,0 @@ return Status.Invalid;

@@ -1,1 +0,1 @@

{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE;QAC7B,OAAO,MAAM,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,IAAI,KAAK,GAAG,EAAE;QAChB,OAAO,MAAM,CAAC,SAAS,CAAC;KACzB;IAED,IAAI,IAAI,KAAK,GAAG,EAAE;QAChB,OAAO,MAAM,CAAC,eAAe,CAAC;KAC/B;IAED,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE;QAC7B,OAAO,MAAM,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,IAAI,IAAI,GAAG,EAAE;QACf,OAAO,MAAM,CAAC,MAAM,CAAC;KACtB;IAED,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC","sourcesContent":["import { Status } from '@amplitude/types';\n\n/**\n * Converts a HTTP status code into a {@link Status}.\n *\n * @param code The HTTP response status code.\n * @returns The send status or {@link Status.Unknown}.\n */\nexport function mapHttpCodeToStatus(code: number): Status {\n if (code >= 200 && code < 300) {\n return Status.Success;\n }\n\n if (code === 429) {\n return Status.RateLimit;\n }\n\n if (code === 413) {\n return Status.PayloadTooLarge;\n }\n\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n\n if (code >= 500) {\n return Status.Failed;\n }\n\n return Status.Unknown;\n}\n"]}
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE;QAC7B,OAAO,MAAM,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,IAAI,KAAK,GAAG,EAAE;QAChB,OAAO,MAAM,CAAC,SAAS,CAAC;KACzB;IAED,IAAI,IAAI,KAAK,GAAG,EAAE;QAChB,OAAO,MAAM,CAAC,eAAe,CAAC;KAC/B;IAED,IAAI,IAAI,KAAK,GAAG,EAAE;QAChB,OAAO,MAAM,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE;QAC7B,OAAO,MAAM,CAAC,OAAO,CAAC;KACvB;IAED,IAAI,IAAI,IAAI,GAAG,EAAE;QACf,OAAO,MAAM,CAAC,MAAM,CAAC;KACtB;IAED,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC","sourcesContent":["import { Status } from '@amplitude/types';\n\n/**\n * Converts a HTTP status code into a {@link Status}.\n *\n * @param code The HTTP response status code.\n * @returns The send status or {@link Status.Unknown}.\n */\nexport function mapHttpCodeToStatus(code: number): Status {\n if (code >= 200 && code < 300) {\n return Status.Success;\n }\n\n if (code === 429) {\n return Status.RateLimit;\n }\n\n if (code === 413) {\n return Status.PayloadTooLarge;\n }\n\n if (code === 408) {\n return Status.Timeout;\n }\n\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n\n if (code >= 500) {\n return Status.Failed;\n }\n\n return Status.Unknown;\n}\n"]}

@@ -1,1 +0,1 @@

{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,eAAO,MAAM,YAAY,UAAW,KAAK,KAAG,OAyB3C,CAAC"}
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,eAAO,MAAM,YAAY,UAAW,KAAK,KAAG,OA+B3C,CAAC"}

@@ -9,2 +9,3 @@ import { logger } from './logger';

var hasUserId = event.user_id !== undefined;
var hasEventProperties = event.event_properties !== undefined;
if (!hasDeviceId && !hasUserId) {

@@ -22,4 +23,8 @@ logger.warn('Invalid event: expected at least one of device or user id');

}
if (hasEventProperties && typeof event.event_properties !== 'object') {
logger.warn('Invalid event properties: expected event properties to be type object');
return false;
}
return true;
};
//# sourceMappingURL=validate.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,CAAC,IAAM,YAAY,GAAG,UAAC,KAAY;IACvC,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE;QACxC,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC;KACd;IAED,IAAM,WAAW,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC;IAClD,IAAM,SAAS,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;IAE9C,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE;QAC9B,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;KACd;IAED,IAAI,WAAW,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE;QACtD,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,KAAK,CAAC;KACd;IAED,IAAI,SAAS,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;QAClD,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC","sourcesContent":["import { Event } from '@amplitude/types';\nimport { logger } from './logger';\n\nexport const isValidEvent = (event: Event): boolean => {\n if (typeof event.event_type !== 'string') {\n logger.warn('Invalid event: expected string for event_type field');\n return false;\n }\n\n const hasDeviceId = event.device_id !== undefined;\n const hasUserId = event.user_id !== undefined;\n\n if (!hasDeviceId && !hasUserId) {\n logger.warn('Invalid event: expected at least one of device or user id');\n return false;\n }\n\n if (hasDeviceId && typeof event.device_id !== 'string') {\n logger.warn('Invalid event: expected device id to be a string if present');\n return false;\n }\n\n if (hasUserId && typeof event.user_id !== 'string') {\n logger.warn('Invalid event: expected user id to be a string if present');\n return false;\n }\n\n return true;\n};\n"]}
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,CAAC,IAAM,YAAY,GAAG,UAAC,KAAY;IACvC,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE;QACxC,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC;KACd;IAED,IAAM,WAAW,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC;IAClD,IAAM,SAAS,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;IAC9C,IAAM,kBAAkB,GAAG,KAAK,CAAC,gBAAgB,KAAK,SAAS,CAAC;IAEhE,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE;QAC9B,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;KACd;IAED,IAAI,WAAW,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE;QACtD,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,KAAK,CAAC;KACd;IAED,IAAI,SAAS,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;QAClD,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;KACd;IAED,IAAI,kBAAkB,IAAI,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,EAAE;QACpE,MAAM,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACrF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC","sourcesContent":["import { Event } from '@amplitude/types';\nimport { logger } from './logger';\n\nexport const isValidEvent = (event: Event): boolean => {\n if (typeof event.event_type !== 'string') {\n logger.warn('Invalid event: expected string for event_type field');\n return false;\n }\n\n const hasDeviceId = event.device_id !== undefined;\n const hasUserId = event.user_id !== undefined;\n const hasEventProperties = event.event_properties !== undefined;\n\n if (!hasDeviceId && !hasUserId) {\n logger.warn('Invalid event: expected at least one of device or user id');\n return false;\n }\n\n if (hasDeviceId && typeof event.device_id !== 'string') {\n logger.warn('Invalid event: expected device id to be a string if present');\n return false;\n }\n\n if (hasUserId && typeof event.user_id !== 'string') {\n logger.warn('Invalid event: expected user id to be a string if present');\n return false;\n }\n\n if (hasEventProperties && typeof event.event_properties !== 'object') {\n logger.warn('Invalid event properties: expected event properties to be type object');\n return false;\n }\n\n return true;\n};\n"]}

@@ -22,3 +22,3 @@ import { __values } from "tslib";

var e_1, _a;
if (typeof property != 'string')
if (typeof property !== 'string')
return false;

@@ -25,0 +25,0 @@ if (Array.isArray(value)) {

@@ -1,1 +0,1 @@

{"version":3,"file":"validateProperties.js","sourceRoot":"","sources":["../../src/validateProperties.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,IAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,IAAM,cAAc,GAAG,UAAC,UAAkC;IACxD,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,iBAAiB,EAAE;QACtD,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;KACd;IACD,KAAK,IAAM,GAAG,IAAI,UAAU,EAAE;QAC5B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC;SACd;QACD,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;KAClD;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,IAAM,iBAAiB,GAAG,UAAC,QAAgB,EAAE,KAAU;;IACrD,IAAI,OAAO,QAAQ,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;YACxB,KAA2B,IAAA,UAAA,SAAA,KAAK,CAAA,4BAAA,+CAAE;gBAA7B,IAAM,YAAY,kBAAA;gBACrB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAC/B,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,OAAO,YAAY,CAAC,CAAC;oBAChE,OAAO,KAAK,CAAC;iBACd;qBAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;oBAC3C,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;iBAC9B;qBAAM,IAAI,CAAC,CAAC,OAAO,YAAY,KAAK,QAAQ,IAAI,OAAO,YAAY,KAAK,QAAQ,CAAC,EAAE;oBAClF,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,OAAO,YAAY,CAAC,CAAC;oBAChE,OAAO,KAAK,CAAC;iBACd;aACF;;;;;;;;;KACF;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACpC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;KAC9B;SAAM,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE;QACpE,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,OAAO,KAAK,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import { logger } from './logger';\nconst MAX_PROPERTY_KEYS = 1000;\n\nconst _isValidObject = (properties: { [key: string]: any }): boolean => {\n if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n logger.warn('too many properties. Skipping operation');\n return false;\n }\n for (const key in properties) {\n if (typeof key !== 'string') {\n logger.warn('invalid properties format. Skipping operation');\n return false;\n }\n let value = properties[key];\n if (!isValidProperties(key, value)) return false;\n }\n return true;\n};\n\nconst isValidProperties = (property: string, value: any): boolean => {\n if (typeof property != 'string') return false;\n if (Array.isArray(value)) {\n for (const valueElement of value) {\n if (Array.isArray(valueElement)) {\n logger.warn('invalid array element type ', typeof valueElement);\n return false;\n } else if (typeof valueElement === 'object') {\n return _isValidObject(value);\n } else if (!(typeof valueElement === 'number' || typeof valueElement === 'string')) {\n logger.warn('invalid array element type ', typeof valueElement);\n return false;\n }\n }\n } else if (typeof value === 'object') {\n return _isValidObject(value);\n } else if (!(typeof value === 'number' || typeof value === 'string')) {\n logger.warn('invalid value type ', typeof value);\n return false;\n }\n return true;\n};\nexport { isValidProperties };\n"]}
{"version":3,"file":"validateProperties.js","sourceRoot":"","sources":["../../src/validateProperties.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,IAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,IAAM,cAAc,GAAG,UAAC,UAAkC;IACxD,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,iBAAiB,EAAE;QACtD,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;KACd;IACD,KAAK,IAAM,GAAG,IAAI,UAAU,EAAE;QAC5B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC;SACd;QACD,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,IAAM,iBAAiB,GAAG,UAAC,QAAgB,EAAE,KAAU;;IACrD,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;YACxB,KAA2B,IAAA,UAAA,SAAA,KAAK,CAAA,4BAAA,+CAAE;gBAA7B,IAAM,YAAY,kBAAA;gBACrB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAC/B,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,OAAO,YAAY,CAAC,CAAC;oBAChE,OAAO,KAAK,CAAC;iBACd;qBAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;oBAC3C,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;iBAC9B;qBAAM,IAAI,CAAC,CAAC,OAAO,YAAY,KAAK,QAAQ,IAAI,OAAO,YAAY,KAAK,QAAQ,CAAC,EAAE;oBAClF,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,OAAO,YAAY,CAAC,CAAC;oBAChE,OAAO,KAAK,CAAC;iBACd;aACF;;;;;;;;;KACF;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACpC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;KAC9B;SAAM,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE;QACpE,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,OAAO,KAAK,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import { logger } from './logger';\nconst MAX_PROPERTY_KEYS = 1000;\n\nconst _isValidObject = (properties: { [key: string]: any }): boolean => {\n if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n logger.warn('too many properties. Skipping operation');\n return false;\n }\n for (const key in properties) {\n if (typeof key !== 'string') {\n logger.warn('invalid properties format. Skipping operation');\n return false;\n }\n const value = properties[key];\n if (!isValidProperties(key, value)) return false;\n }\n return true;\n};\n\nconst isValidProperties = (property: string, value: any): boolean => {\n if (typeof property !== 'string') return false;\n if (Array.isArray(value)) {\n for (const valueElement of value) {\n if (Array.isArray(valueElement)) {\n logger.warn('invalid array element type ', typeof valueElement);\n return false;\n } else if (typeof valueElement === 'object') {\n return _isValidObject(value);\n } else if (!(typeof valueElement === 'number' || typeof valueElement === 'string')) {\n logger.warn('invalid array element type ', typeof valueElement);\n return false;\n }\n }\n } else if (typeof value === 'object') {\n return _isValidObject(value);\n } else if (!(typeof value === 'number' || typeof value === 'string')) {\n logger.warn('invalid value type ', typeof value);\n return false;\n }\n return true;\n};\nexport { isValidProperties };\n"]}
{
"name": "@amplitude/utils",
"version": "1.5.3",
"version": "1.5.4",
"description": "Utility functions for the Amplitude JavaScript SDK",

@@ -19,7 +19,7 @@ "repository": "git://github.com/amplitude/Amplitude-Node.git",

"dependencies": {
"@amplitude/types": "^1.5.3",
"@amplitude/types": "^1.5.4",
"tslib": "^1.9.3"
},
"devDependencies": {
"@amplitude/eslint-config-typescript": "^1.3.0",
"@amplitude/eslint-config-typescript": "^1.5.4",
"@types/jest": "^26.0.14",

@@ -52,3 +52,3 @@ "@types/jsdom": "^16.2.5",

"sideEffects": false,
"gitHead": "baa59364b3567af99438b3985a19d15ebba09378"
"gitHead": "46fced588f3a644993cc693501ee8755c8a6d89a"
}