@dereekb/nestjs 12.7.0 → 13.0.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.
Files changed (218) hide show
  1. package/LICENSE +1 -1
  2. package/index.cjs.js +292 -0
  3. package/index.d.ts +1 -0
  4. package/index.esm.js +270 -0
  5. package/mailgun/index.cjs.js +646 -0
  6. package/mailgun/index.d.ts +1 -0
  7. package/mailgun/index.esm.js +633 -0
  8. package/mailgun/package.json +24 -3
  9. package/mailgun/src/lib/mailgun.d.ts +2 -2
  10. package/mailgun/src/lib/mailgun.type.d.ts +1 -1
  11. package/mailgun/src/lib/mailgun.util.d.ts +22 -17
  12. package/openai/index.cjs.js +310 -0
  13. package/openai/index.d.ts +1 -0
  14. package/openai/index.esm.js +293 -0
  15. package/openai/package.json +24 -5
  16. package/openai/src/lib/index.d.ts +0 -1
  17. package/openai/src/lib/webhook/webhook.openai.controller.d.ts +1 -1
  18. package/openai/src/lib/webhook/webhook.openai.d.ts +2 -2
  19. package/openai/src/lib/webhook/webhook.openai.service.d.ts +1 -1
  20. package/package.json +58 -28
  21. package/stripe/index.cjs.js +223 -0
  22. package/stripe/index.d.ts +1 -0
  23. package/stripe/index.esm.js +215 -0
  24. package/stripe/package.json +24 -5
  25. package/stripe/src/lib/index.d.ts +1 -1
  26. package/stripe/src/lib/stripe.module.d.ts +2 -2
  27. package/stripe/src/lib/webhook/webhook.stripe.controller.d.ts +1 -1
  28. package/typeform/index.cjs.js +378 -0
  29. package/typeform/index.d.ts +1 -0
  30. package/typeform/index.esm.js +363 -0
  31. package/typeform/package.json +24 -5
  32. package/typeform/src/lib/index.d.ts +0 -1
  33. package/typeform/src/lib/webhook/webhook.typeform.controller.d.ts +1 -1
  34. package/vapiai/index.cjs.js +306 -0
  35. package/vapiai/index.d.ts +1 -0
  36. package/vapiai/index.esm.js +297 -0
  37. package/vapiai/package.json +24 -5
  38. package/vapiai/src/lib/index.d.ts +0 -1
  39. package/vapiai/src/lib/vapiai.type.d.ts +3 -1
  40. package/vapiai/src/lib/webhook/webhook.vapiai.controller.d.ts +1 -1
  41. package/vapiai/src/lib/webhook/webhook.vapiai.d.ts +1 -9
  42. package/vapiai/src/lib/webhook/webhook.vapiai.types.d.ts +6 -34
  43. package/CHANGELOG.md +0 -2001
  44. package/mailgun/LICENSE +0 -21
  45. package/mailgun/src/index.js +0 -5
  46. package/mailgun/src/index.js.map +0 -1
  47. package/mailgun/src/lib/index.js +0 -10
  48. package/mailgun/src/lib/index.js.map +0 -1
  49. package/mailgun/src/lib/mailgun.api.js +0 -37
  50. package/mailgun/src/lib/mailgun.api.js.map +0 -1
  51. package/mailgun/src/lib/mailgun.config.js +0 -45
  52. package/mailgun/src/lib/mailgun.config.js.map +0 -1
  53. package/mailgun/src/lib/mailgun.js +0 -205
  54. package/mailgun/src/lib/mailgun.js.map +0 -1
  55. package/mailgun/src/lib/mailgun.service.js +0 -53
  56. package/mailgun/src/lib/mailgun.service.js.map +0 -1
  57. package/mailgun/src/lib/mailgun.service.module.js +0 -84
  58. package/mailgun/src/lib/mailgun.service.module.js.map +0 -1
  59. package/mailgun/src/lib/mailgun.type.js +0 -3
  60. package/mailgun/src/lib/mailgun.type.js.map +0 -1
  61. package/mailgun/src/lib/mailgun.util.js +0 -206
  62. package/mailgun/src/lib/mailgun.util.js.map +0 -1
  63. package/openai/LICENSE +0 -21
  64. package/openai/src/index.js +0 -5
  65. package/openai/src/index.js.map +0 -1
  66. package/openai/src/lib/index.js +0 -11
  67. package/openai/src/lib/index.js.map +0 -1
  68. package/openai/src/lib/openai.api.js +0 -22
  69. package/openai/src/lib/openai.api.js.map +0 -1
  70. package/openai/src/lib/openai.config.js +0 -29
  71. package/openai/src/lib/openai.config.js.map +0 -1
  72. package/openai/src/lib/openai.module.js +0 -41
  73. package/openai/src/lib/openai.module.js.map +0 -1
  74. package/openai/src/lib/openai.type.js +0 -3
  75. package/openai/src/lib/openai.type.js.map +0 -1
  76. package/openai/src/lib/openai.util.js +0 -48
  77. package/openai/src/lib/openai.util.js.map +0 -1
  78. package/openai/src/lib/webhook/index.js +0 -10
  79. package/openai/src/lib/webhook/index.js.map +0 -1
  80. package/openai/src/lib/webhook/webhook.openai.config.js +0 -17
  81. package/openai/src/lib/webhook/webhook.openai.config.js.map +0 -1
  82. package/openai/src/lib/webhook/webhook.openai.controller.js +0 -30
  83. package/openai/src/lib/webhook/webhook.openai.controller.js.map +0 -1
  84. package/openai/src/lib/webhook/webhook.openai.js +0 -41
  85. package/openai/src/lib/webhook/webhook.openai.js.map +0 -1
  86. package/openai/src/lib/webhook/webhook.openai.module.js +0 -39
  87. package/openai/src/lib/webhook/webhook.openai.module.js.map +0 -1
  88. package/openai/src/lib/webhook/webhook.openai.service.js +0 -48
  89. package/openai/src/lib/webhook/webhook.openai.service.js.map +0 -1
  90. package/openai/src/lib/webhook/webhook.openai.verify.js +0 -37
  91. package/openai/src/lib/webhook/webhook.openai.verify.js.map +0 -1
  92. package/src/index.js +0 -5
  93. package/src/index.js.map +0 -1
  94. package/src/lib/decorators/index.js +0 -6
  95. package/src/lib/decorators/index.js.map +0 -1
  96. package/src/lib/decorators/local.decorator.js +0 -17
  97. package/src/lib/decorators/local.decorator.js.map +0 -1
  98. package/src/lib/decorators/rawbody.js +0 -44
  99. package/src/lib/decorators/rawbody.js.map +0 -1
  100. package/src/lib/index.js +0 -7
  101. package/src/lib/index.js.map +0 -1
  102. package/src/lib/middlewares/index.js +0 -7
  103. package/src/lib/middlewares/index.js.map +0 -1
  104. package/src/lib/middlewares/json.middleware.js +0 -16
  105. package/src/lib/middlewares/json.middleware.js.map +0 -1
  106. package/src/lib/middlewares/rawbody.middleware.js +0 -16
  107. package/src/lib/middlewares/rawbody.middleware.js.map +0 -1
  108. package/src/lib/middlewares/webhook.js +0 -51
  109. package/src/lib/middlewares/webhook.js.map +0 -1
  110. package/src/lib/module/client/client.config.js +0 -13
  111. package/src/lib/module/client/client.config.js.map +0 -1
  112. package/src/lib/module/client/client.js +0 -8
  113. package/src/lib/module/client/client.js.map +0 -1
  114. package/src/lib/module/client/client.module.js +0 -36
  115. package/src/lib/module/client/client.module.js.map +0 -1
  116. package/src/lib/module/client/client.service.js +0 -30
  117. package/src/lib/module/client/client.service.js.map +0 -1
  118. package/src/lib/module/client/index.js +0 -8
  119. package/src/lib/module/client/index.js.map +0 -1
  120. package/src/lib/module/env/env.config.js +0 -14
  121. package/src/lib/module/env/env.config.js.map +0 -1
  122. package/src/lib/module/env/env.js +0 -10
  123. package/src/lib/module/env/env.js.map +0 -1
  124. package/src/lib/module/env/env.nest.js +0 -16
  125. package/src/lib/module/env/env.nest.js.map +0 -1
  126. package/src/lib/module/env/env.service.js +0 -33
  127. package/src/lib/module/env/env.service.js.map +0 -1
  128. package/src/lib/module/env/index.js +0 -8
  129. package/src/lib/module/env/index.js.map +0 -1
  130. package/src/lib/module/index.js +0 -7
  131. package/src/lib/module/index.js.map +0 -1
  132. package/src/lib/module/module.js +0 -26
  133. package/src/lib/module/module.js.map +0 -1
  134. package/stripe/LICENSE +0 -21
  135. package/stripe/src/index.js +0 -5
  136. package/stripe/src/index.js.map +0 -1
  137. package/stripe/src/lib/index.js +0 -8
  138. package/stripe/src/lib/index.js.map +0 -1
  139. package/stripe/src/lib/stripe.api.js +0 -40
  140. package/stripe/src/lib/stripe.api.js.map +0 -1
  141. package/stripe/src/lib/stripe.config.js +0 -19
  142. package/stripe/src/lib/stripe.config.js.map +0 -1
  143. package/stripe/src/lib/stripe.module.js +0 -41
  144. package/stripe/src/lib/stripe.module.js.map +0 -1
  145. package/stripe/src/lib/stripe.type.js +0 -4
  146. package/stripe/src/lib/stripe.type.js.map +0 -1
  147. package/stripe/src/lib/webhook/index.js +0 -8
  148. package/stripe/src/lib/webhook/index.js.map +0 -1
  149. package/stripe/src/lib/webhook/webhook.stripe.controller.js +0 -30
  150. package/stripe/src/lib/webhook/webhook.stripe.controller.js.map +0 -1
  151. package/stripe/src/lib/webhook/webhook.stripe.js +0 -67
  152. package/stripe/src/lib/webhook/webhook.stripe.js.map +0 -1
  153. package/stripe/src/lib/webhook/webhook.stripe.module.js +0 -20
  154. package/stripe/src/lib/webhook/webhook.stripe.module.js.map +0 -1
  155. package/stripe/src/lib/webhook/webhook.stripe.service.js +0 -36
  156. package/stripe/src/lib/webhook/webhook.stripe.service.js.map +0 -1
  157. package/typeform/LICENSE +0 -21
  158. package/typeform/src/index.js +0 -5
  159. package/typeform/src/index.js.map +0 -1
  160. package/typeform/src/lib/index.js +0 -11
  161. package/typeform/src/lib/index.js.map +0 -1
  162. package/typeform/src/lib/typeform.api.js +0 -22
  163. package/typeform/src/lib/typeform.api.js.map +0 -1
  164. package/typeform/src/lib/typeform.config.js +0 -21
  165. package/typeform/src/lib/typeform.config.js.map +0 -1
  166. package/typeform/src/lib/typeform.module.js +0 -39
  167. package/typeform/src/lib/typeform.module.js.map +0 -1
  168. package/typeform/src/lib/typeform.type.js +0 -3
  169. package/typeform/src/lib/typeform.type.js.map +0 -1
  170. package/typeform/src/lib/typeform.util.js +0 -26
  171. package/typeform/src/lib/typeform.util.js.map +0 -1
  172. package/typeform/src/lib/webhook/index.js +0 -12
  173. package/typeform/src/lib/webhook/index.js.map +0 -1
  174. package/typeform/src/lib/webhook/webhook.typeform.config.js +0 -17
  175. package/typeform/src/lib/webhook/webhook.typeform.config.js.map +0 -1
  176. package/typeform/src/lib/webhook/webhook.typeform.controller.js +0 -30
  177. package/typeform/src/lib/webhook/webhook.typeform.controller.js.map +0 -1
  178. package/typeform/src/lib/webhook/webhook.typeform.form.js +0 -113
  179. package/typeform/src/lib/webhook/webhook.typeform.form.js.map +0 -1
  180. package/typeform/src/lib/webhook/webhook.typeform.js +0 -27
  181. package/typeform/src/lib/webhook/webhook.typeform.js.map +0 -1
  182. package/typeform/src/lib/webhook/webhook.typeform.module.js +0 -38
  183. package/typeform/src/lib/webhook/webhook.typeform.module.js.map +0 -1
  184. package/typeform/src/lib/webhook/webhook.typeform.service.js +0 -45
  185. package/typeform/src/lib/webhook/webhook.typeform.service.js.map +0 -1
  186. package/typeform/src/lib/webhook/webhook.typeform.type.js +0 -3
  187. package/typeform/src/lib/webhook/webhook.typeform.type.js.map +0 -1
  188. package/typeform/src/lib/webhook/webhook.typeform.verify.js +0 -28
  189. package/typeform/src/lib/webhook/webhook.typeform.verify.js.map +0 -1
  190. package/vapiai/LICENSE +0 -21
  191. package/vapiai/src/index.js +0 -5
  192. package/vapiai/src/index.js.map +0 -1
  193. package/vapiai/src/lib/index.js +0 -10
  194. package/vapiai/src/lib/index.js.map +0 -1
  195. package/vapiai/src/lib/vapiai.api.js +0 -32
  196. package/vapiai/src/lib/vapiai.api.js.map +0 -1
  197. package/vapiai/src/lib/vapiai.config.js +0 -17
  198. package/vapiai/src/lib/vapiai.config.js.map +0 -1
  199. package/vapiai/src/lib/vapiai.module.js +0 -38
  200. package/vapiai/src/lib/vapiai.module.js.map +0 -1
  201. package/vapiai/src/lib/vapiai.type.js +0 -3
  202. package/vapiai/src/lib/vapiai.type.js.map +0 -1
  203. package/vapiai/src/lib/webhook/index.js +0 -10
  204. package/vapiai/src/lib/webhook/index.js.map +0 -1
  205. package/vapiai/src/lib/webhook/webhook.vapi.config.js +0 -20
  206. package/vapiai/src/lib/webhook/webhook.vapi.config.js.map +0 -1
  207. package/vapiai/src/lib/webhook/webhook.vapiai.controller.js +0 -38
  208. package/vapiai/src/lib/webhook/webhook.vapiai.controller.js.map +0 -1
  209. package/vapiai/src/lib/webhook/webhook.vapiai.js +0 -42
  210. package/vapiai/src/lib/webhook/webhook.vapiai.js.map +0 -1
  211. package/vapiai/src/lib/webhook/webhook.vapiai.module.js +0 -41
  212. package/vapiai/src/lib/webhook/webhook.vapiai.module.js.map +0 -1
  213. package/vapiai/src/lib/webhook/webhook.vapiai.service.js +0 -52
  214. package/vapiai/src/lib/webhook/webhook.vapiai.service.js.map +0 -1
  215. package/vapiai/src/lib/webhook/webhook.vapiai.types.js +0 -25
  216. package/vapiai/src/lib/webhook/webhook.vapiai.types.js.map +0 -1
  217. package/vapiai/src/lib/webhook/webhook.vapiai.verify.js +0 -49
  218. package/vapiai/src/lib/webhook/webhook.vapiai.verify.js.map +0 -1
@@ -1,12 +1,17 @@
1
1
  import { type Maybe, type NameEmailPair, type ArrayOrValue } from '@dereekb/util';
2
2
  import { type MailgunTemplateEmailRequestRecipientVariablesConfig, type MailgunRecipient, type MailgunTemplateEmailRequest } from './mailgun';
3
- import { type NotificationMessageEntityKey } from '@dereekb/firebase';
4
3
  /**
5
4
  * The default template subject to use when batch sending emails.
6
5
  *
7
6
  * This pulls the subject from each recipient's user variables.
8
7
  */
9
8
  export declare const MAILGUN_BATCH_SEND_RECIPIENT_SUBJECT_TEMPLATE = "%recipient.subject%";
9
+ /**
10
+ * Arbitrary key used by the sending configuration service for choosing a pre-configured entity.
11
+ *
12
+ * Typically used for customizing the "from" or "replyTo" addresses while maintaining a separation of concerns.
13
+ */
14
+ export type MailgunRecipientBatchSendTargetEntityKey = string;
10
15
  /**
11
16
  * A MailgunRecipient paired with additional cc/bcc values. This type is used by an ExpandMailgunRecipientBatchSendTargetRequestFactory to
12
17
  * build properly configured MailgunTemplateEmailRequest values for one or more MailgunRecipientBatchSendTarget.
@@ -23,7 +28,7 @@ export interface MailgunRecipientBatchSendTarget extends MailgunRecipient {
23
28
  *
24
29
  * Is ignored if from is set.
25
30
  */
26
- readonly fromKey?: Maybe<NotificationMessageEntityKey>;
31
+ readonly fromKey?: Maybe<MailgunRecipientBatchSendTargetEntityKey>;
27
32
  /**
28
33
  * The reply-to value to use for the request.
29
34
  *
@@ -35,7 +40,7 @@ export interface MailgunRecipientBatchSendTarget extends MailgunRecipient {
35
40
  *
36
41
  * Is ignored if replyTo is set.
37
42
  */
38
- readonly replyToKey?: Maybe<NotificationMessageEntityKey>;
43
+ readonly replyToKey?: Maybe<MailgunRecipientBatchSendTargetEntityKey>;
39
44
  /**
40
45
  * Carbon copy recipients.
41
46
  *
@@ -47,7 +52,7 @@ export interface MailgunRecipientBatchSendTarget extends MailgunRecipient {
47
52
  *
48
53
  * Are merged with cc when building the request.
49
54
  */
50
- readonly ccKeys?: Maybe<ArrayOrValue<NotificationMessageEntityKey>>;
55
+ readonly ccKeys?: Maybe<ArrayOrValue<MailgunRecipientBatchSendTargetEntityKey>>;
51
56
  /**
52
57
  * Blind carbon copy recipients.
53
58
  *
@@ -59,7 +64,7 @@ export interface MailgunRecipientBatchSendTarget extends MailgunRecipient {
59
64
  *
60
65
  * Are merged with bcc when building the request.
61
66
  */
62
- readonly bccKeys?: Maybe<ArrayOrValue<NotificationMessageEntityKey>>;
67
+ readonly bccKeys?: Maybe<ArrayOrValue<MailgunRecipientBatchSendTargetEntityKey>>;
63
68
  }
64
69
  /**
65
70
  * Composite key from the (lowercased) from/replyTo email addresses used to group MailgunRecipientBatchSendTarget values.
@@ -100,7 +105,7 @@ export interface ExpandMailgunRecipientBatchSendTargetRequestFactoryConfig {
100
105
  /**
101
106
  * Optional lookup for notification message entity keys.
102
107
  */
103
- readonly notificationMessageEntityKeyRecipientLookup?: Maybe<NotificationMessageEntityKeyRecipientLookup>;
108
+ readonly mailgunRecipientBatchSendTargetEntityKeyRecipientLookup?: Maybe<MailgunRecipientBatchSendTargetEntityKeyRecipientLookup>;
104
109
  /**
105
110
  * Whether or not to override the carbon copy variables with the carbon copy key recipients.
106
111
  *
@@ -125,11 +130,11 @@ export declare function expandMailgunRecipientBatchSendTargetRequestFactory(conf
125
130
  /**
126
131
  * A lookup for notification message entity keys to recipients.
127
132
  */
128
- export interface NotificationMessageEntityKeyRecipientLookup {
133
+ export interface MailgunRecipientBatchSendTargetEntityKeyRecipientLookup {
129
134
  /**
130
135
  * The map of recipients for the given keys.
131
136
  */
132
- readonly recipientsMap: Map<NotificationMessageEntityKey, NameEmailPair>;
137
+ readonly recipientsMap: Map<MailgunRecipientBatchSendTargetEntityKey, NameEmailPair>;
133
138
  /**
134
139
  * Returns the recipient for the given key, or the default recipient if the key is not found. If the input is nullish, returns the default recipient if one is defined, otherwise undefined.
135
140
  *
@@ -137,27 +142,27 @@ export interface NotificationMessageEntityKeyRecipientLookup {
137
142
  * @param defaultRecipient The default recipient to return if the key is not found.
138
143
  * @returns The recipient for the given key, or the default recipient if the key is not found.
139
144
  */
140
- getRecipientOrDefaultForKey(input: Maybe<NotificationMessageEntityKey>, defaultRecipient: NameEmailPair): NameEmailPair;
141
- getRecipientOrDefaultForKey(input: Maybe<NotificationMessageEntityKey>, defaultRecipient?: Maybe<NameEmailPair>): Maybe<NameEmailPair>;
145
+ getRecipientOrDefaultForKey(input: Maybe<MailgunRecipientBatchSendTargetEntityKey>, defaultRecipient: NameEmailPair): NameEmailPair;
146
+ getRecipientOrDefaultForKey(input: Maybe<MailgunRecipientBatchSendTargetEntityKey>, defaultRecipient?: Maybe<NameEmailPair>): Maybe<NameEmailPair>;
142
147
  /**
143
148
  * Returns the recipients for the given keys. If the input is nullish, returns undefined.
144
149
  *
145
150
  * @param input The keys to look up.
146
151
  * @returns The recipients for the given keys.
147
152
  */
148
- getRecipientsForKeys(input: Maybe<ArrayOrValue<NotificationMessageEntityKey>>): Maybe<NameEmailPair[]>;
149
- getRecipientsForKeys(input: ArrayOrValue<NotificationMessageEntityKey>): NameEmailPair[];
153
+ getRecipientsForKeys(input: Maybe<ArrayOrValue<MailgunRecipientBatchSendTargetEntityKey>>): Maybe<NameEmailPair[]>;
154
+ getRecipientsForKeys(input: ArrayOrValue<MailgunRecipientBatchSendTargetEntityKey>): NameEmailPair[];
150
155
  }
151
156
  /**
152
- * Configuration for notificationMessageEntityKeyRecipientLookup().
157
+ * Configuration for mailgunRecipientBatchSendTargetEntityKeyRecipientLookup().
153
158
  */
154
- export interface NotificationMessageEntityKeyRecipientLookupConfig {
155
- readonly recipientsMap: Map<NotificationMessageEntityKey, NameEmailPair>;
159
+ export interface MailgunRecipientBatchSendTargetEntityKeyRecipientLookupConfig {
160
+ readonly recipientsMap: Map<MailgunRecipientBatchSendTargetEntityKey, NameEmailPair>;
156
161
  }
157
162
  /**
158
- * Creates a NotificationMessageEntityKeyRecipientLookup given the input configuration.
163
+ * Creates a MailgunRecipientBatchSendTargetEntityKeyRecipientLookup given the input configuration.
159
164
  *
160
165
  * @param config The configuration for the lookup.
161
166
  * @returns The lookup.
162
167
  */
163
- export declare function notificationMessageEntityKeyRecipientLookup(config: NotificationMessageEntityKeyRecipientLookupConfig): NotificationMessageEntityKeyRecipientLookup;
168
+ export declare function mailgunRecipientBatchSendTargetEntityKeyRecipientLookup(config: MailgunRecipientBatchSendTargetEntityKeyRecipientLookupConfig): MailgunRecipientBatchSendTargetEntityKeyRecipientLookup;
@@ -0,0 +1,310 @@
1
+ 'use strict';
2
+
3
+ var util = require('@dereekb/util');
4
+ var nestjs = require('@dereekb/nestjs');
5
+ var common = require('@nestjs/common');
6
+ var openai = require('openai');
7
+ var config = require('@nestjs/config');
8
+
9
+ /**
10
+ * Creates a OpenAIWebhookEvent and treats the data as the input type.
11
+ *
12
+ * @param event
13
+ * @returns
14
+ */
15
+ function openAIWebhookEvent(event) {
16
+ return event;
17
+ }
18
+ const openaiEventHandlerFactory = util.handlerFactory(x => x.type);
19
+ const openaiEventHandlerConfigurerFactory = util.handlerConfigurerFactory({
20
+ configurerForAccessor: accessor => {
21
+ // eslint-disable-next-line
22
+ const fnWithKey = util.handlerMappedSetFunctionFactory(accessor, openAIWebhookEvent);
23
+ const configurer = {
24
+ ...accessor,
25
+ handleBatchCancelled: fnWithKey('batch.cancelled'),
26
+ handleBatchCompleted: fnWithKey('batch.completed'),
27
+ handleBatchExpired: fnWithKey('batch.expired'),
28
+ handleBatchFailed: fnWithKey('batch.failed'),
29
+ handleEvalRunCanceled: fnWithKey('eval.run.canceled'),
30
+ handleEvalRunFailed: fnWithKey('eval.run.failed'),
31
+ handleEvalRunSucceeded: fnWithKey('eval.run.succeeded'),
32
+ handleFineTuningJobCancelled: fnWithKey('fine_tuning.job.cancelled'),
33
+ handleFineTuningJobFailed: fnWithKey('fine_tuning.job.failed'),
34
+ handleFineTuningJobSucceeded: fnWithKey('fine_tuning.job.succeeded'),
35
+ handleResponseCancelled: fnWithKey('response.cancelled'),
36
+ handleResponseCompleted: fnWithKey('response.completed'),
37
+ handleResponseFailed: fnWithKey('response.failed'),
38
+ handleResponseIncomplete: fnWithKey('response.incomplete')
39
+ };
40
+ return configurer;
41
+ }
42
+ });
43
+
44
+ const OPENAI_WEBHOOK_SECRET_TOKEN_ENV_VAR = 'OPENAI_WEBHOOK_SECRET_TOKEN';
45
+ /**
46
+ * Configuration for OpenAIService
47
+ */
48
+ class OpenAIWebhookServiceConfig {
49
+ openaiWebhook;
50
+ static assertValidConfig(config) {
51
+ if (!config.openaiWebhook.webhookSecret) {
52
+ throw new Error('No OpenAI webhook secret specified.');
53
+ }
54
+ }
55
+ }
56
+
57
+ /******************************************************************************
58
+ Copyright (c) Microsoft Corporation.
59
+
60
+ Permission to use, copy, modify, and/or distribute this software for any
61
+ purpose with or without fee is hereby granted.
62
+
63
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
64
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
65
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
66
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
67
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
68
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
69
+ PERFORMANCE OF THIS SOFTWARE.
70
+ ***************************************************************************** */
71
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
72
+
73
+
74
+ function __decorate(decorators, target, key, desc) {
75
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
76
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
77
+ 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;
78
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
79
+ }
80
+
81
+ function __param(paramIndex, decorator) {
82
+ return function (target, key) { decorator(target, key, paramIndex); }
83
+ }
84
+
85
+ function __metadata(metadataKey, metadataValue) {
86
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
87
+ }
88
+
89
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
90
+ var e = new Error(message);
91
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
92
+ };
93
+
94
+ /**
95
+ * Default environment variable for the OpenAI API key.
96
+ */
97
+ const OPENAI_API_KEY_ENV_VAR = 'OPENAI_API_KEY';
98
+ const OPENAI_BASE_URL_ENV_VAR = 'OPENAI_BASE_URL';
99
+ const OPENAI_ORGANIZATION_ID_ENV_VAR = 'OPENAI_ORG_ID';
100
+ const OPENAI_PROJECT_ID_ENV_VAR = 'OPENAI_PROJECT_ID';
101
+ /**
102
+ * Configuration for OpenAIService
103
+ */
104
+ class OpenAIServiceConfig {
105
+ openai;
106
+ static assertValidConfig(config) {
107
+ if (!config.openai.config.apiKey) {
108
+ throw new Error('No OpenAI API key specified.');
109
+ } else if (!config.openai.config.organization) {
110
+ throw new Error('No OpenAI organization specified.');
111
+ } else if (!config.openai.config.project) {
112
+ throw new Error('No OpenAI project specified.');
113
+ }
114
+ }
115
+ }
116
+
117
+ exports.OpenAIApi = class OpenAIApi {
118
+ config;
119
+ openAIClient;
120
+ constructor(config) {
121
+ this.config = config;
122
+ this.openAIClient = new openai.OpenAI(config.openai.config);
123
+ }
124
+ };
125
+ exports.OpenAIApi = __decorate([common.Injectable(), __param(0, common.Inject(OpenAIServiceConfig)), __metadata("design:paramtypes", [OpenAIServiceConfig])], exports.OpenAIApi);
126
+
127
+ /**
128
+ * Verifies a OpenAI webhook event header.
129
+ *
130
+ * @param vapiSecretTokenGetter The OpenAI secret token. The Vapi client allows for using an AsyncGetterOrValue type, so the verifier supports that as well.
131
+ * @returns A function that verifies a OpenAI webhook event.
132
+ */
133
+ function openAIWebhookEventVerifier(config) {
134
+ const {
135
+ secret,
136
+ client
137
+ } = config;
138
+ return async (request, rawBody) => {
139
+ const headers = request.headers;
140
+ const requestBodyString = String(request.body);
141
+ let event;
142
+ let valid = false;
143
+ try {
144
+ event = await client.webhooks.unwrap(requestBodyString, headers, secret);
145
+ valid = true;
146
+ } catch (e) {
147
+ if (e instanceof openai.InvalidWebhookSignatureError) {
148
+ valid = false;
149
+ } else {
150
+ throw e;
151
+ }
152
+ }
153
+ const result = {
154
+ valid,
155
+ event
156
+ };
157
+ return result;
158
+ };
159
+ }
160
+
161
+ /**
162
+ * Service that makes system changes based on OpenAI webhook events.
163
+ */
164
+ exports.OpenAIWebhookService = class OpenAIWebhookService {
165
+ logger = new common.Logger('OpenAIWebhookService');
166
+ _verifier;
167
+ handler = openaiEventHandlerFactory();
168
+ configure = openaiEventHandlerConfigurerFactory(this.handler);
169
+ constructor(openAiApi, openAIWebhookServiceConfig) {
170
+ const {
171
+ webhookSecret
172
+ } = openAIWebhookServiceConfig.openaiWebhook;
173
+ this._verifier = openAIWebhookEventVerifier({
174
+ secret: webhookSecret,
175
+ client: openAiApi.openAIClient
176
+ });
177
+ }
178
+ async updateForWebhook(req, rawBody) {
179
+ const result = await this._verifier(req, rawBody);
180
+ if (!result.valid) {
181
+ this.logger.warn('Received invalid OpenAI event.', req);
182
+ } else {
183
+ await this.updateForOpenAIEvent(result.event);
184
+ }
185
+ }
186
+ async updateForOpenAIEvent(event) {
187
+ const result = await this.handler(event);
188
+ if (!result) {
189
+ this.logger.warn('Received unexpected/unhandled OpenAI event.', event);
190
+ }
191
+ }
192
+ };
193
+ exports.OpenAIWebhookService = __decorate([common.Injectable(), __param(0, common.Inject(exports.OpenAIApi)), __param(1, common.Inject(OpenAIWebhookServiceConfig)), __metadata("design:paramtypes", [exports.OpenAIApi, OpenAIWebhookServiceConfig])], exports.OpenAIWebhookService);
194
+
195
+ exports.OpenAIWebhookController = class OpenAIWebhookController {
196
+ _openaiWebhookService;
197
+ constructor(openaiWebhookService) {
198
+ this._openaiWebhookService = openaiWebhookService;
199
+ }
200
+ async handleOpenAIWebhook(req, rawBody) {
201
+ await this._openaiWebhookService.updateForWebhook(req, rawBody);
202
+ }
203
+ };
204
+ __decorate([common.Post(), __param(0, common.Req()), __param(1, nestjs.RawBody()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", Promise)], exports.OpenAIWebhookController.prototype, "handleOpenAIWebhook", null);
205
+ exports.OpenAIWebhookController = __decorate([common.Controller('/webhook/openai'), __param(0, common.Inject(exports.OpenAIWebhookService)), __metadata("design:paramtypes", [exports.OpenAIWebhookService])], exports.OpenAIWebhookController);
206
+
207
+ function openAIServiceConfigFactory(configService) {
208
+ const config = {
209
+ openai: {
210
+ config: {
211
+ apiKey: configService.get(OPENAI_API_KEY_ENV_VAR),
212
+ baseURL: configService.get(OPENAI_BASE_URL_ENV_VAR) ?? undefined,
213
+ organization: configService.get(OPENAI_ORGANIZATION_ID_ENV_VAR),
214
+ project: configService.get(OPENAI_PROJECT_ID_ENV_VAR)
215
+ }
216
+ }
217
+ };
218
+ OpenAIServiceConfig.assertValidConfig(config);
219
+ return config;
220
+ }
221
+ exports.OpenAIModule = class OpenAIModule {};
222
+ exports.OpenAIModule = __decorate([common.Module({
223
+ imports: [config.ConfigModule],
224
+ providers: [{
225
+ provide: OpenAIServiceConfig,
226
+ inject: [config.ConfigService],
227
+ useFactory: openAIServiceConfigFactory
228
+ }, exports.OpenAIApi],
229
+ exports: [exports.OpenAIApi]
230
+ })], exports.OpenAIModule);
231
+
232
+ function openAIWebhookServiceConfigFactory(configService) {
233
+ const config = {
234
+ openaiWebhook: {
235
+ webhookSecret: configService.get(OPENAI_WEBHOOK_SECRET_TOKEN_ENV_VAR)
236
+ }
237
+ };
238
+ OpenAIWebhookServiceConfig.assertValidConfig(config);
239
+ return config;
240
+ }
241
+ exports.OpenAIWebhookModule = class OpenAIWebhookModule {};
242
+ exports.OpenAIWebhookModule = __decorate([common.Module({
243
+ imports: [config.ConfigModule, exports.OpenAIModule],
244
+ controllers: [exports.OpenAIWebhookController],
245
+ providers: [{
246
+ provide: OpenAIWebhookServiceConfig,
247
+ inject: [config.ConfigService],
248
+ useFactory: openAIWebhookServiceConfigFactory
249
+ }, exports.OpenAIWebhookService],
250
+ exports: [exports.OpenAIWebhookService]
251
+ })], exports.OpenAIWebhookModule);
252
+
253
+ /**
254
+ * Returns true if the response has a json response.
255
+ *
256
+ * @param response
257
+ * @returns
258
+ */
259
+ function isParsedOpenAIJsonResponseWithJson(response) {
260
+ return response.isJsonResponse && Boolean(response.jsonResponse) && Boolean(response.jsonResponseFieldMap);
261
+ }
262
+ /**
263
+ * Parses the OpenAI response into a ParsedOpenAIJsonResponse.
264
+ *
265
+ * @param response The OpenAI response to parse.
266
+ * @returns The parsed OpenAI response.
267
+ */
268
+ function parseOpenAIJsonResponse(response) {
269
+ const output_text = typeof response === 'string' ? response : response.output_text;
270
+ let jsonResponse = undefined;
271
+ let jsonResponseFieldMap = undefined;
272
+ try {
273
+ jsonResponse = JSON.parse(output_text);
274
+ jsonResponseFieldMap = openAIJsonResponseFieldsMap(jsonResponse);
275
+ } catch (e) {
276
+ // ignore
277
+ }
278
+ return {
279
+ output_text,
280
+ isJsonResponse: Boolean(jsonResponse),
281
+ jsonResponse,
282
+ jsonResponseFieldMap
283
+ };
284
+ }
285
+ /**
286
+ * Creates a map of the OpenAI json response fields.
287
+ *
288
+ * @param response The OpenAI json response to create a map from.
289
+ * @returns The map of the OpenAI json response fields.
290
+ */
291
+ function openAIJsonResponseFieldsMap(response) {
292
+ return new Map(response.fields.map(x => [x.field_name, x.field_value]));
293
+ }
294
+
295
+ exports.OPENAI_API_KEY_ENV_VAR = OPENAI_API_KEY_ENV_VAR;
296
+ exports.OPENAI_BASE_URL_ENV_VAR = OPENAI_BASE_URL_ENV_VAR;
297
+ exports.OPENAI_ORGANIZATION_ID_ENV_VAR = OPENAI_ORGANIZATION_ID_ENV_VAR;
298
+ exports.OPENAI_PROJECT_ID_ENV_VAR = OPENAI_PROJECT_ID_ENV_VAR;
299
+ exports.OPENAI_WEBHOOK_SECRET_TOKEN_ENV_VAR = OPENAI_WEBHOOK_SECRET_TOKEN_ENV_VAR;
300
+ exports.OpenAIServiceConfig = OpenAIServiceConfig;
301
+ exports.OpenAIWebhookServiceConfig = OpenAIWebhookServiceConfig;
302
+ exports.isParsedOpenAIJsonResponseWithJson = isParsedOpenAIJsonResponseWithJson;
303
+ exports.openAIJsonResponseFieldsMap = openAIJsonResponseFieldsMap;
304
+ exports.openAIServiceConfigFactory = openAIServiceConfigFactory;
305
+ exports.openAIWebhookEvent = openAIWebhookEvent;
306
+ exports.openAIWebhookEventVerifier = openAIWebhookEventVerifier;
307
+ exports.openAIWebhookServiceConfigFactory = openAIWebhookServiceConfigFactory;
308
+ exports.openaiEventHandlerConfigurerFactory = openaiEventHandlerConfigurerFactory;
309
+ exports.openaiEventHandlerFactory = openaiEventHandlerFactory;
310
+ exports.parseOpenAIJsonResponse = parseOpenAIJsonResponse;
@@ -0,0 +1 @@
1
+ export * from "./src/index";