@almaviacx/gge-toolkit-service 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1 +1,6 @@
1
1
  export * as callReason from "./utils/callreason";
2
+ export { getCustomMessage } from "./utils/message";
3
+ export { PhoneCache } from "./utils/phoneCache";
4
+ export * as phonenumber from "./utils/phonenumber";
5
+ export * as workerUtil from "./utils/worker";
6
+ export * as videoUtil from "./utils/video";
package/dist/index.js CHANGED
@@ -1,5 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.callReason = void 0;
3
+ exports.videoUtil = exports.workerUtil = exports.phonenumber = exports.PhoneCache = exports.getCustomMessage = exports.callReason = void 0;
4
4
  exports.callReason = require("./utils/callreason");
5
+ var message_1 = require("./utils/message");
6
+ Object.defineProperty(exports, "getCustomMessage", { enumerable: true, get: function () { return message_1.getCustomMessage; } });
7
+ var phoneCache_1 = require("./utils/phoneCache");
8
+ Object.defineProperty(exports, "PhoneCache", { enumerable: true, get: function () { return phoneCache_1.PhoneCache; } });
9
+ exports.phonenumber = require("./utils/phonenumber");
10
+ exports.workerUtil = require("./utils/worker");
11
+ exports.videoUtil = require("./utils/video");
5
12
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAiD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AACjD,2CAAmD;AAA1C,2GAAA,gBAAgB,OAAA;AACzB,iDAAgD;AAAvC,wGAAA,UAAU,OAAA;AACnB,qDAAmD;AACnD,+CAA6C;AAC7C,6CAA2C"}
@@ -0,0 +1,2 @@
1
+ export interface Activity {
2
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Activity.js","sourceRoot":"","sources":["../../src/models/Activity.ts"],"names":[],"mappings":""}
@@ -2,4 +2,11 @@ import { Context as AlmContext } from "@almaviacx/twilio-toolkit-service";
2
2
  export declare type Context = AlmContext & {
3
3
  SYNCSERVICE_SID: string;
4
4
  SYNC_CALL_MAP_SID: string;
5
+ SYNC_INPHONE_MAP_SID: string;
6
+ WORKSPACE_SID: string;
7
+ SYNC_WORKER_EMAIL_MAP_SID: string;
8
+ SYNC_MESSAGE_SERVICE_SID: string;
9
+ COUNTRY: string;
10
+ CONFIG_SYNC_SID: string;
11
+ SYNCMAP_SID: string;
5
12
  };
@@ -0,0 +1,7 @@
1
+ export interface FlexFlow {
2
+ sid: string;
3
+ contactIdentity: string;
4
+ integrationType: string;
5
+ integration: object;
6
+ channelType: string;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=FlexFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlexFlow.js","sourceRoot":"","sources":["../../src/models/FlexFlow.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ export interface IncomingPhoneNumber {
2
+ sid: string;
3
+ phoneNumber: string;
4
+ friendlyName: string;
5
+ capabilities: {
6
+ mms: boolean;
7
+ sms: boolean;
8
+ voice: boolean;
9
+ fax: boolean;
10
+ };
11
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IncomingPhoneNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IncomingPhoneNumber.js","sourceRoot":"","sources":["../../src/models/IncomingPhoneNumber.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export interface Worker {
2
+ sid: string;
3
+ activitySid: string;
4
+ attributes: string;
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Worker.js","sourceRoot":"","sources":["../../src/models/Worker.ts"],"names":[],"mappings":""}
@@ -1 +1,5 @@
1
1
  export * from "./Context";
2
+ export * from "./IncomingPhoneNumber";
3
+ export * from "./FlexFlow";
4
+ export * from "./Worker";
5
+ export * from "./Activity";
@@ -15,4 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./Context"), exports);
18
+ __exportStar(require("./IncomingPhoneNumber"), exports);
19
+ __exportStar(require("./FlexFlow"), exports);
20
+ __exportStar(require("./Worker"), exports);
21
+ __exportStar(require("./Activity"), exports);
18
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,wDAAsC;AACtC,6CAA2B;AAC3B,2CAAyB;AACzB,6CAA2B"}
@@ -0,0 +1,3 @@
1
+ import { Context } from "../models";
2
+ import "@twilio-labs/serverless-runtime-types";
3
+ export declare const getCustomMessage: (context: Context, msgId: string, lang: string) => any;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCustomMessage = void 0;
4
+ var fs = require("fs");
5
+ require("@twilio-labs/serverless-runtime-types");
6
+ var getCustomMessage = function (context, msgId, lang) {
7
+ var logger = context.logger;
8
+ var fileName = "/localization/custom/".concat(lang, ".json");
9
+ if (!Runtime.getAssets()[fileName]) {
10
+ logger.info("file ".concat(fileName, " not found, use default lang ").concat(context.DEFAULT_LANG));
11
+ fileName = "/localization/custom/".concat(context.DEFAULT_LANG, ".json");
12
+ }
13
+ var file = Runtime.getAssets()[fileName].path;
14
+ var text = fs.readFileSync(file).toString("utf-8");
15
+ var messages = JSON.parse(text);
16
+ return messages[msgId];
17
+ };
18
+ exports.getCustomMessage = getCustomMessage;
19
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/utils/message.ts"],"names":[],"mappings":";;;AAAA,uBAAyB;AAEzB,iDAA+C;AAExC,IAAM,gBAAgB,GAAG,UAAC,OAAgB,EAAE,KAAa,EAAE,IAAY;IACpE,IAAA,MAAM,GAAK,OAAO,OAAZ,CAAa;IAC3B,IAAI,QAAQ,GAAG,+BAAwB,IAAI,UAAO,CAAC;IACnD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE;QAClC,MAAM,CAAC,IAAI,CAAC,eAAQ,QAAQ,0CAAgC,OAAO,CAAC,YAAY,CAAE,CAAC,CAAC;QACpF,QAAQ,GAAG,+BAAwB,OAAO,CAAC,YAAY,UAAO,CAAC;KAChE;IACD,IAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;IAEhD,IAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrD,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC,CAAC;AAZW,QAAA,gBAAgB,oBAY3B"}
@@ -0,0 +1,36 @@
1
+ import { Context, IncomingPhoneNumber, FlexFlow } from "../models";
2
+ import "@twilio-labs/serverless-runtime-types";
3
+ import { Twilio } from "twilio";
4
+ interface Data {
5
+ sid: string;
6
+ friendlyName: string;
7
+ capabilities: {
8
+ mms: boolean;
9
+ sms: boolean;
10
+ voice: boolean;
11
+ fax: boolean;
12
+ };
13
+ inboundFlexFlows: Record<string, FlexFlowData>;
14
+ outboundFlexFlows: Record<string, FlexFlowData>;
15
+ }
16
+ interface FlexFlowData extends FlexFlow {
17
+ media: string;
18
+ order: number;
19
+ direction?: string;
20
+ }
21
+ export declare class PhoneCache {
22
+ phones?: IncomingPhoneNumber[];
23
+ flexFlows?: FlexFlow[];
24
+ updated: string[];
25
+ ttl: number;
26
+ context: Context;
27
+ client: Twilio;
28
+ constructor(context: Context, client: Twilio, neverExpires?: boolean);
29
+ getPhoneInfos: (phoneNumber: string) => Promise<Data | undefined>;
30
+ getFlexFlow: (phoneNumber: string, media: string, direction: string, createFlexFlowFunc?: () => FlexFlowData) => Promise<FlexFlowData | undefined>;
31
+ createFlexFlowIfNotExist: () => Promise<void>;
32
+ setPhoneInfos: (phoneNumber: string) => Promise<Data | undefined>;
33
+ setPhones: (phones: IncomingPhoneNumber[]) => void;
34
+ setFlexFlows: (flexFlows: FlexFlow[]) => void;
35
+ }
36
+ export {};
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (_) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.PhoneCache = void 0;
51
+ require("@twilio-labs/serverless-runtime-types");
52
+ var PhoneCache = /** @class */ (function () {
53
+ function PhoneCache(context, client, neverExpires) {
54
+ if (neverExpires === void 0) { neverExpires = false; }
55
+ var _this = this;
56
+ this.getPhoneInfos = function (phoneNumber) { return __awaiter(_this, void 0, void 0, function () {
57
+ var item, error_1;
58
+ return __generator(this, function (_a) {
59
+ switch (_a.label) {
60
+ case 0:
61
+ _a.trys.push([0, 2, , 4]);
62
+ return [4 /*yield*/, this.client.sync.services(this.context.SYNCSERVICE_SID).syncMaps(this.context.SYNC_INPHONE_MAP_SID).syncMapItems(phoneNumber).fetch()];
63
+ case 1:
64
+ item = _a.sent();
65
+ return [2 /*return*/, item.data];
66
+ case 2:
67
+ error_1 = _a.sent();
68
+ this.updated.push(phoneNumber);
69
+ return [4 /*yield*/, this.setPhoneInfos(phoneNumber)];
70
+ case 3: return [2 /*return*/, _a.sent()];
71
+ case 4: return [2 /*return*/];
72
+ }
73
+ });
74
+ }); };
75
+ this.getFlexFlow = function (phoneNumber, media, direction, createFlexFlowFunc) { return __awaiter(_this, void 0, void 0, function () {
76
+ var attr, data, flow;
77
+ return __generator(this, function (_a) {
78
+ switch (_a.label) {
79
+ case 0:
80
+ attr = direction === "in" ? "inboundFlexFlows" : "outboundFlexFlows";
81
+ return [4 /*yield*/, this.getPhoneInfos(phoneNumber)];
82
+ case 1:
83
+ data = _a.sent();
84
+ return [4 /*yield*/, getFlexFlowFromData(this.context, this.client, data, attr, media)];
85
+ case 2:
86
+ flow = _a.sent();
87
+ if (!(!flow && !this.updated.some(function (p) { return p === phoneNumber; }))) return [3 /*break*/, 5];
88
+ this.updated.push(phoneNumber);
89
+ return [4 /*yield*/, this.getPhoneInfos(phoneNumber)];
90
+ case 3:
91
+ data = _a.sent();
92
+ return [4 /*yield*/, getFlexFlowFromData(this.context, this.client, data, attr, media)];
93
+ case 4:
94
+ flow = _a.sent();
95
+ _a.label = 5;
96
+ case 5:
97
+ if (!(!flow && data && createFlexFlowFunc)) return [3 /*break*/, 8];
98
+ return [4 /*yield*/, createFlexFlowFunc()];
99
+ case 6:
100
+ flow = _a.sent();
101
+ data[attr][media] = {
102
+ sid: flow.sid,
103
+ integrationType: flow.integrationType,
104
+ integration: flow.integration,
105
+ contactIdentity: flow.contactIdentity,
106
+ channelType: flow.channelType,
107
+ order: 0,
108
+ media: "",
109
+ };
110
+ return [4 /*yield*/, updatePhoneData(this.context, this.client, phoneNumber, data, this.ttl)];
111
+ case 7:
112
+ _a.sent();
113
+ _a.label = 8;
114
+ case 8: return [2 /*return*/, flow];
115
+ }
116
+ });
117
+ }); };
118
+ this.createFlexFlowIfNotExist = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
119
+ return [2 /*return*/];
120
+ }); }); };
121
+ this.setPhoneInfos = function (phoneNumber) { return __awaiter(_this, void 0, void 0, function () {
122
+ var _a, _b;
123
+ return __generator(this, function (_c) {
124
+ switch (_c.label) {
125
+ case 0:
126
+ if (!!this.phones) return [3 /*break*/, 2];
127
+ _a = this;
128
+ return [4 /*yield*/, getPhones(this.context, this.client)];
129
+ case 1:
130
+ _a.phones = _c.sent();
131
+ _c.label = 2;
132
+ case 2:
133
+ if (!this.phones || !this.phones.find(function (p) { return p.phoneNumber === phoneNumber; })) {
134
+ return [2 /*return*/, undefined];
135
+ }
136
+ if (!!this.flexFlows) return [3 /*break*/, 4];
137
+ _b = this;
138
+ return [4 /*yield*/, getFlexFlows(this.context, this.client)];
139
+ case 3:
140
+ _b.flexFlows = _c.sent();
141
+ _c.label = 4;
142
+ case 4: return [4 /*yield*/, updatePhoneCache(this.context, this.client, this.phones, this.flexFlows, phoneNumber, this.ttl)];
143
+ case 5: return [2 /*return*/, _c.sent()];
144
+ }
145
+ });
146
+ }); };
147
+ this.setPhones = function (phones) {
148
+ _this.phones = phones;
149
+ };
150
+ this.setFlexFlows = function (flexFlows) {
151
+ _this.flexFlows = flexFlows;
152
+ };
153
+ this.context = context;
154
+ this.client = client;
155
+ this.updated = [];
156
+ this.ttl = neverExpires ? 0 : 24 * 60 * 60;
157
+ }
158
+ return PhoneCache;
159
+ }());
160
+ exports.PhoneCache = PhoneCache;
161
+ var getFlexFlowFromData = function (context, client, data, attr, media) { return __awaiter(void 0, void 0, void 0, function () {
162
+ var logger, flowSid, flow, error_2;
163
+ return __generator(this, function (_a) {
164
+ switch (_a.label) {
165
+ case 0:
166
+ logger = context.logger;
167
+ if (!(data && data[attr] && data[attr][media])) return [3 /*break*/, 5];
168
+ if (!data[attr][media].sid) return [3 /*break*/, 1];
169
+ return [2 /*return*/, data[attr][media]];
170
+ case 1:
171
+ flowSid = data[attr][media];
172
+ if (!(typeof flowSid == "string")) return [3 /*break*/, 5];
173
+ _a.label = 2;
174
+ case 2:
175
+ _a.trys.push([2, 4, , 5]);
176
+ return [4 /*yield*/, client.flexApi.flexFlow(flowSid).fetch()];
177
+ case 3:
178
+ flow = _a.sent();
179
+ logger.info("Get flexflow ".concat(flowSid, " from cache"));
180
+ return [2 /*return*/, __assign(__assign({}, flow), { media: "", order: 0 })];
181
+ case 4:
182
+ error_2 = _a.sent();
183
+ logger.error("Can't get flexflow ".concat(flowSid), error_2);
184
+ return [3 /*break*/, 5];
185
+ case 5: return [2 /*return*/, undefined];
186
+ }
187
+ });
188
+ }); };
189
+ var getPhones = function (context, client) { return __awaiter(void 0, void 0, void 0, function () {
190
+ var logger;
191
+ return __generator(this, function (_a) {
192
+ switch (_a.label) {
193
+ case 0:
194
+ logger = context.logger;
195
+ logger.info("Get twilio phones list");
196
+ return [4 /*yield*/, client.incomingPhoneNumbers.list()];
197
+ case 1: return [2 /*return*/, _a.sent()];
198
+ }
199
+ });
200
+ }); };
201
+ var getFlexFlows = function (context, client) { return __awaiter(void 0, void 0, void 0, function () {
202
+ var logger;
203
+ return __generator(this, function (_a) {
204
+ switch (_a.label) {
205
+ case 0:
206
+ logger = context.logger;
207
+ logger.info("Get flex flows list");
208
+ return [4 /*yield*/, client.flexApi.flexFlow.list()];
209
+ case 1: return [2 /*return*/, _a.sent()];
210
+ }
211
+ });
212
+ }); };
213
+ var updatePhoneCache = function (context, client, phones, flexFlows, phoneNumber, ttl) { return __awaiter(void 0, void 0, void 0, function () {
214
+ var phone, data;
215
+ return __generator(this, function (_a) {
216
+ switch (_a.label) {
217
+ case 0:
218
+ phone = phones.find(function (p) { return p.phoneNumber === phoneNumber; });
219
+ if (!phone) {
220
+ return [2 /*return*/, undefined];
221
+ }
222
+ data = {
223
+ sid: phone.sid,
224
+ friendlyName: phone.friendlyName,
225
+ capabilities: phone.capabilities,
226
+ inboundFlexFlows: {},
227
+ outboundFlexFlows: {},
228
+ };
229
+ flexFlows
230
+ .filter(function (f) { return f.contactIdentity && f.contactIdentity.endsWith(phoneNumber); })
231
+ .map(function (f) { return getFlexFlowInformations(f); })
232
+ .filter(function (i) { return i.media !== "unknown"; })
233
+ .sort(function (a, b) { return compareInt(a.order, b.order); })
234
+ .forEach(function (i) {
235
+ var flexFlows = i.direction === "in" ? data.inboundFlexFlows : data.outboundFlexFlows;
236
+ if (!flexFlows[i.media]) {
237
+ flexFlows[i.media] = i;
238
+ }
239
+ });
240
+ return [4 /*yield*/, updatePhoneData(context, client, phoneNumber, data, ttl)];
241
+ case 1:
242
+ _a.sent();
243
+ return [2 /*return*/, data];
244
+ }
245
+ });
246
+ }); };
247
+ var updatePhoneData = function (context, client, phoneNumber, data, ttl) { return __awaiter(void 0, void 0, void 0, function () {
248
+ var logger, error_3;
249
+ return __generator(this, function (_a) {
250
+ switch (_a.label) {
251
+ case 0:
252
+ logger = context.logger;
253
+ _a.label = 1;
254
+ case 1:
255
+ _a.trys.push([1, 3, , 5]);
256
+ return [4 /*yield*/, client.sync.services(context.SYNCSERVICE_SID).syncMaps(context.SYNC_INPHONE_MAP_SID).syncMapItems.create({ key: phoneNumber, data: data, ttl: ttl })];
257
+ case 2:
258
+ _a.sent();
259
+ logger.info("Cache created for ".concat(phoneNumber), data);
260
+ return [3 /*break*/, 5];
261
+ case 3:
262
+ error_3 = _a.sent();
263
+ return [4 /*yield*/, client.sync.services(context.SYNCSERVICE_SID).syncMaps(context.SYNC_INPHONE_MAP_SID).syncMapItems(phoneNumber).update({ data: data, ttl: ttl })];
264
+ case 4:
265
+ _a.sent();
266
+ logger.info("Cache updated for ".concat(phoneNumber), data);
267
+ return [3 /*break*/, 5];
268
+ case 5: return [2 /*return*/];
269
+ }
270
+ });
271
+ }); };
272
+ var compareInt = function (a, b) {
273
+ if (a === b) {
274
+ return 0;
275
+ }
276
+ return a < b ? -1 : 1;
277
+ };
278
+ var getFlexFlowInformations = function (flexFlow) {
279
+ var identity = flexFlow.contactIdentity.split(":");
280
+ var result = {
281
+ sid: flexFlow.sid,
282
+ integrationType: flexFlow.integrationType,
283
+ integration: flexFlow.integration,
284
+ contactIdentity: flexFlow.contactIdentity,
285
+ channelType: flexFlow.channelType,
286
+ media: "unknown",
287
+ order: identity.length === 2 ? 1 : 0 /* les nouveaux flexflows, qu'il faut prendre en priorité, précisent la direction dans contactIdentity => longueur = 3 */,
288
+ };
289
+ switch (identity.length) {
290
+ case 1:
291
+ result.direction = "in";
292
+ break;
293
+ case 2:
294
+ result.direction = flexFlow.integrationType === "studio" ? "in" : "out";
295
+ break;
296
+ default:
297
+ result.direction = identity[1];
298
+ break;
299
+ }
300
+ switch (flexFlow.channelType) {
301
+ case "sms":
302
+ case "whatsapp":
303
+ case "facebook":
304
+ result.media = flexFlow.channelType;
305
+ break;
306
+ case "custom":
307
+ result.media = identity[0];
308
+ break;
309
+ }
310
+ return result;
311
+ };
312
+ //# sourceMappingURL=phoneCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phoneCache.js","sourceRoot":"","sources":["../../src/utils/phoneCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Context } from "../models";
2
+ export declare const retrieveFrom: (phonenumber: string, to: string, context: Context, workerSid: string) => Promise<any>;
3
+ export declare const formatPhone: (phone: string, type: string, context: Context) => string | undefined;
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.formatPhone = exports.retrieveFrom = void 0;
40
+ var libphonenumber = require("libphonenumber-js");
41
+ var worker_1 = require("./worker");
42
+ var retrieveFrom = function (phonenumber, to, context, workerSid) { return __awaiter(void 0, void 0, void 0, function () {
43
+ var logger, client, phones, worker, workerPhones_1, sessions, err_1, map, mapSid, lastPhone, err_2, rand, rand, newPhone;
44
+ return __generator(this, function (_a) {
45
+ switch (_a.label) {
46
+ case 0:
47
+ logger = context.logger;
48
+ client = context.getTwilioClient();
49
+ return [4 /*yield*/, client.messaging.services(phonenumber).phoneNumbers.list()];
50
+ case 1:
51
+ phones = (_a.sent()).map(function (p) { return p.phoneNumber; });
52
+ if (!workerSid) return [3 /*break*/, 3];
53
+ return [4 /*yield*/, (0, worker_1.findWorkerById)(context, workerSid)];
54
+ case 2:
55
+ worker = _a.sent();
56
+ workerPhones_1 = JSON.parse(worker.attributes).phonenumbers;
57
+ phones = phones.filter(function (p) { return workerPhones_1.includes(p); });
58
+ logger.info("phones filter with worker", phones);
59
+ _a.label = 3;
60
+ case 3:
61
+ _a.trys.push([3, 5, , 6]);
62
+ return [4 /*yield*/, client.sync.services(context.SYNCSERVICE_SID).syncMaps(context.SYNC_MESSAGE_SERVICE_SID).syncMapItems(phonenumber).fetch()];
63
+ case 4:
64
+ sessions = _a.sent();
65
+ return [3 /*break*/, 6];
66
+ case 5:
67
+ err_1 = _a.sent();
68
+ return [3 /*break*/, 6];
69
+ case 6:
70
+ if (!!sessions) return [3 /*break*/, 9];
71
+ logger.info("create a new map for message service");
72
+ return [4 /*yield*/, client.sync.services(context.SYNCSERVICE_SID).syncMaps.create({ uniqueName: "customer-".concat(phonenumber) })];
73
+ case 7:
74
+ map = _a.sent();
75
+ return [4 /*yield*/, client.sync
76
+ .services(context.SYNCSERVICE_SID)
77
+ .syncMaps(context.SYNC_MESSAGE_SERVICE_SID)
78
+ .syncMapItems.create({ key: phonenumber, data: { map: map.sid } })];
79
+ case 8:
80
+ sessions = _a.sent();
81
+ _a.label = 9;
82
+ case 9:
83
+ mapSid = sessions.data.map;
84
+ _a.label = 10;
85
+ case 10:
86
+ _a.trys.push([10, 12, , 13]);
87
+ return [4 /*yield*/, client.sync.services(context.SYNCSERVICE_SID).syncMaps(mapSid).syncMapItems(to).fetch()];
88
+ case 11:
89
+ lastPhone = _a.sent();
90
+ return [3 /*break*/, 13];
91
+ case 12:
92
+ err_2 = _a.sent();
93
+ return [3 /*break*/, 13];
94
+ case 13:
95
+ if (!!lastPhone) return [3 /*break*/, 15];
96
+ rand = Math.floor(Math.random() * phones.length);
97
+ logger.info("new customer, create a item in map, random:", rand);
98
+ return [4 /*yield*/, client.sync
99
+ .services(context.SYNCSERVICE_SID)
100
+ .syncMaps(mapSid)
101
+ .syncMapItems.create({ key: to, data: { phonenumber: phones[rand] } })];
102
+ case 14:
103
+ lastPhone = _a.sent();
104
+ return [3 /*break*/, 17];
105
+ case 15:
106
+ if (!!phones.includes(lastPhone.data.phonenumber)) return [3 /*break*/, 17];
107
+ logger.info("phone not present in message service, get a new one");
108
+ rand = Math.floor(Math.random() * phones.length);
109
+ return [4 /*yield*/, client.sync
110
+ .services(context.SYNCSERVICE_SID)
111
+ .syncMaps(mapSid)
112
+ .syncMapItems(to)
113
+ .update({ data: { phonenumber: phones[rand] } })];
114
+ case 16:
115
+ lastPhone = _a.sent();
116
+ _a.label = 17;
117
+ case 17:
118
+ newPhone = lastPhone.data.phonenumber;
119
+ logger.info("phone retrieve in sync", newPhone);
120
+ return [2 /*return*/, newPhone];
121
+ }
122
+ });
123
+ }); };
124
+ exports.retrieveFrom = retrieveFrom;
125
+ var formatPhone = function (phone, type, context) {
126
+ var logger = context.logger;
127
+ var result = (phone || "").split(":").pop();
128
+ if (phone && phone.startsWith("sip") && type == "voice") {
129
+ var match = /sip:(\+?\d*)@/.exec(phone);
130
+ if (match && match.length > 1) {
131
+ result = match[1];
132
+ }
133
+ logger.info("sip format detected, result:".concat(result));
134
+ }
135
+ if (type == "voice" && result && result[0] != "+") {
136
+ if (libphonenumber.isPossibleNumber("+".concat(result))) {
137
+ result = "+".concat(result);
138
+ logger.info("phone formatted:".concat(result));
139
+ }
140
+ else {
141
+ var parsed = libphonenumber.parsePhoneNumber(result, context.COUNTRY);
142
+ result = parsed.number;
143
+ logger.info("phone parse:".concat(result), parsed);
144
+ }
145
+ }
146
+ return result;
147
+ };
148
+ exports.formatPhone = formatPhone;
149
+ //# sourceMappingURL=phonenumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phonenumber.js","sourceRoot":"","sources":["../../src/utils/phonenumber.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Context } from "../models";
2
+ export declare const findVideoUiBaseUrl: (context: Context) => Promise<any>;
3
+ export declare const saveVideoData: (context: Context, attributes: any, taskCreated: any, flow: any, prevKey: any) => Promise<any>;
4
+ export declare const getVideoUrlTemplated: (context: Context, url: string) => Promise<string>;
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getVideoUrlTemplated = exports.saveVideoData = exports.findVideoUiBaseUrl = void 0;
40
+ var mustache = require("mustache");
41
+ var nanoid_1 = require("nanoid");
42
+ var findVideoUiBaseUrl = function (context) { return __awaiter(void 0, void 0, void 0, function () {
43
+ var client, SYNCSERVICE_SID, CONFIG_SYNC_SID, doc, serviceList, service, envList;
44
+ return __generator(this, function (_a) {
45
+ switch (_a.label) {
46
+ case 0:
47
+ client = context.getTwilioClient();
48
+ SYNCSERVICE_SID = context.SYNCSERVICE_SID, CONFIG_SYNC_SID = context.CONFIG_SYNC_SID;
49
+ return [4 /*yield*/, client.sync.services(SYNCSERVICE_SID).documents(CONFIG_SYNC_SID).fetch()];
50
+ case 1:
51
+ doc = _a.sent();
52
+ if (doc && doc.data.video.userInterfaceUrl) {
53
+ return [2 /*return*/, doc.data.video.userInterfaceUrl];
54
+ }
55
+ return [4 /*yield*/, client.serverless.services.list()];
56
+ case 2:
57
+ serviceList = _a.sent();
58
+ service = serviceList.find(function (s) { return s.uniqueName === "gge-ui-video"; });
59
+ return [4 /*yield*/, client.serverless.services(service.sid).environments.list()];
60
+ case 3:
61
+ envList = _a.sent();
62
+ return [2 /*return*/, "https://".concat(envList[0].domainName)];
63
+ }
64
+ });
65
+ }); };
66
+ exports.findVideoUiBaseUrl = findVideoUiBaseUrl;
67
+ var getVideoLinkTtl = function (context, attributes, taskCreated) { return __awaiter(void 0, void 0, void 0, function () {
68
+ var client, SYNCSERVICE_SID, CONFIG_SYNC_SID, doc, dateEnd, now;
69
+ return __generator(this, function (_a) {
70
+ switch (_a.label) {
71
+ case 0:
72
+ if (!(attributes.direction === "inbound" || taskCreated)) return [3 /*break*/, 2];
73
+ client = context.getTwilioClient();
74
+ SYNCSERVICE_SID = context.SYNCSERVICE_SID, CONFIG_SYNC_SID = context.CONFIG_SYNC_SID;
75
+ return [4 /*yield*/, client.sync.services(SYNCSERVICE_SID).documents(CONFIG_SYNC_SID).fetch()];
76
+ case 1:
77
+ doc = _a.sent();
78
+ return [2 /*return*/, doc && doc.data.video.outboundValidity ? doc.data.video.outboundValidity * 60 : 3600]; /* 1 hour */
79
+ case 2:
80
+ dateEnd = new Date(attributes.dateRangeEnd).getTime();
81
+ now = new Date().getTime();
82
+ return [2 /*return*/, Math.round((dateEnd - now) / 1000)];
83
+ }
84
+ });
85
+ }); };
86
+ var saveVideoData = function (context, attributes, taskCreated, flow, prevKey) { return __awaiter(void 0, void 0, void 0, function () {
87
+ var logger, client, SYNCSERVICE_SID, SYNCMAP_SID, ttlTask, key, data, error_1, ttl;
88
+ return __generator(this, function (_a) {
89
+ switch (_a.label) {
90
+ case 0:
91
+ logger = context.logger;
92
+ client = context.getTwilioClient();
93
+ SYNCSERVICE_SID = context.SYNCSERVICE_SID, SYNCMAP_SID = context.SYNCMAP_SID;
94
+ ttlTask = getVideoLinkTtl(context, attributes, taskCreated);
95
+ key = prevKey;
96
+ if (!!prevKey) return [3 /*break*/, 6];
97
+ _a.label = 1;
98
+ case 1:
99
+ key = (0, nanoid_1.nanoid)(6);
100
+ _a.label = 2;
101
+ case 2:
102
+ _a.trys.push([2, 4, , 5]);
103
+ return [4 /*yield*/, client.sync.services(SYNCSERVICE_SID).syncMaps(SYNCMAP_SID).syncMapItems(key).fetch()];
104
+ case 3:
105
+ data = _a.sent();
106
+ return [3 /*break*/, 5];
107
+ case 4:
108
+ error_1 = _a.sent();
109
+ return [3 /*break*/, 5];
110
+ case 5:
111
+ if (data != null) return [3 /*break*/, 1];
112
+ _a.label = 6;
113
+ case 6:
114
+ data = flow ? { attributes: attributes, taskCreated: taskCreated, flowSid: flow.sid, flowName: flow.friendlyName } : { attributes: attributes, taskCreated: taskCreated };
115
+ return [4 /*yield*/, ttlTask];
116
+ case 7:
117
+ ttl = _a.sent();
118
+ logger.info("Save video data with key ".concat(key, " with an availability of ").concat(ttl, " seconds"), attributes);
119
+ if (!prevKey) return [3 /*break*/, 9];
120
+ return [4 /*yield*/, client.sync.services(SYNCSERVICE_SID).syncMaps(SYNCMAP_SID).syncMapItems(key).update({ data: data, ttl: ttl })];
121
+ case 8:
122
+ _a.sent();
123
+ return [3 /*break*/, 11];
124
+ case 9: return [4 /*yield*/, client.sync.services(SYNCSERVICE_SID).syncMaps(SYNCMAP_SID).syncMapItems.create({ key: key, data: data, ttl: ttl })];
125
+ case 10:
126
+ _a.sent();
127
+ _a.label = 11;
128
+ case 11: return [2 /*return*/, key];
129
+ }
130
+ });
131
+ }); };
132
+ exports.saveVideoData = saveVideoData;
133
+ var getVideoUrlTemplated = function (context, url) { return __awaiter(void 0, void 0, void 0, function () {
134
+ var SYNCSERVICE_SID, CONFIG_SYNC_SID, client, doc;
135
+ return __generator(this, function (_a) {
136
+ switch (_a.label) {
137
+ case 0:
138
+ SYNCSERVICE_SID = context.SYNCSERVICE_SID, CONFIG_SYNC_SID = context.CONFIG_SYNC_SID;
139
+ client = context.getTwilioClient();
140
+ return [4 /*yield*/, client.sync.services(SYNCSERVICE_SID).documents(CONFIG_SYNC_SID).fetch()];
141
+ case 1:
142
+ doc = _a.sent();
143
+ if (doc && doc.data.video.template) {
144
+ return [2 /*return*/, mustache.render(doc.data.video.template, {
145
+ attributes: {
146
+ url: url,
147
+ },
148
+ })];
149
+ }
150
+ return [2 /*return*/, url];
151
+ }
152
+ });
153
+ }); };
154
+ exports.getVideoUrlTemplated = getVideoUrlTemplated;
155
+ //# sourceMappingURL=video.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/utils/video.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Context, Worker, Activity } from "../models";
2
+ export declare const findWorker: (context: Context, email: string) => Promise<Worker | undefined>;
3
+ export declare const findWorkerById: (context: Context, id: string) => Promise<Worker>;
4
+ export declare const getWorkerActivity: (context: Context, email: string) => Promise<Activity>;
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getWorkerActivity = exports.findWorkerById = exports.findWorker = void 0;
40
+ var doRetry = function (context, callback, _a) {
41
+ var retry = _a.retry, time = _a.time;
42
+ return __awaiter(void 0, void 0, void 0, function () {
43
+ var logger, done, count, result, error_1;
44
+ return __generator(this, function (_b) {
45
+ switch (_b.label) {
46
+ case 0:
47
+ logger = context.logger;
48
+ done = false;
49
+ count = 0;
50
+ _b.label = 1;
51
+ case 1:
52
+ _b.trys.push([1, 3, , 7]);
53
+ count++;
54
+ return [4 /*yield*/, callback(count)];
55
+ case 2:
56
+ result = _b.sent();
57
+ done = true;
58
+ return [3 /*break*/, 7];
59
+ case 3:
60
+ error_1 = _b.sent();
61
+ logger.warn("unable to execute callback (count:".concat(count, "<").concat(retry, ")"), error_1);
62
+ if (!(count <= retry)) return [3 /*break*/, 5];
63
+ return [4 /*yield*/, new Promise(function (resolve) {
64
+ setTimeout(resolve, count * time);
65
+ })];
66
+ case 4:
67
+ _b.sent();
68
+ logger.info("wait finish, retry:".concat(!done && count <= retry));
69
+ return [3 /*break*/, 6];
70
+ case 5: throw error_1;
71
+ case 6: return [3 /*break*/, 7];
72
+ case 7:
73
+ if (!done && count <= retry) return [3 /*break*/, 1];
74
+ _b.label = 8;
75
+ case 8: return [2 /*return*/, result];
76
+ }
77
+ });
78
+ });
79
+ };
80
+ var executeFindWorkers = function (context, email) { return __awaiter(void 0, void 0, void 0, function () {
81
+ var logger, client;
82
+ return __generator(this, function (_a) {
83
+ switch (_a.label) {
84
+ case 0:
85
+ logger = context.logger;
86
+ client = context.getTwilioClient();
87
+ return [4 /*yield*/, doRetry(context, function (count) { return __awaiter(void 0, void 0, void 0, function () {
88
+ return __generator(this, function (_a) {
89
+ switch (_a.label) {
90
+ case 0:
91
+ logger.info("try to find worker, count:".concat(count));
92
+ return [4 /*yield*/, client.taskrouter.workspaces(context.WORKSPACE_SID).workers.list({
93
+ targetWorkersExpression: "email = '".concat(email, "'"),
94
+ limit: 1,
95
+ })];
96
+ case 1: return [2 /*return*/, _a.sent()];
97
+ }
98
+ });
99
+ }); }, { retry: 3, time: 100 })];
100
+ case 1: return [2 /*return*/, _a.sent()];
101
+ }
102
+ });
103
+ }); };
104
+ var findWorker = function (context, email) { return __awaiter(void 0, void 0, void 0, function () {
105
+ var logger, client, workerCache, err_1, workers, worker, err_2;
106
+ return __generator(this, function (_a) {
107
+ switch (_a.label) {
108
+ case 0:
109
+ logger = context.logger;
110
+ client = context.getTwilioClient();
111
+ _a.label = 1;
112
+ case 1:
113
+ _a.trys.push([1, 3, , 4]);
114
+ return [4 /*yield*/, client.sync.services(context.SYNCSERVICE_SID).syncMaps(context.SYNC_WORKER_EMAIL_MAP_SID).syncMapItems(email).fetch()];
115
+ case 2:
116
+ workerCache = _a.sent();
117
+ return [3 /*break*/, 4];
118
+ case 3:
119
+ err_1 = _a.sent();
120
+ return [3 /*break*/, 4];
121
+ case 4:
122
+ if (!!workerCache) return [3 /*break*/, 10];
123
+ return [4 /*yield*/, executeFindWorkers(context, email)];
124
+ case 5:
125
+ workers = _a.sent();
126
+ if (!workers || workers.length == 0) {
127
+ //throw new Error(`unable to find a worker with email : ${email}`);
128
+ return [2 /*return*/, undefined];
129
+ }
130
+ worker = workers[0];
131
+ _a.label = 6;
132
+ case 6:
133
+ _a.trys.push([6, 8, , 10]);
134
+ return [4 /*yield*/, client.sync
135
+ .services(context.SYNCSERVICE_SID)
136
+ .syncMaps(context.SYNC_WORKER_EMAIL_MAP_SID)
137
+ .syncMapItems.create({ key: email, data: { sid: worker.sid }, ttl: 24 * 60 * 60 })];
138
+ case 7:
139
+ workerCache = _a.sent();
140
+ return [3 /*break*/, 10];
141
+ case 8:
142
+ err_2 = _a.sent();
143
+ return [4 /*yield*/, doRetry(context, function () { return __awaiter(void 0, void 0, void 0, function () {
144
+ return __generator(this, function (_a) {
145
+ switch (_a.label) {
146
+ case 0: return [4 /*yield*/, client.sync.services(context.SYNCSERVICE_SID).syncMaps(context.SYNC_WORKER_EMAIL_MAP_SID).syncMapItems(email).fetch()];
147
+ case 1: return [2 /*return*/, _a.sent()];
148
+ }
149
+ });
150
+ }); }, { retry: 2, time: 1000 })];
151
+ case 9:
152
+ workerCache = _a.sent();
153
+ return [3 /*break*/, 10];
154
+ case 10:
155
+ if (!workerCache) return [3 /*break*/, 12];
156
+ logger.info("find worker with id:".concat(workerCache.data.sid));
157
+ return [4 /*yield*/, client.taskrouter.workspaces(context.WORKSPACE_SID).workers(workerCache.data.sid).fetch()];
158
+ case 11: return [2 /*return*/, _a.sent()];
159
+ case 12: return [2 /*return*/, undefined];
160
+ }
161
+ });
162
+ }); };
163
+ exports.findWorker = findWorker;
164
+ var findWorkerById = function (context, id) { return __awaiter(void 0, void 0, void 0, function () {
165
+ var client;
166
+ return __generator(this, function (_a) {
167
+ switch (_a.label) {
168
+ case 0:
169
+ client = context.getTwilioClient();
170
+ return [4 /*yield*/, client.taskrouter.workspaces(context.WORKSPACE_SID).workers(id).fetch()];
171
+ case 1: return [2 /*return*/, _a.sent()];
172
+ }
173
+ });
174
+ }); };
175
+ exports.findWorkerById = findWorkerById;
176
+ var getWorkerActivity = function (context, email) { return __awaiter(void 0, void 0, void 0, function () {
177
+ var worker, client;
178
+ return __generator(this, function (_a) {
179
+ switch (_a.label) {
180
+ case 0: return [4 /*yield*/, (0, exports.findWorker)(context, email)];
181
+ case 1:
182
+ worker = _a.sent();
183
+ if (!worker) {
184
+ throw "no worker found with email ".concat(email, ", unable to get activity");
185
+ }
186
+ client = context.getTwilioClient();
187
+ return [4 /*yield*/, client.taskrouter.workspaces(context.WORKSPACE_SID).activities(worker.activitySid).fetch()];
188
+ case 2: return [2 /*return*/, _a.sent()];
189
+ }
190
+ });
191
+ }); };
192
+ exports.getWorkerActivity = getWorkerActivity;
193
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/utils/worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,27 @@
1
1
  {
2
2
  "name": "@almaviacx/gge-toolkit-service",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "scripts": {
5
5
  "prebuild": "rimraf dist",
6
- "build": "tsc"
6
+ "build": "tsc",
7
+ "eslint": "eslint src/** --fix --color"
8
+ },
9
+ "dependencies": {
10
+ "@almaviacx/twilio-toolkit-service": "^1.0.2",
11
+ "libphonenumber-js": "^1.10.7",
12
+ "mustache": "^4.2.0",
13
+ "nanoid": "^3.1.30",
14
+ "randomstring": "^1.2.2",
15
+ "winston": "^3.7.2"
7
16
  },
8
17
  "devDependencies": {
18
+ "@twilio-labs/serverless-runtime-types": "^2.2.3",
19
+ "@types/mustache": "^4.1.3",
9
20
  "@types/randomstring": "^1.1.8",
21
+ "@typescript-eslint/eslint-plugin": "^5.6.0",
22
+ "@typescript-eslint/parser": "^5.6.0",
23
+ "eslint": "^8.18.0",
24
+ "eslint-plugin-sonarjs": "^0.13.0",
10
25
  "rimraf": "^3.0.2",
11
26
  "typescript": "^4.7.4"
12
27
  },
@@ -17,10 +32,5 @@
17
32
  "dist"
18
33
  ],
19
34
  "author": "Paulo De Carvalho <paulo.decarvalho@almaviacx.com> (https://www.almaviacx.com/)",
20
- "license": "MIT",
21
- "dependencies": {
22
- "@almaviacx/twilio-toolkit-service": "file:../../almaviacx/twilio-toolkit-service",
23
- "randomstring": "^1.2.2",
24
- "winston": "^3.7.2"
25
- }
35
+ "license": "MIT"
26
36
  }