@dereekb/nestjs 13.2.1 → 13.3.0

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