@amplitude/utils
Advanced tools
@@ -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"} |
+1
-17
@@ -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"} |
+1
-17
@@ -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"]} |
+4
-4
| { | ||
| "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" | ||
| } |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
2
-33.33%107864
-2.6%1170
-1.18%Updated