@frontegg/client
Advanced tools
Comparing version 1.1.1 to 1.1.2
import { channelTypes, ITriggerOptions } from './types'; | ||
import { IEventStatuses, IEventStatusesResponse } from './types/EventStatuses.interface'; | ||
export declare type EventStatusCallback = (error: Error | undefined, status: IEventStatusesResponse | undefined) => any; | ||
export declare class EventsClient { | ||
@@ -9,3 +11,7 @@ private authenticator; | ||
triggerEvent(eventKey: string, metadata: object, channels: channelTypes[] | channelTypes, tenantId: string): Promise<any>; | ||
trigger(options: ITriggerOptions): Promise<void>; | ||
trigger(options: ITriggerOptions, callback?: EventStatusCallback): Promise<{ | ||
eventId: string; | ||
}>; | ||
triggerAsync(options: ITriggerOptions): Promise<IEventStatuses>; | ||
private pollEventStatus; | ||
} |
"use strict"; | ||
var __assign = (this && this.__assign) || function () { | ||
__assign = Object.assign || function(t) { | ||
for (var s, i = 1, n = arguments.length; i < n; i++) { | ||
s = arguments[i]; | ||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) | ||
t[p] = s[p]; | ||
} | ||
return t; | ||
}; | ||
return __assign.apply(this, arguments); | ||
}; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
@@ -42,2 +53,6 @@ return new (P || (P = Promise))(function (resolve, reject) { | ||
var logger_1 = require("../helpers/logger"); | ||
var sleep_1 = require("../utils/sleep"); | ||
var POLLING_LIMIT = 20; | ||
var POLLING_START_TIMEOUT = 3 * 1000; | ||
var POLLING_INCREASE_PERCENTAGE = 1.2; | ||
var EventsClient = /** @class */ (function () { | ||
@@ -121,3 +136,3 @@ function EventsClient() { | ||
}; | ||
EventsClient.prototype.trigger = function (options) { | ||
EventsClient.prototype.trigger = function (options, callback) { | ||
return __awaiter(this, void 0, void 0, function () { | ||
@@ -150,3 +165,3 @@ var response, e_2; | ||
case 1: | ||
_a.trys.push([1, 4, , 5]); | ||
_a.trys.push([1, 6, , 7]); | ||
logger_1.default.info('going to trigger event'); | ||
@@ -169,8 +184,14 @@ return [4 /*yield*/, this.authenticator.validateAuthentication()]; | ||
logger_1.default.info('triggered event successfully'); | ||
return [2 /*return*/, response.data]; | ||
if (!callback) return [3 /*break*/, 5]; | ||
logger_1.default.info('found callback, will poll for event status'); | ||
return [4 /*yield*/, this.pollEventStatus(response.data.eventId, callback)]; | ||
case 4: | ||
_a.sent(); | ||
_a.label = 5; | ||
case 5: return [2 /*return*/, response.data]; | ||
case 6: | ||
e_2 = _a.sent(); | ||
logger_1.default.error('failed to trigger event ', e_2); | ||
throw e_2; | ||
case 5: return [2 /*return*/]; | ||
case 7: return [2 /*return*/]; | ||
} | ||
@@ -180,2 +201,90 @@ }); | ||
}; | ||
EventsClient.prototype.triggerAsync = function (options) { | ||
return __awaiter(this, void 0, void 0, function () { | ||
var _this = this; | ||
return __generator(this, function (_a) { | ||
return [2 /*return*/, new Promise(function (resolve) { | ||
_this.trigger(options, function (error, status) { | ||
if (error) { | ||
throw error; | ||
} | ||
resolve(status); | ||
}); | ||
})]; | ||
}); | ||
}); | ||
}; | ||
EventsClient.prototype.pollEventStatus = function (eventId, callback) { | ||
return __awaiter(this, void 0, void 0, function () { | ||
var intervalCounter, time, getStatus, response, isThereStatusPending, allSucceeded, callbackResponse, callbackResponse, e_3; | ||
var _this = this; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
intervalCounter = 0; | ||
time = POLLING_START_TIMEOUT; | ||
getStatus = function () { return __awaiter(_this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4 /*yield*/, this.authenticator.validateAuthentication()]; | ||
case 1: | ||
_a.sent(); | ||
return [2 /*return*/, axios_1.default.get(config_1.config.urls.eventService + "/resources/triggers/v2/statuses/" + eventId, { | ||
headers: { | ||
'x-access-token': this.authenticator.accessToken, | ||
}, | ||
})]; | ||
} | ||
}); | ||
}); }; | ||
_a.label = 1; | ||
case 1: | ||
if (!(intervalCounter <= 20)) return [3 /*break*/, 7]; | ||
return [4 /*yield*/, sleep_1.sleep(time)]; | ||
case 2: | ||
_a.sent(); | ||
time = time * POLLING_INCREASE_PERCENTAGE; | ||
intervalCounter++; | ||
_a.label = 3; | ||
case 3: | ||
_a.trys.push([3, 5, , 6]); | ||
return [4 /*yield*/, getStatus()]; | ||
case 4: | ||
response = _a.sent(); | ||
isThereStatusPending = Object.values(response.data.channels).some(function (_a) { | ||
var status = _a.status; | ||
return status === 'PENDING'; | ||
}); | ||
if (isThereStatusPending) { | ||
logger_1.default.info('there are still channels with pending status'); | ||
intervalCounter++; | ||
} | ||
else { | ||
logger_1.default.info('all channels statuses are not pending, will call callback'); | ||
allSucceeded = Object.values(response.data.channels).every(function (_a) { | ||
var status = _a.status; | ||
return status === 'SUCCEEDED'; | ||
}); | ||
callbackResponse = __assign({}, response.data, { generalStatus: allSucceeded ? 'SUCCEEDED' : 'FAILED' }); | ||
callback(undefined, callbackResponse); | ||
return [3 /*break*/, 7]; | ||
} | ||
if (intervalCounter >= POLLING_LIMIT) { | ||
logger_1.default.info('there are still channels with pending status, but we passed the limit of the polling'); | ||
callbackResponse = __assign({}, response.data, { generalStatus: 'FAILED' }); | ||
callback(undefined, callbackResponse); | ||
return [3 /*break*/, 7]; | ||
} | ||
return [3 /*break*/, 6]; | ||
case 5: | ||
e_3 = _a.sent(); | ||
logger_1.default.error('could not get event status', e_3); | ||
callback(e_3, undefined); | ||
return [3 /*break*/, 7]; | ||
case 6: return [3 /*break*/, 1]; | ||
case 7: return [2 /*return*/]; | ||
} | ||
}); | ||
}); | ||
}; | ||
return EventsClient; | ||
@@ -182,0 +291,0 @@ }()); |
{ | ||
"name": "@frontegg/client", | ||
"version": "1.1.1", | ||
"version": "1.1.2", | ||
"description": "Frontegg Javascript Library for backend", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
Sorry, the diff of this file is not supported yet
220381
102
3296