@dereekb/nestjs 13.2.2 → 13.3.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.
@@ -7,16 +7,64 @@ var crypto = require('crypto');
7
7
  var config = require('@nestjs/config');
8
8
  var serverSdk = require('@vapi-ai/server-sdk');
9
9
 
10
+ function _define_property$5(obj, key, value) {
11
+ if (key in obj) {
12
+ Object.defineProperty(obj, key, {
13
+ value: value,
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true
17
+ });
18
+ } else {
19
+ obj[key] = value;
20
+ }
21
+ return obj;
22
+ }
23
+ function _object_spread$1(target) {
24
+ for(var i = 1; i < arguments.length; i++){
25
+ var source = arguments[i] != null ? arguments[i] : {};
26
+ var ownKeys = Object.keys(source);
27
+ if (typeof Object.getOwnPropertySymbols === "function") {
28
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
29
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
30
+ }));
31
+ }
32
+ ownKeys.forEach(function(key) {
33
+ _define_property$5(target, key, source[key]);
34
+ });
35
+ }
36
+ return target;
37
+ }
38
+ function ownKeys(object, enumerableOnly) {
39
+ var keys = Object.keys(object);
40
+ if (Object.getOwnPropertySymbols) {
41
+ var symbols = Object.getOwnPropertySymbols(object);
42
+ keys.push.apply(keys, symbols);
43
+ }
44
+ return keys;
45
+ }
46
+ function _object_spread_props(target, source) {
47
+ source = source != null ? source : {};
48
+ if (Object.getOwnPropertyDescriptors) {
49
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
50
+ } else {
51
+ ownKeys(Object(source)).forEach(function(key) {
52
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
53
+ });
54
+ }
55
+ return target;
56
+ }
10
57
  /**
11
58
  * Creates a VapiAiWebhookEvent and treats the data as the input type.
12
59
  *
13
60
  * @param event
14
61
  * @returns
15
- */
16
- function vapiAiWebhookEvent(event) {
62
+ */ function vapiAiWebhookEvent(event) {
17
63
  return event;
18
64
  }
19
- const vapiaiEventHandlerFactory = util.handlerFactory((x) => x.type, {
65
+ var vapiaiEventHandlerFactory = util.handlerFactory(function(x) {
66
+ return x.type;
67
+ }, {
20
68
  defaultResult: {
21
69
  handled: true,
22
70
  response: undefined
@@ -26,174 +74,746 @@ const vapiaiEventHandlerFactory = util.handlerFactory((x) => x.type, {
26
74
  response: undefined
27
75
  }
28
76
  });
29
- const vapiaiEventHandlerConfigurerFactory = util.handlerConfigurerFactory({
30
- configurerForAccessor: (accessor) => {
77
+ var vapiaiEventHandlerConfigurerFactory = util.handlerConfigurerFactory({
78
+ configurerForAccessor: function configurerForAccessor(accessor) {
31
79
  // eslint-disable-next-line
32
- const fnWithKey = util.handlerMappedSetFunctionFactory(accessor, vapiAiWebhookEvent);
33
- const configurer = {
34
- ...accessor,
80
+ var fnWithKey = util.handlerMappedSetFunctionFactory(accessor, vapiAiWebhookEvent);
81
+ var configurer = _object_spread_props(_object_spread$1({}, accessor), {
35
82
  handleAssistantRequest: fnWithKey('assistant-request'),
36
83
  handleStatusUpdate: fnWithKey('status-update'),
37
84
  handleFunctionCall: fnWithKey('function-call'),
38
85
  handleEndOfCallReport: fnWithKey('end-of-call-report'),
39
86
  handleHang: fnWithKey('hang')
40
- };
87
+ });
41
88
  return configurer;
42
89
  }
43
90
  });
44
91
 
45
- /******************************************************************************
46
- Copyright (c) Microsoft Corporation.
47
-
48
- Permission to use, copy, modify, and/or distribute this software for any
49
- purpose with or without fee is hereby granted.
50
-
51
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
52
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
53
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
54
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
55
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
56
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
57
- PERFORMANCE OF THIS SOFTWARE.
58
- ***************************************************************************** */
59
- /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
60
-
61
-
62
- function __decorate(decorators, target, key, desc) {
63
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
64
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
65
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
66
- return c > 3 && r && Object.defineProperty(target, key, r), r;
67
- }
68
-
69
- function __param(paramIndex, decorator) {
70
- return function (target, key) { decorator(target, key, paramIndex); }
71
- }
72
-
73
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
74
- var e = new Error(message);
75
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
92
+ function _type_of(obj) {
93
+ "@swc/helpers - typeof";
94
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
95
+ }
96
+ function __decorate(decorators, target, key, desc) {
97
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
98
+ if ((typeof Reflect === "undefined" ? "undefined" : _type_of(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
99
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
100
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
101
+ }
102
+ function __param(paramIndex, decorator) {
103
+ return function(target, key) {
104
+ decorator(target, key, paramIndex);
105
+ };
106
+ }
107
+ typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
108
+ var e = new Error(message);
109
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
76
110
  };
77
111
 
112
+ function asyncGeneratorStep$2(gen, resolve, reject, _next, _throw, key, arg) {
113
+ try {
114
+ var info = gen[key](arg);
115
+ var value = info.value;
116
+ } catch (error) {
117
+ reject(error);
118
+ return;
119
+ }
120
+ if (info.done) {
121
+ resolve(value);
122
+ } else {
123
+ Promise.resolve(value).then(_next, _throw);
124
+ }
125
+ }
126
+ function _async_to_generator$2(fn) {
127
+ return function() {
128
+ var self = this, args = arguments;
129
+ return new Promise(function(resolve, reject) {
130
+ var gen = fn.apply(self, args);
131
+ function _next(value) {
132
+ asyncGeneratorStep$2(gen, resolve, reject, _next, _throw, "next", value);
133
+ }
134
+ function _throw(err) {
135
+ asyncGeneratorStep$2(gen, resolve, reject, _next, _throw, "throw", err);
136
+ }
137
+ _next(undefined);
138
+ });
139
+ };
140
+ }
141
+ function _ts_generator$2(thisArg, body) {
142
+ var f, y, t, _ = {
143
+ label: 0,
144
+ sent: function() {
145
+ if (t[0] & 1) throw t[1];
146
+ return t[1];
147
+ },
148
+ trys: [],
149
+ ops: []
150
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
151
+ return d(g, "next", {
152
+ value: verb(0)
153
+ }), d(g, "throw", {
154
+ value: verb(1)
155
+ }), d(g, "return", {
156
+ value: verb(2)
157
+ }), typeof Symbol === "function" && d(g, Symbol.iterator, {
158
+ value: function() {
159
+ return this;
160
+ }
161
+ }), g;
162
+ function verb(n) {
163
+ return function(v) {
164
+ return step([
165
+ n,
166
+ v
167
+ ]);
168
+ };
169
+ }
170
+ function step(op) {
171
+ if (f) throw new TypeError("Generator is already executing.");
172
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
173
+ 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;
174
+ if (y = 0, t) op = [
175
+ op[0] & 2,
176
+ t.value
177
+ ];
178
+ switch(op[0]){
179
+ case 0:
180
+ case 1:
181
+ t = op;
182
+ break;
183
+ case 4:
184
+ _.label++;
185
+ return {
186
+ value: op[1],
187
+ done: false
188
+ };
189
+ case 5:
190
+ _.label++;
191
+ y = op[1];
192
+ op = [
193
+ 0
194
+ ];
195
+ continue;
196
+ case 7:
197
+ op = _.ops.pop();
198
+ _.trys.pop();
199
+ continue;
200
+ default:
201
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
202
+ _ = 0;
203
+ continue;
204
+ }
205
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
206
+ _.label = op[1];
207
+ break;
208
+ }
209
+ if (op[0] === 6 && _.label < t[1]) {
210
+ _.label = t[1];
211
+ t = op;
212
+ break;
213
+ }
214
+ if (t && _.label < t[2]) {
215
+ _.label = t[2];
216
+ _.ops.push(op);
217
+ break;
218
+ }
219
+ if (t[2]) _.ops.pop();
220
+ _.trys.pop();
221
+ continue;
222
+ }
223
+ op = body.call(thisArg, _);
224
+ } catch (e) {
225
+ op = [
226
+ 6,
227
+ e
228
+ ];
229
+ y = 0;
230
+ } finally{
231
+ f = t = 0;
232
+ }
233
+ if (op[0] & 5) throw op[1];
234
+ return {
235
+ value: op[0] ? op[1] : void 0,
236
+ done: true
237
+ };
238
+ }
239
+ }
78
240
  /**
79
241
  * Verifies a VapiAi webhook event header.
80
242
  *
81
243
  * @param vapiSecretTokenGetter The VapiAi secret token. The Vapi client allows for using an AsyncGetterOrValue type, so the verifier supports that as well.
82
244
  * @returns A function that verifies a VapiAi webhook event.
83
- */
84
- function vapiAiWebhookEventVerifier(config) {
85
- const { verificationType: inputVerificationType, secret: inputSecret, hmacSecret: inputHmacSecret, signaturePrefix: inputSignaturePrefix } = config;
86
- const verificationType = inputVerificationType ?? (inputHmacSecret != null ? 'hmac' : 'secret'); // default to secret always, never default to none
87
- const secretToken = (verificationType === 'hmac' ? (inputHmacSecret ?? inputSecret) : inputSecret) ?? '';
88
- const signaturePrefix = inputSignaturePrefix ?? '';
245
+ */ function vapiAiWebhookEventVerifier(config) {
246
+ var _ref;
247
+ var inputVerificationType = config.verificationType, inputSecret = config.secret, inputHmacSecret = config.hmacSecret, inputSignaturePrefix = config.signaturePrefix;
248
+ var verificationType = inputVerificationType !== null && inputVerificationType !== void 0 ? inputVerificationType : inputHmacSecret != null ? 'hmac' : 'secret'; // default to secret always, never default to none
249
+ var secretToken = (_ref = verificationType === 'hmac' ? inputHmacSecret !== null && inputHmacSecret !== void 0 ? inputHmacSecret : inputSecret : inputSecret) !== null && _ref !== void 0 ? _ref : '';
250
+ var signaturePrefix = inputSignaturePrefix !== null && inputSignaturePrefix !== void 0 ? inputSignaturePrefix : '';
89
251
  function verifyNone(input) {
90
252
  return true;
91
253
  }
92
254
  function verifySecret(input) {
93
- const { request } = input;
94
- const headers = request.headers;
95
- const vapiSecret = headers['x-vapi-secret'];
96
- const valid = vapiSecret === secretToken;
255
+ var request = input.request;
256
+ var headers = request.headers;
257
+ var vapiSecret = headers['x-vapi-secret'];
258
+ var valid = vapiSecret === secretToken;
97
259
  return valid;
98
260
  }
99
261
  function verifyHmac(input) {
100
- const { request, requestBodyString } = input;
101
- const headers = request.headers;
102
- const timestamp = headers['x-timestamp'];
103
- const vapiSignature = headers['x-signature'];
104
- const message = `${timestamp}.${requestBodyString}`;
105
- const hashForVerify = crypto.createHmac('sha256', secretToken).update(message).digest('hex');
106
- const signature = `${signaturePrefix}${hashForVerify}`;
107
- const valid = vapiSignature === signature;
262
+ var request = input.request, requestBodyString = input.requestBodyString;
263
+ var headers = request.headers;
264
+ var timestamp = headers['x-timestamp'];
265
+ var vapiSignature = headers['x-signature'];
266
+ var message = "".concat(timestamp, ".").concat(requestBodyString);
267
+ var hashForVerify = crypto.createHmac('sha256', secretToken).update(message).digest('hex');
268
+ var signature = "".concat(signaturePrefix).concat(hashForVerify);
269
+ var valid = vapiSignature === signature;
108
270
  return valid;
109
271
  }
110
- const verify = verificationType === 'hmac' ? verifyHmac : verificationType === 'secret' ? verifySecret : verifyNone;
111
- return async (request, rawBody) => {
112
- const requestBodyString = String(request.body);
113
- const valid = verify({ request, requestBodyString });
114
- const requestBody = JSON.parse(requestBodyString);
115
- const result = {
116
- valid,
117
- event: requestBody.message
118
- };
119
- return result;
272
+ var verify = verificationType === 'hmac' ? verifyHmac : verificationType === 'secret' ? verifySecret : verifyNone;
273
+ return function(request, rawBody) {
274
+ return _async_to_generator$2(function() {
275
+ var requestBodyString, valid, requestBody, result;
276
+ return _ts_generator$2(this, function(_state) {
277
+ requestBodyString = String(request.body);
278
+ valid = verify({
279
+ request: request,
280
+ requestBodyString: requestBodyString
281
+ });
282
+ requestBody = JSON.parse(requestBodyString);
283
+ result = {
284
+ valid: valid,
285
+ event: requestBody.message
286
+ };
287
+ return [
288
+ 2,
289
+ result
290
+ ];
291
+ });
292
+ })();
120
293
  };
121
294
  }
122
295
 
123
- const VAPI_AI_WEBHOOK_SECRET_TOKEN_ENV_VAR = 'VAPI_AI_WEBHOOK_SECRET_TOKEN';
124
- const VAPI_AI_WEBHOOK_HMAC_SECRET_TOKEN_ENV_VAR = 'VAPI_AI_WEBHOOK_HMAC_SECRET_TOKEN';
125
- const VAPI_AI_WEBHOOK_SECRET_VERIFICATION_TYPE_ENV_VAR = 'VAPI_AI_WEBHOOK_SECRET_VERIFICATION_TYPE';
126
- const VAPI_AI_WEBHOOK_SIGNATURE_PREFIX_ENV_VAR = 'VAPI_AI_WEBHOOK_SIGNATURE_PREFIX';
296
+ function _class_call_check$6(instance, Constructor) {
297
+ if (!(instance instanceof Constructor)) {
298
+ throw new TypeError("Cannot call a class as a function");
299
+ }
300
+ }
301
+ function _defineProperties$4(target, props) {
302
+ for(var i = 0; i < props.length; i++){
303
+ var descriptor = props[i];
304
+ descriptor.enumerable = descriptor.enumerable || false;
305
+ descriptor.configurable = true;
306
+ if ("value" in descriptor) descriptor.writable = true;
307
+ Object.defineProperty(target, descriptor.key, descriptor);
308
+ }
309
+ }
310
+ function _create_class$4(Constructor, protoProps, staticProps) {
311
+ if (staticProps) _defineProperties$4(Constructor, staticProps);
312
+ return Constructor;
313
+ }
314
+ function _define_property$4(obj, key, value) {
315
+ if (key in obj) {
316
+ Object.defineProperty(obj, key, {
317
+ value: value,
318
+ enumerable: true,
319
+ configurable: true,
320
+ writable: true
321
+ });
322
+ } else {
323
+ obj[key] = value;
324
+ }
325
+ return obj;
326
+ }
327
+ var VAPI_AI_WEBHOOK_SECRET_TOKEN_ENV_VAR = 'VAPI_AI_WEBHOOK_SECRET_TOKEN';
328
+ var VAPI_AI_WEBHOOK_HMAC_SECRET_TOKEN_ENV_VAR = 'VAPI_AI_WEBHOOK_HMAC_SECRET_TOKEN';
329
+ var VAPI_AI_WEBHOOK_SECRET_VERIFICATION_TYPE_ENV_VAR = 'VAPI_AI_WEBHOOK_SECRET_VERIFICATION_TYPE';
330
+ var VAPI_AI_WEBHOOK_SIGNATURE_PREFIX_ENV_VAR = 'VAPI_AI_WEBHOOK_SIGNATURE_PREFIX';
127
331
  /**
128
332
  * Configuration for VapiAiService
129
- */
130
- class VapiAiWebhookServiceConfig {
131
- webhookConfig;
132
- static assertValidConfig(config) {
133
- if (!config.webhookConfig.secret && !config.webhookConfig.hmacSecret) {
134
- throw new Error('No Vapi.ai webhook secret token specified.');
333
+ */ var VapiAiWebhookServiceConfig = /*#__PURE__*/ function() {
334
+ function VapiAiWebhookServiceConfig() {
335
+ _class_call_check$6(this, VapiAiWebhookServiceConfig);
336
+ _define_property$4(this, "webhookConfig", void 0);
337
+ }
338
+ _create_class$4(VapiAiWebhookServiceConfig, null, [
339
+ {
340
+ key: "assertValidConfig",
341
+ value: function assertValidConfig(config) {
342
+ if (!config.webhookConfig.secret && !config.webhookConfig.hmacSecret) {
343
+ throw new Error('No Vapi.ai webhook secret token specified.');
344
+ }
345
+ }
135
346
  }
347
+ ]);
348
+ return VapiAiWebhookServiceConfig;
349
+ }
350
+ ();
351
+
352
+ function asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, key, arg) {
353
+ try {
354
+ var info = gen[key](arg);
355
+ var value = info.value;
356
+ } catch (error) {
357
+ reject(error);
358
+ return;
359
+ }
360
+ if (info.done) {
361
+ resolve(value);
362
+ } else {
363
+ Promise.resolve(value).then(_next, _throw);
136
364
  }
137
365
  }
138
-
139
- /**
140
- * Service that makes system changes based on VapiAi webhook events.
141
- */
142
- exports.VapiAiWebhookService = class VapiAiWebhookService {
143
- logger = new common.Logger('VapiAiWebhookService');
144
- _verifier;
145
- handler = vapiaiEventHandlerFactory();
146
- configure = vapiaiEventHandlerConfigurerFactory(this.handler);
147
- constructor(vapiAiWebhookServiceConfig) {
148
- this._verifier = vapiAiWebhookEventVerifier(vapiAiWebhookServiceConfig.webhookConfig);
366
+ function _async_to_generator$1(fn) {
367
+ return function() {
368
+ var self = this, args = arguments;
369
+ return new Promise(function(resolve, reject) {
370
+ var gen = fn.apply(self, args);
371
+ function _next(value) {
372
+ asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, "next", value);
373
+ }
374
+ function _throw(err) {
375
+ asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, "throw", err);
376
+ }
377
+ _next(undefined);
378
+ });
379
+ };
380
+ }
381
+ function _class_call_check$5(instance, Constructor) {
382
+ if (!(instance instanceof Constructor)) {
383
+ throw new TypeError("Cannot call a class as a function");
149
384
  }
150
- async updateForWebhook(req, rawBody) {
151
- const { valid, event } = await this._verifier(req, rawBody);
152
- let result = {
153
- handled: false
154
- };
155
- if (!valid) {
156
- this.logger.warn('Received invalid Vapi.ai event: ', event);
385
+ }
386
+ function _defineProperties$3(target, props) {
387
+ for(var i = 0; i < props.length; i++){
388
+ var descriptor = props[i];
389
+ descriptor.enumerable = descriptor.enumerable || false;
390
+ descriptor.configurable = true;
391
+ if ("value" in descriptor) descriptor.writable = true;
392
+ Object.defineProperty(target, descriptor.key, descriptor);
393
+ }
394
+ }
395
+ function _create_class$3(Constructor, protoProps, staticProps) {
396
+ if (protoProps) _defineProperties$3(Constructor.prototype, protoProps);
397
+ return Constructor;
398
+ }
399
+ function _define_property$3(obj, key, value) {
400
+ if (key in obj) {
401
+ Object.defineProperty(obj, key, {
402
+ value: value,
403
+ enumerable: true,
404
+ configurable: true,
405
+ writable: true
406
+ });
407
+ } else {
408
+ obj[key] = value;
409
+ }
410
+ return obj;
411
+ }
412
+ function _object_spread(target) {
413
+ for(var i = 1; i < arguments.length; i++){
414
+ var source = arguments[i] != null ? arguments[i] : {};
415
+ var ownKeys = Object.keys(source);
416
+ if (typeof Object.getOwnPropertySymbols === "function") {
417
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
418
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
419
+ }));
157
420
  }
158
- else {
159
- result = await this.updateForVapiAiEvent(event);
421
+ ownKeys.forEach(function(key) {
422
+ _define_property$3(target, key, source[key]);
423
+ });
424
+ }
425
+ return target;
426
+ }
427
+ function _ts_generator$1(thisArg, body) {
428
+ var f, y, t, _ = {
429
+ label: 0,
430
+ sent: function() {
431
+ if (t[0] & 1) throw t[1];
432
+ return t[1];
433
+ },
434
+ trys: [],
435
+ ops: []
436
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
437
+ return d(g, "next", {
438
+ value: verb(0)
439
+ }), d(g, "throw", {
440
+ value: verb(1)
441
+ }), d(g, "return", {
442
+ value: verb(2)
443
+ }), typeof Symbol === "function" && d(g, Symbol.iterator, {
444
+ value: function() {
445
+ return this;
160
446
  }
161
- const response = {
162
- valid,
163
- event,
164
- ...result
447
+ }), g;
448
+ function verb(n) {
449
+ return function(v) {
450
+ return step([
451
+ n,
452
+ v
453
+ ]);
165
454
  };
166
- return response;
167
455
  }
168
- async updateForVapiAiEvent(event) {
169
- const result = await this.handler(event);
170
- if (!result.handled) {
171
- this.logger.warn('Received unexpected/unhandled Vapi.ai event: ', event);
456
+ function step(op) {
457
+ if (f) throw new TypeError("Generator is already executing.");
458
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
459
+ 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;
460
+ if (y = 0, t) op = [
461
+ op[0] & 2,
462
+ t.value
463
+ ];
464
+ switch(op[0]){
465
+ case 0:
466
+ case 1:
467
+ t = op;
468
+ break;
469
+ case 4:
470
+ _.label++;
471
+ return {
472
+ value: op[1],
473
+ done: false
474
+ };
475
+ case 5:
476
+ _.label++;
477
+ y = op[1];
478
+ op = [
479
+ 0
480
+ ];
481
+ continue;
482
+ case 7:
483
+ op = _.ops.pop();
484
+ _.trys.pop();
485
+ continue;
486
+ default:
487
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
488
+ _ = 0;
489
+ continue;
490
+ }
491
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
492
+ _.label = op[1];
493
+ break;
494
+ }
495
+ if (op[0] === 6 && _.label < t[1]) {
496
+ _.label = t[1];
497
+ t = op;
498
+ break;
499
+ }
500
+ if (t && _.label < t[2]) {
501
+ _.label = t[2];
502
+ _.ops.push(op);
503
+ break;
504
+ }
505
+ if (t[2]) _.ops.pop();
506
+ _.trys.pop();
507
+ continue;
508
+ }
509
+ op = body.call(thisArg, _);
510
+ } catch (e) {
511
+ op = [
512
+ 6,
513
+ e
514
+ ];
515
+ y = 0;
516
+ } finally{
517
+ f = t = 0;
172
518
  }
173
- return result;
519
+ if (op[0] & 5) throw op[1];
520
+ return {
521
+ value: op[0] ? op[1] : void 0,
522
+ done: true
523
+ };
174
524
  }
175
- };
525
+ }
526
+ /**
527
+ * Service that makes system changes based on VapiAi webhook events.
528
+ */ exports.VapiAiWebhookService = /*#__PURE__*/ function() {
529
+ function VapiAiWebhookService(vapiAiWebhookServiceConfig) {
530
+ _class_call_check$5(this, VapiAiWebhookService);
531
+ _define_property$3(this, "logger", new common.Logger('VapiAiWebhookService'));
532
+ _define_property$3(this, "_verifier", void 0);
533
+ _define_property$3(this, "handler", vapiaiEventHandlerFactory());
534
+ _define_property$3(this, "configure", vapiaiEventHandlerConfigurerFactory(this.handler));
535
+ this._verifier = vapiAiWebhookEventVerifier(vapiAiWebhookServiceConfig.webhookConfig);
536
+ }
537
+ _create_class$3(VapiAiWebhookService, [
538
+ {
539
+ key: "updateForWebhook",
540
+ value: function updateForWebhook(req, rawBody) {
541
+ return _async_to_generator$1(function() {
542
+ var _ref, valid, event, result, response;
543
+ return _ts_generator$1(this, function(_state) {
544
+ switch(_state.label){
545
+ case 0:
546
+ return [
547
+ 4,
548
+ this._verifier(req, rawBody)
549
+ ];
550
+ case 1:
551
+ _ref = _state.sent(), valid = _ref.valid, event = _ref.event;
552
+ result = {
553
+ handled: false
554
+ };
555
+ if (!!valid) return [
556
+ 3,
557
+ 2
558
+ ];
559
+ this.logger.warn('Received invalid Vapi.ai event: ', event);
560
+ return [
561
+ 3,
562
+ 4
563
+ ];
564
+ case 2:
565
+ return [
566
+ 4,
567
+ this.updateForVapiAiEvent(event)
568
+ ];
569
+ case 3:
570
+ result = _state.sent();
571
+ _state.label = 4;
572
+ case 4:
573
+ response = _object_spread({
574
+ valid: valid,
575
+ event: event
576
+ }, result);
577
+ return [
578
+ 2,
579
+ response
580
+ ];
581
+ }
582
+ });
583
+ }).call(this);
584
+ }
585
+ },
586
+ {
587
+ key: "updateForVapiAiEvent",
588
+ value: function updateForVapiAiEvent(event) {
589
+ return _async_to_generator$1(function() {
590
+ var result;
591
+ return _ts_generator$1(this, function(_state) {
592
+ switch(_state.label){
593
+ case 0:
594
+ return [
595
+ 4,
596
+ this.handler(event)
597
+ ];
598
+ case 1:
599
+ result = _state.sent();
600
+ if (!result.handled) {
601
+ this.logger.warn('Received unexpected/unhandled Vapi.ai event: ', event);
602
+ }
603
+ return [
604
+ 2,
605
+ result
606
+ ];
607
+ }
608
+ });
609
+ }).call(this);
610
+ }
611
+ }
612
+ ]);
613
+ return VapiAiWebhookService;
614
+ }();
176
615
  exports.VapiAiWebhookService = __decorate([
177
616
  common.Injectable(),
178
617
  __param(0, common.Inject(VapiAiWebhookServiceConfig))
179
618
  ], exports.VapiAiWebhookService);
180
619
 
181
- exports.VapiAiWebhookController = class VapiAiWebhookController {
182
- _vapiaiWebhookService;
183
- constructor(vapiaiWebhookService) {
184
- this._vapiaiWebhookService = vapiaiWebhookService;
620
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
621
+ try {
622
+ var info = gen[key](arg);
623
+ var value = info.value;
624
+ } catch (error) {
625
+ reject(error);
626
+ return;
627
+ }
628
+ if (info.done) {
629
+ resolve(value);
630
+ } else {
631
+ Promise.resolve(value).then(_next, _throw);
632
+ }
633
+ }
634
+ function _async_to_generator(fn) {
635
+ return function() {
636
+ var self = this, args = arguments;
637
+ return new Promise(function(resolve, reject) {
638
+ var gen = fn.apply(self, args);
639
+ function _next(value) {
640
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
641
+ }
642
+ function _throw(err) {
643
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
644
+ }
645
+ _next(undefined);
646
+ });
647
+ };
648
+ }
649
+ function _class_call_check$4(instance, Constructor) {
650
+ if (!(instance instanceof Constructor)) {
651
+ throw new TypeError("Cannot call a class as a function");
185
652
  }
186
- async handleVapiAiWebhook(res, req, rawBody) {
187
- const { valid, response: responseData } = await this._vapiaiWebhookService.updateForWebhook(req, rawBody);
188
- const response = res.status(200); // always return a 200 status code
189
- if (valid && responseData) {
190
- response.json(responseData);
653
+ }
654
+ function _defineProperties$2(target, props) {
655
+ for(var i = 0; i < props.length; i++){
656
+ var descriptor = props[i];
657
+ descriptor.enumerable = descriptor.enumerable || false;
658
+ descriptor.configurable = true;
659
+ if ("value" in descriptor) descriptor.writable = true;
660
+ Object.defineProperty(target, descriptor.key, descriptor);
661
+ }
662
+ }
663
+ function _create_class$2(Constructor, protoProps, staticProps) {
664
+ if (protoProps) _defineProperties$2(Constructor.prototype, protoProps);
665
+ return Constructor;
666
+ }
667
+ function _define_property$2(obj, key, value) {
668
+ if (key in obj) {
669
+ Object.defineProperty(obj, key, {
670
+ value: value,
671
+ enumerable: true,
672
+ configurable: true,
673
+ writable: true
674
+ });
675
+ } else {
676
+ obj[key] = value;
677
+ }
678
+ return obj;
679
+ }
680
+ function _ts_generator(thisArg, body) {
681
+ var f, y, t, _ = {
682
+ label: 0,
683
+ sent: function() {
684
+ if (t[0] & 1) throw t[1];
685
+ return t[1];
686
+ },
687
+ trys: [],
688
+ ops: []
689
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
690
+ return d(g, "next", {
691
+ value: verb(0)
692
+ }), d(g, "throw", {
693
+ value: verb(1)
694
+ }), d(g, "return", {
695
+ value: verb(2)
696
+ }), typeof Symbol === "function" && d(g, Symbol.iterator, {
697
+ value: function() {
698
+ return this;
191
699
  }
192
- else {
193
- response.json({});
700
+ }), g;
701
+ function verb(n) {
702
+ return function(v) {
703
+ return step([
704
+ n,
705
+ v
706
+ ]);
707
+ };
708
+ }
709
+ function step(op) {
710
+ if (f) throw new TypeError("Generator is already executing.");
711
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
712
+ 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;
713
+ if (y = 0, t) op = [
714
+ op[0] & 2,
715
+ t.value
716
+ ];
717
+ switch(op[0]){
718
+ case 0:
719
+ case 1:
720
+ t = op;
721
+ break;
722
+ case 4:
723
+ _.label++;
724
+ return {
725
+ value: op[1],
726
+ done: false
727
+ };
728
+ case 5:
729
+ _.label++;
730
+ y = op[1];
731
+ op = [
732
+ 0
733
+ ];
734
+ continue;
735
+ case 7:
736
+ op = _.ops.pop();
737
+ _.trys.pop();
738
+ continue;
739
+ default:
740
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
741
+ _ = 0;
742
+ continue;
743
+ }
744
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
745
+ _.label = op[1];
746
+ break;
747
+ }
748
+ if (op[0] === 6 && _.label < t[1]) {
749
+ _.label = t[1];
750
+ t = op;
751
+ break;
752
+ }
753
+ if (t && _.label < t[2]) {
754
+ _.label = t[2];
755
+ _.ops.push(op);
756
+ break;
757
+ }
758
+ if (t[2]) _.ops.pop();
759
+ _.trys.pop();
760
+ continue;
761
+ }
762
+ op = body.call(thisArg, _);
763
+ } catch (e) {
764
+ op = [
765
+ 6,
766
+ e
767
+ ];
768
+ y = 0;
769
+ } finally{
770
+ f = t = 0;
194
771
  }
772
+ if (op[0] & 5) throw op[1];
773
+ return {
774
+ value: op[0] ? op[1] : void 0,
775
+ done: true
776
+ };
195
777
  }
196
- };
778
+ }
779
+ exports.VapiAiWebhookController = /*#__PURE__*/ function() {
780
+ function VapiAiWebhookController(vapiaiWebhookService) {
781
+ _class_call_check$4(this, VapiAiWebhookController);
782
+ _define_property$2(this, "_vapiaiWebhookService", void 0);
783
+ this._vapiaiWebhookService = vapiaiWebhookService;
784
+ }
785
+ _create_class$2(VapiAiWebhookController, [
786
+ {
787
+ key: "handleVapiAiWebhook",
788
+ value: function handleVapiAiWebhook(res, req, rawBody) {
789
+ return _async_to_generator(function() {
790
+ var _ref, valid, responseData, response;
791
+ return _ts_generator(this, function(_state) {
792
+ switch(_state.label){
793
+ case 0:
794
+ return [
795
+ 4,
796
+ this._vapiaiWebhookService.updateForWebhook(req, rawBody)
797
+ ];
798
+ case 1:
799
+ _ref = _state.sent(), valid = _ref.valid, responseData = _ref.response;
800
+ response = res.status(200); // always return a 200 status code
801
+ if (valid && responseData) {
802
+ response.json(responseData);
803
+ } else {
804
+ response.json({});
805
+ }
806
+ return [
807
+ 2
808
+ ];
809
+ }
810
+ });
811
+ }).call(this);
812
+ }
813
+ }
814
+ ]);
815
+ return VapiAiWebhookController;
816
+ }();
197
817
  __decorate([
198
818
  common.Post(),
199
819
  __param(0, common.Res()),
@@ -205,8 +825,13 @@ exports.VapiAiWebhookController = __decorate([
205
825
  __param(0, common.Inject(exports.VapiAiWebhookService))
206
826
  ], exports.VapiAiWebhookController);
207
827
 
828
+ function _class_call_check$3(instance, Constructor) {
829
+ if (!(instance instanceof Constructor)) {
830
+ throw new TypeError("Cannot call a class as a function");
831
+ }
832
+ }
208
833
  function vapiaiWebhookServiceConfigFactory(configService) {
209
- const config = {
834
+ var config = {
210
835
  webhookConfig: {
211
836
  secret: configService.get(VAPI_AI_WEBHOOK_SECRET_TOKEN_ENV_VAR),
212
837
  hmacSecret: configService.get(VAPI_AI_WEBHOOK_HMAC_SECRET_TOKEN_ENV_VAR),
@@ -217,62 +842,155 @@ function vapiaiWebhookServiceConfigFactory(configService) {
217
842
  VapiAiWebhookServiceConfig.assertValidConfig(config);
218
843
  return config;
219
844
  }
220
- exports.VapiAiWebhookModule = class VapiAiWebhookModule {
845
+ exports.VapiAiWebhookModule = function VapiAiWebhookModule() {
846
+ _class_call_check$3(this, VapiAiWebhookModule);
221
847
  };
222
848
  exports.VapiAiWebhookModule = __decorate([
223
849
  common.Module({
224
- imports: [config.ConfigModule],
225
- controllers: [exports.VapiAiWebhookController],
850
+ imports: [
851
+ config.ConfigModule
852
+ ],
853
+ controllers: [
854
+ exports.VapiAiWebhookController
855
+ ],
226
856
  providers: [
227
857
  {
228
858
  provide: VapiAiWebhookServiceConfig,
229
- inject: [config.ConfigService],
859
+ inject: [
860
+ config.ConfigService
861
+ ],
230
862
  useFactory: vapiaiWebhookServiceConfigFactory
231
863
  },
232
864
  exports.VapiAiWebhookService
233
865
  ],
234
- exports: [exports.VapiAiWebhookService]
866
+ exports: [
867
+ exports.VapiAiWebhookService
868
+ ]
235
869
  })
236
870
  ], exports.VapiAiWebhookModule);
237
871
 
238
- const VAPI_AI_SECRET_TOKEN_ENV_VAR = 'VAPI_AI_SECRET_TOKEN';
872
+ function _class_call_check$2(instance, Constructor) {
873
+ if (!(instance instanceof Constructor)) {
874
+ throw new TypeError("Cannot call a class as a function");
875
+ }
876
+ }
877
+ function _defineProperties$1(target, props) {
878
+ for(var i = 0; i < props.length; i++){
879
+ var descriptor = props[i];
880
+ descriptor.enumerable = descriptor.enumerable || false;
881
+ descriptor.configurable = true;
882
+ if ("value" in descriptor) descriptor.writable = true;
883
+ Object.defineProperty(target, descriptor.key, descriptor);
884
+ }
885
+ }
886
+ function _create_class$1(Constructor, protoProps, staticProps) {
887
+ if (staticProps) _defineProperties$1(Constructor, staticProps);
888
+ return Constructor;
889
+ }
890
+ function _define_property$1(obj, key, value) {
891
+ if (key in obj) {
892
+ Object.defineProperty(obj, key, {
893
+ value: value,
894
+ enumerable: true,
895
+ configurable: true,
896
+ writable: true
897
+ });
898
+ } else {
899
+ obj[key] = value;
900
+ }
901
+ return obj;
902
+ }
903
+ var VAPI_AI_SECRET_TOKEN_ENV_VAR = 'VAPI_AI_SECRET_TOKEN';
239
904
  /**
240
905
  * Configuration for VapiAiService
241
- */
242
- class VapiAiServiceConfig {
243
- vapiai;
244
- static assertValidConfig(config) {
245
- if (!config.vapiai.config.token) {
246
- throw new Error('No Vapi.ai secret/token specified.');
906
+ */ var VapiAiServiceConfig = /*#__PURE__*/ function() {
907
+ function VapiAiServiceConfig() {
908
+ _class_call_check$2(this, VapiAiServiceConfig);
909
+ _define_property$1(this, "vapiai", void 0);
910
+ }
911
+ _create_class$1(VapiAiServiceConfig, null, [
912
+ {
913
+ key: "assertValidConfig",
914
+ value: function assertValidConfig(config) {
915
+ if (!config.vapiai.config.token) {
916
+ throw new Error('No Vapi.ai secret/token specified.');
917
+ }
918
+ }
247
919
  }
920
+ ]);
921
+ return VapiAiServiceConfig;
922
+ }
923
+ ();
924
+
925
+ function _class_call_check$1(instance, Constructor) {
926
+ if (!(instance instanceof Constructor)) {
927
+ throw new TypeError("Cannot call a class as a function");
248
928
  }
249
929
  }
250
-
251
- exports.VapiAiApi = class VapiAiApi {
252
- config;
253
- vapiClient;
254
- constructor(config) {
930
+ function _defineProperties(target, props) {
931
+ for(var i = 0; i < props.length; i++){
932
+ var descriptor = props[i];
933
+ descriptor.enumerable = descriptor.enumerable || false;
934
+ descriptor.configurable = true;
935
+ if ("value" in descriptor) descriptor.writable = true;
936
+ Object.defineProperty(target, descriptor.key, descriptor);
937
+ }
938
+ }
939
+ function _create_class(Constructor, protoProps, staticProps) {
940
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
941
+ return Constructor;
942
+ }
943
+ function _define_property(obj, key, value) {
944
+ if (key in obj) {
945
+ Object.defineProperty(obj, key, {
946
+ value: value,
947
+ enumerable: true,
948
+ configurable: true,
949
+ writable: true
950
+ });
951
+ } else {
952
+ obj[key] = value;
953
+ }
954
+ return obj;
955
+ }
956
+ exports.VapiAiApi = /*#__PURE__*/ function() {
957
+ function VapiAiApi(config) {
958
+ _class_call_check$1(this, VapiAiApi);
959
+ _define_property(this, "config", void 0);
960
+ _define_property(this, "vapiClient", void 0);
255
961
  this.config = config;
256
962
  this.vapiClient = new serverSdk.VapiClient(config.vapiai.config);
257
963
  }
258
- // MARK: Accessors
259
- /**
964
+ _create_class(VapiAiApi, [
965
+ {
966
+ // MARK: Accessors
967
+ /**
260
968
  * Gets a call by ID.
261
969
  *
262
970
  * @param callId
263
971
  * @returns
264
- */
265
- getCall(callId) {
266
- return this.vapiClient.calls.get({ id: callId });
267
- }
268
- };
972
+ */ key: "getCall",
973
+ value: function getCall(callId) {
974
+ return this.vapiClient.calls.get({
975
+ id: callId
976
+ });
977
+ }
978
+ }
979
+ ]);
980
+ return VapiAiApi;
981
+ }();
269
982
  exports.VapiAiApi = __decorate([
270
983
  common.Injectable(),
271
984
  __param(0, common.Inject(VapiAiServiceConfig))
272
985
  ], exports.VapiAiApi);
273
986
 
987
+ function _class_call_check(instance, Constructor) {
988
+ if (!(instance instanceof Constructor)) {
989
+ throw new TypeError("Cannot call a class as a function");
990
+ }
991
+ }
274
992
  function vapiaiServiceConfigFactory(configService) {
275
- const config = {
993
+ var config = {
276
994
  vapiai: {
277
995
  config: {
278
996
  token: configService.get(VAPI_AI_SECRET_TOKEN_ENV_VAR)
@@ -282,20 +1000,27 @@ function vapiaiServiceConfigFactory(configService) {
282
1000
  VapiAiServiceConfig.assertValidConfig(config);
283
1001
  return config;
284
1002
  }
285
- exports.VapiAiModule = class VapiAiModule {
1003
+ exports.VapiAiModule = function VapiAiModule() {
1004
+ _class_call_check(this, VapiAiModule);
286
1005
  };
287
1006
  exports.VapiAiModule = __decorate([
288
1007
  common.Module({
289
- imports: [config.ConfigModule],
1008
+ imports: [
1009
+ config.ConfigModule
1010
+ ],
290
1011
  providers: [
291
1012
  {
292
1013
  provide: VapiAiServiceConfig,
293
- inject: [config.ConfigService],
1014
+ inject: [
1015
+ config.ConfigService
1016
+ ],
294
1017
  useFactory: vapiaiServiceConfigFactory
295
1018
  },
296
1019
  exports.VapiAiApi
297
1020
  ],
298
- exports: [exports.VapiAiApi]
1021
+ exports: [
1022
+ exports.VapiAiApi
1023
+ ]
299
1024
  })
300
1025
  ], exports.VapiAiModule);
301
1026