@dereekb/nestjs 12.7.0 → 13.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/LICENSE +1 -1
  2. package/index.cjs.default.js +1 -0
  3. package/index.cjs.js +310 -0
  4. package/index.cjs.mjs +2 -0
  5. package/index.d.ts +1 -0
  6. package/index.esm.js +288 -0
  7. package/mailgun/index.cjs.default.js +1 -0
  8. package/mailgun/index.cjs.js +639 -0
  9. package/mailgun/index.cjs.mjs +2 -0
  10. package/mailgun/index.d.ts +1 -0
  11. package/mailgun/index.esm.js +626 -0
  12. package/mailgun/package.json +24 -4
  13. package/mailgun/src/lib/mailgun.d.ts +2 -2
  14. package/mailgun/src/lib/mailgun.type.d.ts +1 -1
  15. package/mailgun/src/lib/mailgun.util.d.ts +22 -17
  16. package/openai/index.cjs.default.js +1 -0
  17. package/openai/index.cjs.js +343 -0
  18. package/openai/index.cjs.mjs +2 -0
  19. package/openai/index.d.ts +1 -0
  20. package/openai/index.esm.js +326 -0
  21. package/openai/package.json +24 -6
  22. package/openai/src/lib/index.d.ts +0 -1
  23. package/openai/src/lib/webhook/webhook.openai.controller.d.ts +1 -1
  24. package/openai/src/lib/webhook/webhook.openai.d.ts +2 -2
  25. package/openai/src/lib/webhook/webhook.openai.service.d.ts +1 -1
  26. package/package.json +43 -36
  27. package/stripe/index.cjs.default.js +1 -0
  28. package/stripe/index.cjs.js +253 -0
  29. package/stripe/index.cjs.mjs +2 -0
  30. package/stripe/index.d.ts +1 -0
  31. package/stripe/index.esm.js +245 -0
  32. package/stripe/package.json +24 -6
  33. package/stripe/src/lib/index.d.ts +1 -1
  34. package/stripe/src/lib/stripe.module.d.ts +2 -2
  35. package/stripe/src/lib/webhook/webhook.stripe.controller.d.ts +1 -1
  36. package/typeform/index.cjs.default.js +1 -0
  37. package/typeform/index.cjs.js +395 -0
  38. package/typeform/index.cjs.mjs +2 -0
  39. package/typeform/index.d.ts +1 -0
  40. package/typeform/index.esm.js +380 -0
  41. package/typeform/package.json +24 -6
  42. package/typeform/src/lib/index.d.ts +0 -1
  43. package/typeform/src/lib/webhook/webhook.typeform.controller.d.ts +1 -1
  44. package/vapiai/index.cjs.default.js +1 -0
  45. package/vapiai/index.cjs.js +319 -0
  46. package/vapiai/index.cjs.mjs +2 -0
  47. package/vapiai/index.d.ts +1 -0
  48. package/vapiai/index.esm.js +310 -0
  49. package/vapiai/package.json +24 -6
  50. package/vapiai/src/lib/index.d.ts +0 -1
  51. package/vapiai/src/lib/vapiai.type.d.ts +3 -1
  52. package/vapiai/src/lib/webhook/webhook.vapiai.controller.d.ts +1 -1
  53. package/vapiai/src/lib/webhook/webhook.vapiai.d.ts +1 -9
  54. package/vapiai/src/lib/webhook/webhook.vapiai.types.d.ts +6 -34
  55. package/CHANGELOG.md +0 -2001
  56. package/mailgun/LICENSE +0 -21
  57. package/mailgun/src/index.js +0 -5
  58. package/mailgun/src/index.js.map +0 -1
  59. package/mailgun/src/lib/index.js +0 -10
  60. package/mailgun/src/lib/index.js.map +0 -1
  61. package/mailgun/src/lib/mailgun.api.js +0 -37
  62. package/mailgun/src/lib/mailgun.api.js.map +0 -1
  63. package/mailgun/src/lib/mailgun.config.js +0 -45
  64. package/mailgun/src/lib/mailgun.config.js.map +0 -1
  65. package/mailgun/src/lib/mailgun.js +0 -205
  66. package/mailgun/src/lib/mailgun.js.map +0 -1
  67. package/mailgun/src/lib/mailgun.service.js +0 -53
  68. package/mailgun/src/lib/mailgun.service.js.map +0 -1
  69. package/mailgun/src/lib/mailgun.service.module.js +0 -84
  70. package/mailgun/src/lib/mailgun.service.module.js.map +0 -1
  71. package/mailgun/src/lib/mailgun.type.js +0 -3
  72. package/mailgun/src/lib/mailgun.type.js.map +0 -1
  73. package/mailgun/src/lib/mailgun.util.js +0 -206
  74. package/mailgun/src/lib/mailgun.util.js.map +0 -1
  75. package/openai/LICENSE +0 -21
  76. package/openai/src/index.js +0 -5
  77. package/openai/src/index.js.map +0 -1
  78. package/openai/src/lib/index.js +0 -11
  79. package/openai/src/lib/index.js.map +0 -1
  80. package/openai/src/lib/openai.api.js +0 -22
  81. package/openai/src/lib/openai.api.js.map +0 -1
  82. package/openai/src/lib/openai.config.js +0 -29
  83. package/openai/src/lib/openai.config.js.map +0 -1
  84. package/openai/src/lib/openai.module.js +0 -41
  85. package/openai/src/lib/openai.module.js.map +0 -1
  86. package/openai/src/lib/openai.type.js +0 -3
  87. package/openai/src/lib/openai.type.js.map +0 -1
  88. package/openai/src/lib/openai.util.js +0 -48
  89. package/openai/src/lib/openai.util.js.map +0 -1
  90. package/openai/src/lib/webhook/index.js +0 -10
  91. package/openai/src/lib/webhook/index.js.map +0 -1
  92. package/openai/src/lib/webhook/webhook.openai.config.js +0 -17
  93. package/openai/src/lib/webhook/webhook.openai.config.js.map +0 -1
  94. package/openai/src/lib/webhook/webhook.openai.controller.js +0 -30
  95. package/openai/src/lib/webhook/webhook.openai.controller.js.map +0 -1
  96. package/openai/src/lib/webhook/webhook.openai.js +0 -41
  97. package/openai/src/lib/webhook/webhook.openai.js.map +0 -1
  98. package/openai/src/lib/webhook/webhook.openai.module.js +0 -39
  99. package/openai/src/lib/webhook/webhook.openai.module.js.map +0 -1
  100. package/openai/src/lib/webhook/webhook.openai.service.js +0 -48
  101. package/openai/src/lib/webhook/webhook.openai.service.js.map +0 -1
  102. package/openai/src/lib/webhook/webhook.openai.verify.js +0 -37
  103. package/openai/src/lib/webhook/webhook.openai.verify.js.map +0 -1
  104. package/src/index.js +0 -5
  105. package/src/index.js.map +0 -1
  106. package/src/lib/decorators/index.js +0 -6
  107. package/src/lib/decorators/index.js.map +0 -1
  108. package/src/lib/decorators/local.decorator.js +0 -17
  109. package/src/lib/decorators/local.decorator.js.map +0 -1
  110. package/src/lib/decorators/rawbody.js +0 -44
  111. package/src/lib/decorators/rawbody.js.map +0 -1
  112. package/src/lib/index.js +0 -7
  113. package/src/lib/index.js.map +0 -1
  114. package/src/lib/middlewares/index.js +0 -7
  115. package/src/lib/middlewares/index.js.map +0 -1
  116. package/src/lib/middlewares/json.middleware.js +0 -16
  117. package/src/lib/middlewares/json.middleware.js.map +0 -1
  118. package/src/lib/middlewares/rawbody.middleware.js +0 -16
  119. package/src/lib/middlewares/rawbody.middleware.js.map +0 -1
  120. package/src/lib/middlewares/webhook.js +0 -51
  121. package/src/lib/middlewares/webhook.js.map +0 -1
  122. package/src/lib/module/client/client.config.js +0 -13
  123. package/src/lib/module/client/client.config.js.map +0 -1
  124. package/src/lib/module/client/client.js +0 -8
  125. package/src/lib/module/client/client.js.map +0 -1
  126. package/src/lib/module/client/client.module.js +0 -36
  127. package/src/lib/module/client/client.module.js.map +0 -1
  128. package/src/lib/module/client/client.service.js +0 -30
  129. package/src/lib/module/client/client.service.js.map +0 -1
  130. package/src/lib/module/client/index.js +0 -8
  131. package/src/lib/module/client/index.js.map +0 -1
  132. package/src/lib/module/env/env.config.js +0 -14
  133. package/src/lib/module/env/env.config.js.map +0 -1
  134. package/src/lib/module/env/env.js +0 -10
  135. package/src/lib/module/env/env.js.map +0 -1
  136. package/src/lib/module/env/env.nest.js +0 -16
  137. package/src/lib/module/env/env.nest.js.map +0 -1
  138. package/src/lib/module/env/env.service.js +0 -33
  139. package/src/lib/module/env/env.service.js.map +0 -1
  140. package/src/lib/module/env/index.js +0 -8
  141. package/src/lib/module/env/index.js.map +0 -1
  142. package/src/lib/module/index.js +0 -7
  143. package/src/lib/module/index.js.map +0 -1
  144. package/src/lib/module/module.js +0 -26
  145. package/src/lib/module/module.js.map +0 -1
  146. package/stripe/LICENSE +0 -21
  147. package/stripe/src/index.js +0 -5
  148. package/stripe/src/index.js.map +0 -1
  149. package/stripe/src/lib/index.js +0 -8
  150. package/stripe/src/lib/index.js.map +0 -1
  151. package/stripe/src/lib/stripe.api.js +0 -40
  152. package/stripe/src/lib/stripe.api.js.map +0 -1
  153. package/stripe/src/lib/stripe.config.js +0 -19
  154. package/stripe/src/lib/stripe.config.js.map +0 -1
  155. package/stripe/src/lib/stripe.module.js +0 -41
  156. package/stripe/src/lib/stripe.module.js.map +0 -1
  157. package/stripe/src/lib/stripe.type.js +0 -4
  158. package/stripe/src/lib/stripe.type.js.map +0 -1
  159. package/stripe/src/lib/webhook/index.js +0 -8
  160. package/stripe/src/lib/webhook/index.js.map +0 -1
  161. package/stripe/src/lib/webhook/webhook.stripe.controller.js +0 -30
  162. package/stripe/src/lib/webhook/webhook.stripe.controller.js.map +0 -1
  163. package/stripe/src/lib/webhook/webhook.stripe.js +0 -67
  164. package/stripe/src/lib/webhook/webhook.stripe.js.map +0 -1
  165. package/stripe/src/lib/webhook/webhook.stripe.module.js +0 -20
  166. package/stripe/src/lib/webhook/webhook.stripe.module.js.map +0 -1
  167. package/stripe/src/lib/webhook/webhook.stripe.service.js +0 -36
  168. package/stripe/src/lib/webhook/webhook.stripe.service.js.map +0 -1
  169. package/typeform/LICENSE +0 -21
  170. package/typeform/src/index.js +0 -5
  171. package/typeform/src/index.js.map +0 -1
  172. package/typeform/src/lib/index.js +0 -11
  173. package/typeform/src/lib/index.js.map +0 -1
  174. package/typeform/src/lib/typeform.api.js +0 -22
  175. package/typeform/src/lib/typeform.api.js.map +0 -1
  176. package/typeform/src/lib/typeform.config.js +0 -21
  177. package/typeform/src/lib/typeform.config.js.map +0 -1
  178. package/typeform/src/lib/typeform.module.js +0 -39
  179. package/typeform/src/lib/typeform.module.js.map +0 -1
  180. package/typeform/src/lib/typeform.type.js +0 -3
  181. package/typeform/src/lib/typeform.type.js.map +0 -1
  182. package/typeform/src/lib/typeform.util.js +0 -26
  183. package/typeform/src/lib/typeform.util.js.map +0 -1
  184. package/typeform/src/lib/webhook/index.js +0 -12
  185. package/typeform/src/lib/webhook/index.js.map +0 -1
  186. package/typeform/src/lib/webhook/webhook.typeform.config.js +0 -17
  187. package/typeform/src/lib/webhook/webhook.typeform.config.js.map +0 -1
  188. package/typeform/src/lib/webhook/webhook.typeform.controller.js +0 -30
  189. package/typeform/src/lib/webhook/webhook.typeform.controller.js.map +0 -1
  190. package/typeform/src/lib/webhook/webhook.typeform.form.js +0 -113
  191. package/typeform/src/lib/webhook/webhook.typeform.form.js.map +0 -1
  192. package/typeform/src/lib/webhook/webhook.typeform.js +0 -27
  193. package/typeform/src/lib/webhook/webhook.typeform.js.map +0 -1
  194. package/typeform/src/lib/webhook/webhook.typeform.module.js +0 -38
  195. package/typeform/src/lib/webhook/webhook.typeform.module.js.map +0 -1
  196. package/typeform/src/lib/webhook/webhook.typeform.service.js +0 -45
  197. package/typeform/src/lib/webhook/webhook.typeform.service.js.map +0 -1
  198. package/typeform/src/lib/webhook/webhook.typeform.type.js +0 -3
  199. package/typeform/src/lib/webhook/webhook.typeform.type.js.map +0 -1
  200. package/typeform/src/lib/webhook/webhook.typeform.verify.js +0 -28
  201. package/typeform/src/lib/webhook/webhook.typeform.verify.js.map +0 -1
  202. package/vapiai/LICENSE +0 -21
  203. package/vapiai/src/index.js +0 -5
  204. package/vapiai/src/index.js.map +0 -1
  205. package/vapiai/src/lib/index.js +0 -10
  206. package/vapiai/src/lib/index.js.map +0 -1
  207. package/vapiai/src/lib/vapiai.api.js +0 -32
  208. package/vapiai/src/lib/vapiai.api.js.map +0 -1
  209. package/vapiai/src/lib/vapiai.config.js +0 -17
  210. package/vapiai/src/lib/vapiai.config.js.map +0 -1
  211. package/vapiai/src/lib/vapiai.module.js +0 -38
  212. package/vapiai/src/lib/vapiai.module.js.map +0 -1
  213. package/vapiai/src/lib/vapiai.type.js +0 -3
  214. package/vapiai/src/lib/vapiai.type.js.map +0 -1
  215. package/vapiai/src/lib/webhook/index.js +0 -10
  216. package/vapiai/src/lib/webhook/index.js.map +0 -1
  217. package/vapiai/src/lib/webhook/webhook.vapi.config.js +0 -20
  218. package/vapiai/src/lib/webhook/webhook.vapi.config.js.map +0 -1
  219. package/vapiai/src/lib/webhook/webhook.vapiai.controller.js +0 -38
  220. package/vapiai/src/lib/webhook/webhook.vapiai.controller.js.map +0 -1
  221. package/vapiai/src/lib/webhook/webhook.vapiai.js +0 -42
  222. package/vapiai/src/lib/webhook/webhook.vapiai.js.map +0 -1
  223. package/vapiai/src/lib/webhook/webhook.vapiai.module.js +0 -41
  224. package/vapiai/src/lib/webhook/webhook.vapiai.module.js.map +0 -1
  225. package/vapiai/src/lib/webhook/webhook.vapiai.service.js +0 -52
  226. package/vapiai/src/lib/webhook/webhook.vapiai.service.js.map +0 -1
  227. package/vapiai/src/lib/webhook/webhook.vapiai.types.js +0 -25
  228. package/vapiai/src/lib/webhook/webhook.vapiai.types.js.map +0 -1
  229. package/vapiai/src/lib/webhook/webhook.vapiai.verify.js +0 -49
  230. package/vapiai/src/lib/webhook/webhook.vapiai.verify.js.map +0 -1
@@ -0,0 +1,326 @@
1
+ import { handlerFactory, handlerConfigurerFactory, handlerMappedSetFunctionFactory } from '@dereekb/util';
2
+ import { RawBody } from '@dereekb/nestjs';
3
+ import { Injectable, Inject, Logger, Post, Req, Controller, Module } from '@nestjs/common';
4
+ import { OpenAI, InvalidWebhookSignatureError } from 'openai';
5
+ import { ConfigService, ConfigModule } from '@nestjs/config';
6
+
7
+ /**
8
+ * Creates a OpenAIWebhookEvent and treats the data as the input type.
9
+ *
10
+ * @param event
11
+ * @returns
12
+ */
13
+ function openAIWebhookEvent(event) {
14
+ return event;
15
+ }
16
+ const openaiEventHandlerFactory = handlerFactory((x) => x.type);
17
+ const openaiEventHandlerConfigurerFactory = handlerConfigurerFactory({
18
+ configurerForAccessor: (accessor) => {
19
+ // eslint-disable-next-line
20
+ const fnWithKey = handlerMappedSetFunctionFactory(accessor, openAIWebhookEvent);
21
+ const configurer = {
22
+ ...accessor,
23
+ handleBatchCancelled: fnWithKey('batch.cancelled'),
24
+ handleBatchCompleted: fnWithKey('batch.completed'),
25
+ handleBatchExpired: fnWithKey('batch.expired'),
26
+ handleBatchFailed: fnWithKey('batch.failed'),
27
+ handleEvalRunCanceled: fnWithKey('eval.run.canceled'),
28
+ handleEvalRunFailed: fnWithKey('eval.run.failed'),
29
+ handleEvalRunSucceeded: fnWithKey('eval.run.succeeded'),
30
+ handleFineTuningJobCancelled: fnWithKey('fine_tuning.job.cancelled'),
31
+ handleFineTuningJobFailed: fnWithKey('fine_tuning.job.failed'),
32
+ handleFineTuningJobSucceeded: fnWithKey('fine_tuning.job.succeeded'),
33
+ handleResponseCancelled: fnWithKey('response.cancelled'),
34
+ handleResponseCompleted: fnWithKey('response.completed'),
35
+ handleResponseFailed: fnWithKey('response.failed'),
36
+ handleResponseIncomplete: fnWithKey('response.incomplete')
37
+ };
38
+ return configurer;
39
+ }
40
+ });
41
+
42
+ const OPENAI_WEBHOOK_SECRET_TOKEN_ENV_VAR = 'OPENAI_WEBHOOK_SECRET_TOKEN';
43
+ /**
44
+ * Configuration for OpenAIService
45
+ */
46
+ class OpenAIWebhookServiceConfig {
47
+ openaiWebhook;
48
+ static assertValidConfig(config) {
49
+ if (!config.openaiWebhook.webhookSecret) {
50
+ throw new Error('No OpenAI webhook secret specified.');
51
+ }
52
+ }
53
+ }
54
+
55
+ /******************************************************************************
56
+ Copyright (c) Microsoft Corporation.
57
+
58
+ Permission to use, copy, modify, and/or distribute this software for any
59
+ purpose with or without fee is hereby granted.
60
+
61
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
62
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
63
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
64
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
65
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
66
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
67
+ PERFORMANCE OF THIS SOFTWARE.
68
+ ***************************************************************************** */
69
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
70
+
71
+
72
+ function __decorate(decorators, target, key, desc) {
73
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
74
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
75
+ 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;
76
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
77
+ }
78
+
79
+ function __param(paramIndex, decorator) {
80
+ return function (target, key) { decorator(target, key, paramIndex); }
81
+ }
82
+
83
+ function __metadata(metadataKey, metadataValue) {
84
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
85
+ }
86
+
87
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
88
+ var e = new Error(message);
89
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
90
+ };
91
+
92
+ /**
93
+ * Default environment variable for the OpenAI API key.
94
+ */
95
+ const OPENAI_API_KEY_ENV_VAR = 'OPENAI_API_KEY';
96
+ const OPENAI_BASE_URL_ENV_VAR = 'OPENAI_BASE_URL';
97
+ const OPENAI_ORGANIZATION_ID_ENV_VAR = 'OPENAI_ORG_ID';
98
+ const OPENAI_PROJECT_ID_ENV_VAR = 'OPENAI_PROJECT_ID';
99
+ /**
100
+ * Configuration for OpenAIService
101
+ */
102
+ class OpenAIServiceConfig {
103
+ openai;
104
+ static assertValidConfig(config) {
105
+ if (!config.openai.config.apiKey) {
106
+ throw new Error('No OpenAI API key specified.');
107
+ }
108
+ else if (!config.openai.config.organization) {
109
+ throw new Error('No OpenAI organization specified.');
110
+ }
111
+ else if (!config.openai.config.project) {
112
+ throw new Error('No OpenAI project specified.');
113
+ }
114
+ }
115
+ }
116
+
117
+ let OpenAIApi = class OpenAIApi {
118
+ config;
119
+ openAIClient;
120
+ constructor(config) {
121
+ this.config = config;
122
+ this.openAIClient = new OpenAI(config.openai.config);
123
+ }
124
+ };
125
+ OpenAIApi = __decorate([
126
+ Injectable(),
127
+ __param(0, Inject(OpenAIServiceConfig)),
128
+ __metadata("design:paramtypes", [OpenAIServiceConfig])
129
+ ], OpenAIApi);
130
+
131
+ /**
132
+ * Verifies a OpenAI webhook event header.
133
+ *
134
+ * @param vapiSecretTokenGetter The OpenAI secret token. The Vapi client allows for using an AsyncGetterOrValue type, so the verifier supports that as well.
135
+ * @returns A function that verifies a OpenAI webhook event.
136
+ */
137
+ function openAIWebhookEventVerifier(config) {
138
+ const { secret, client } = config;
139
+ return async (request, rawBody) => {
140
+ const headers = request.headers;
141
+ const requestBodyString = String(request.body);
142
+ let event;
143
+ let valid = false;
144
+ try {
145
+ event = await client.webhooks.unwrap(requestBodyString, headers, secret);
146
+ valid = true;
147
+ }
148
+ catch (e) {
149
+ if (e instanceof InvalidWebhookSignatureError) {
150
+ valid = false;
151
+ }
152
+ else {
153
+ throw e;
154
+ }
155
+ }
156
+ const result = {
157
+ valid,
158
+ event
159
+ };
160
+ return result;
161
+ };
162
+ }
163
+
164
+ /**
165
+ * Service that makes system changes based on OpenAI webhook events.
166
+ */
167
+ let OpenAIWebhookService = class OpenAIWebhookService {
168
+ logger = new Logger('OpenAIWebhookService');
169
+ _verifier;
170
+ handler = openaiEventHandlerFactory();
171
+ configure = openaiEventHandlerConfigurerFactory(this.handler);
172
+ constructor(openAiApi, openAIWebhookServiceConfig) {
173
+ const { webhookSecret } = openAIWebhookServiceConfig.openaiWebhook;
174
+ this._verifier = openAIWebhookEventVerifier({
175
+ secret: webhookSecret,
176
+ client: openAiApi.openAIClient
177
+ });
178
+ }
179
+ async updateForWebhook(req, rawBody) {
180
+ const result = await this._verifier(req, rawBody);
181
+ if (!result.valid) {
182
+ this.logger.warn('Received invalid OpenAI event.', req);
183
+ }
184
+ else {
185
+ await this.updateForOpenAIEvent(result.event);
186
+ }
187
+ }
188
+ async updateForOpenAIEvent(event) {
189
+ const result = await this.handler(event);
190
+ if (!result) {
191
+ this.logger.warn('Received unexpected/unhandled OpenAI event.', event);
192
+ }
193
+ }
194
+ };
195
+ OpenAIWebhookService = __decorate([
196
+ Injectable(),
197
+ __param(0, Inject(OpenAIApi)),
198
+ __param(1, Inject(OpenAIWebhookServiceConfig)),
199
+ __metadata("design:paramtypes", [OpenAIApi, OpenAIWebhookServiceConfig])
200
+ ], OpenAIWebhookService);
201
+
202
+ let OpenAIWebhookController = class OpenAIWebhookController {
203
+ _openaiWebhookService;
204
+ constructor(openaiWebhookService) {
205
+ this._openaiWebhookService = openaiWebhookService;
206
+ }
207
+ async handleOpenAIWebhook(req, rawBody) {
208
+ await this._openaiWebhookService.updateForWebhook(req, rawBody);
209
+ }
210
+ };
211
+ __decorate([
212
+ Post(),
213
+ __param(0, Req()),
214
+ __param(1, RawBody()),
215
+ __metadata("design:type", Function),
216
+ __metadata("design:paramtypes", [Object, Object]),
217
+ __metadata("design:returntype", Promise)
218
+ ], OpenAIWebhookController.prototype, "handleOpenAIWebhook", null);
219
+ OpenAIWebhookController = __decorate([
220
+ Controller('/webhook/openai'),
221
+ __param(0, Inject(OpenAIWebhookService)),
222
+ __metadata("design:paramtypes", [OpenAIWebhookService])
223
+ ], OpenAIWebhookController);
224
+
225
+ function openAIServiceConfigFactory(configService) {
226
+ const config = {
227
+ openai: {
228
+ config: {
229
+ apiKey: configService.get(OPENAI_API_KEY_ENV_VAR),
230
+ baseURL: configService.get(OPENAI_BASE_URL_ENV_VAR) ?? undefined,
231
+ organization: configService.get(OPENAI_ORGANIZATION_ID_ENV_VAR),
232
+ project: configService.get(OPENAI_PROJECT_ID_ENV_VAR)
233
+ }
234
+ }
235
+ };
236
+ OpenAIServiceConfig.assertValidConfig(config);
237
+ return config;
238
+ }
239
+ let OpenAIModule = class OpenAIModule {
240
+ };
241
+ OpenAIModule = __decorate([
242
+ Module({
243
+ imports: [ConfigModule],
244
+ providers: [
245
+ {
246
+ provide: OpenAIServiceConfig,
247
+ inject: [ConfigService],
248
+ useFactory: openAIServiceConfigFactory
249
+ },
250
+ OpenAIApi
251
+ ],
252
+ exports: [OpenAIApi]
253
+ })
254
+ ], OpenAIModule);
255
+
256
+ function openAIWebhookServiceConfigFactory(configService) {
257
+ const config = {
258
+ openaiWebhook: {
259
+ webhookSecret: configService.get(OPENAI_WEBHOOK_SECRET_TOKEN_ENV_VAR)
260
+ }
261
+ };
262
+ OpenAIWebhookServiceConfig.assertValidConfig(config);
263
+ return config;
264
+ }
265
+ let OpenAIWebhookModule = class OpenAIWebhookModule {
266
+ };
267
+ OpenAIWebhookModule = __decorate([
268
+ Module({
269
+ imports: [ConfigModule, OpenAIModule],
270
+ controllers: [OpenAIWebhookController],
271
+ providers: [
272
+ {
273
+ provide: OpenAIWebhookServiceConfig,
274
+ inject: [ConfigService],
275
+ useFactory: openAIWebhookServiceConfigFactory
276
+ },
277
+ OpenAIWebhookService
278
+ ],
279
+ exports: [OpenAIWebhookService]
280
+ })
281
+ ], OpenAIWebhookModule);
282
+
283
+ /**
284
+ * Returns true if the response has a json response.
285
+ *
286
+ * @param response
287
+ * @returns
288
+ */
289
+ function isParsedOpenAIJsonResponseWithJson(response) {
290
+ return response.isJsonResponse && Boolean(response.jsonResponse) && Boolean(response.jsonResponseFieldMap);
291
+ }
292
+ /**
293
+ * Parses the OpenAI response into a ParsedOpenAIJsonResponse.
294
+ *
295
+ * @param response The OpenAI response to parse.
296
+ * @returns The parsed OpenAI response.
297
+ */
298
+ function parseOpenAIJsonResponse(response) {
299
+ const output_text = typeof response === 'string' ? response : response.output_text;
300
+ let jsonResponse = undefined;
301
+ let jsonResponseFieldMap = undefined;
302
+ try {
303
+ jsonResponse = JSON.parse(output_text);
304
+ jsonResponseFieldMap = openAIJsonResponseFieldsMap(jsonResponse);
305
+ }
306
+ catch (e) {
307
+ // ignore
308
+ }
309
+ return {
310
+ output_text,
311
+ isJsonResponse: Boolean(jsonResponse),
312
+ jsonResponse,
313
+ jsonResponseFieldMap
314
+ };
315
+ }
316
+ /**
317
+ * Creates a map of the OpenAI json response fields.
318
+ *
319
+ * @param response The OpenAI json response to create a map from.
320
+ * @returns The map of the OpenAI json response fields.
321
+ */
322
+ function openAIJsonResponseFieldsMap(response) {
323
+ return new Map(response.fields.map((x) => [x.field_name, x.field_value]));
324
+ }
325
+
326
+ export { OPENAI_API_KEY_ENV_VAR, OPENAI_BASE_URL_ENV_VAR, OPENAI_ORGANIZATION_ID_ENV_VAR, OPENAI_PROJECT_ID_ENV_VAR, OPENAI_WEBHOOK_SECRET_TOKEN_ENV_VAR, OpenAIApi, OpenAIModule, OpenAIServiceConfig, OpenAIWebhookController, OpenAIWebhookModule, OpenAIWebhookService, OpenAIWebhookServiceConfig, isParsedOpenAIJsonResponseWithJson, openAIJsonResponseFieldsMap, openAIServiceConfigFactory, openAIWebhookEvent, openAIWebhookEventVerifier, openAIWebhookServiceConfigFactory, openaiEventHandlerConfigurerFactory, openaiEventHandlerFactory, parseOpenAIJsonResponse };
@@ -1,9 +1,27 @@
1
1
  {
2
2
  "name": "@dereekb/nestjs/openai",
3
- "version": "12.7.0",
4
- "type": "commonjs",
5
- "peerDependencies": {},
6
- "dependencies": {},
7
- "types": "./src/index.d.ts",
8
- "main": "./src/index.js"
3
+ "version": "13.0.1",
4
+ "peerDependencies": {
5
+ "@dereekb/date": "13.0.1",
6
+ "@dereekb/model": "13.0.1",
7
+ "@dereekb/nestjs": "13.0.1",
8
+ "@dereekb/rxjs": "13.0.1",
9
+ "@dereekb/util": "13.0.1",
10
+ "@nestjs/common": "^11.0.0",
11
+ "@nestjs/config": "^4.0.0",
12
+ "express": "^5.0.0",
13
+ "openai": "^5.12.2"
14
+ },
15
+ "exports": {
16
+ "./package.json": "./package.json",
17
+ ".": {
18
+ "module": "./index.esm.js",
19
+ "types": "./index.d.ts",
20
+ "import": "./index.cjs.mjs",
21
+ "default": "./index.cjs.js"
22
+ }
23
+ },
24
+ "module": "./index.esm.js",
25
+ "main": "./index.cjs.js",
26
+ "types": "./index.d.ts"
9
27
  }
@@ -1,7 +1,6 @@
1
1
  export * from './webhook';
2
2
  export * from './openai.module';
3
3
  export * from './openai.api';
4
- export * from './openai.module';
5
4
  export * from './openai.config';
6
5
  export * from './openai.type';
7
6
  export * from './openai.util';
@@ -1,4 +1,4 @@
1
- import { RawBodyBuffer } from '@dereekb/nestjs';
1
+ import { type RawBodyBuffer } from '@dereekb/nestjs';
2
2
  import { Request } from 'express';
3
3
  import { OpenAIWebhookService } from './webhook.openai.service';
4
4
  export declare class OpenAIWebhookController {
@@ -23,7 +23,7 @@ export type UntypedOpenAIWebhookEvent = UnwrapWebhookEvent;
23
23
  */
24
24
  export declare function openAIWebhookEvent<T extends UnwrapWebhookEvent = UnwrapWebhookEvent>(event: UntypedOpenAIWebhookEvent): OpenAIWebhookEvent<T>;
25
25
  export type OpenAIEventHandler = Handler<UntypedOpenAIWebhookEvent, OpenAIWebhookEventType>;
26
- export declare const openaiEventHandlerFactory: import("@dereekb/util").HandlerFactory<UnwrapWebhookEvent, "batch.cancelled" | "batch.completed" | "batch.expired" | "batch.failed" | "eval.run.canceled" | "eval.run.failed" | "eval.run.succeeded" | "fine_tuning.job.cancelled" | "fine_tuning.job.failed" | "fine_tuning.job.succeeded" | "response.cancelled" | "response.completed" | "response.failed" | "response.incomplete", boolean>;
26
+ export declare const openaiEventHandlerFactory: import("@dereekb/util").HandlerFactory<UnwrapWebhookEvent, "batch.cancelled" | "batch.completed" | "batch.expired" | "batch.failed" | "eval.run.canceled" | "eval.run.failed" | "eval.run.succeeded" | "fine_tuning.job.cancelled" | "fine_tuning.job.failed" | "fine_tuning.job.succeeded" | "realtime.call.incoming" | "response.cancelled" | "response.completed" | "response.failed" | "response.incomplete", boolean>;
27
27
  export type OpenAIHandlerMappedSetFunction<T extends UnwrapWebhookEvent = UnwrapWebhookEvent> = HandlerMappedSetFunction<OpenAIWebhookEvent<T>>;
28
28
  export interface OpenAIEventHandlerConfigurer extends HandlerBindAccessor<UntypedOpenAIWebhookEvent, OpenAIWebhookEventType> {
29
29
  readonly handleBatchCancelled: OpenAIHandlerMappedSetFunction<BatchCancelledWebhookEvent>;
@@ -41,4 +41,4 @@ export interface OpenAIEventHandlerConfigurer extends HandlerBindAccessor<Untype
41
41
  readonly handleResponseFailed: OpenAIHandlerMappedSetFunction<ResponseFailedWebhookEvent>;
42
42
  readonly handleResponseIncomplete: OpenAIHandlerMappedSetFunction<ResponseIncompleteWebhookEvent>;
43
43
  }
44
- export declare const openaiEventHandlerConfigurerFactory: import("@dereekb/util").HandlerConfigurerFactory<OpenAIEventHandlerConfigurer, UnwrapWebhookEvent, "batch.cancelled" | "batch.completed" | "batch.expired" | "batch.failed" | "eval.run.canceled" | "eval.run.failed" | "eval.run.succeeded" | "fine_tuning.job.cancelled" | "fine_tuning.job.failed" | "fine_tuning.job.succeeded" | "response.cancelled" | "response.completed" | "response.failed" | "response.incomplete", boolean>;
44
+ export declare const openaiEventHandlerConfigurerFactory: import("@dereekb/util").HandlerConfigurerFactory<OpenAIEventHandlerConfigurer, UnwrapWebhookEvent, "batch.cancelled" | "batch.completed" | "batch.expired" | "batch.failed" | "eval.run.canceled" | "eval.run.failed" | "eval.run.succeeded" | "fine_tuning.job.cancelled" | "fine_tuning.job.failed" | "fine_tuning.job.succeeded" | "realtime.call.incoming" | "response.cancelled" | "response.completed" | "response.failed" | "response.incomplete", boolean>;
@@ -10,7 +10,7 @@ export declare class OpenAIWebhookService {
10
10
  private readonly logger;
11
11
  private readonly _verifier;
12
12
  readonly handler: Handler<OpenAIWebhookEvent, OpenAIWebhookEventType>;
13
- readonly configure: import("@dereekb/util").HandlerConfigurer<import("./webhook.openai").OpenAIEventHandlerConfigurer, import("openai/resources/webhooks").UnwrapWebhookEvent, "batch.cancelled" | "batch.completed" | "batch.expired" | "batch.failed" | "eval.run.canceled" | "eval.run.failed" | "eval.run.succeeded" | "fine_tuning.job.cancelled" | "fine_tuning.job.failed" | "fine_tuning.job.succeeded" | "response.cancelled" | "response.completed" | "response.failed" | "response.incomplete", boolean>;
13
+ readonly configure: import("@dereekb/util").HandlerConfigurer<import("./webhook.openai").OpenAIEventHandlerConfigurer, import("openai/resources/webhooks.mjs").UnwrapWebhookEvent, "batch.cancelled" | "batch.completed" | "batch.expired" | "batch.failed" | "eval.run.canceled" | "eval.run.failed" | "eval.run.succeeded" | "fine_tuning.job.cancelled" | "fine_tuning.job.failed" | "fine_tuning.job.succeeded" | "realtime.call.incoming" | "response.cancelled" | "response.completed" | "response.failed" | "response.incomplete", boolean>;
14
14
  constructor(openAiApi: OpenAIApi, openAIWebhookServiceConfig: OpenAIWebhookServiceConfig);
15
15
  updateForWebhook(req: Request, rawBody: Buffer): Promise<void>;
16
16
  updateForOpenAIEvent(event: OpenAIWebhookEvent): Promise<void>;
package/package.json CHANGED
@@ -1,54 +1,61 @@
1
1
  {
2
2
  "name": "@dereekb/nestjs",
3
- "version": "12.7.0",
4
- "type": "commonjs",
3
+ "version": "13.0.1",
4
+ "types": "./src/index.d.ts",
5
+ "module": "./index.esm.js",
6
+ "main": "./index.cjs.js",
5
7
  "exports": {
6
- ".": {
7
- "types": "./src/index.d.ts",
8
- "main": "./src/index.js",
9
- "require": "./src/index.js",
10
- "default": "./src/index.js"
11
- },
12
8
  "./stripe": {
13
- "types": "./stripe/src/index.d.ts",
14
- "main": "./stripe/src/index.js",
15
- "require": "./stripe/src/index.js",
16
- "default": "./stripe/src/index.js"
9
+ "module": "./stripe/index.esm.js",
10
+ "types": "./stripe/index.d.ts",
11
+ "import": "./stripe/index.cjs.mjs",
12
+ "default": "./stripe/index.cjs.js"
17
13
  },
18
14
  "./mailgun": {
19
- "types": "./mailgun/src/index.d.ts",
20
- "main": "./mailgun/src/index.js",
21
- "require": "./mailgun/src/index.js",
22
- "default": "./mailgun/src/index.js"
15
+ "module": "./mailgun/index.esm.js",
16
+ "types": "./mailgun/index.d.ts",
17
+ "import": "./mailgun/index.cjs.mjs",
18
+ "default": "./mailgun/index.cjs.js"
23
19
  },
24
20
  "./vapiai": {
25
- "types": "./vapiai/src/index.d.ts",
26
- "main": "./vapiai/src/index.js",
27
- "require": "./vapiai/src/index.js",
28
- "default": "./vapiai/src/index.js"
21
+ "module": "./vapiai/index.esm.js",
22
+ "types": "./vapiai/index.d.ts",
23
+ "import": "./vapiai/index.cjs.mjs",
24
+ "default": "./vapiai/index.cjs.js"
29
25
  },
30
26
  "./openai": {
31
- "types": "./openai/src/index.d.ts",
32
- "main": "./openai/src/index.js",
33
- "require": "./openai/src/index.js",
34
- "default": "./openai/src/index.js"
27
+ "module": "./openai/index.esm.js",
28
+ "types": "./openai/index.d.ts",
29
+ "import": "./openai/index.cjs.mjs",
30
+ "default": "./openai/index.cjs.js"
35
31
  },
36
32
  "./typeform": {
37
- "types": "./typeform/src/index.d.ts",
38
- "main": "./typeform/src/index.js",
39
- "require": "./typeform/src/index.js",
40
- "default": "./typeform/src/index.js"
33
+ "module": "./typeform/index.esm.js",
34
+ "types": "./typeform/index.d.ts",
35
+ "import": "./typeform/index.cjs.mjs",
36
+ "default": "./typeform/index.cjs.js"
37
+ },
38
+ "./package.json": "./package.json",
39
+ ".": {
40
+ "module": "./index.esm.js",
41
+ "types": "./index.d.ts",
42
+ "import": "./index.cjs.mjs",
43
+ "default": "./index.cjs.js"
41
44
  }
42
45
  },
43
- "main": "./src/index.js",
44
- "types": "./src/index.d.ts",
45
46
  "peerDependencies": {
46
- "@nestjs/common": "^10.0.0",
47
- "express": "4.21.2",
48
- "raw-body": "2.5.2",
49
- "body-parser": "1.20.3",
50
- "@nestjs/config": "^3.0.0",
51
- "@dereekb/util": "*"
47
+ "@dereekb/util": "13.0.1",
48
+ "@nestjs/common": "^11.0.0",
49
+ "@nestjs/config": "^4.0.0",
50
+ "@typeform/api-client": "^2.5.1",
51
+ "@vapi-ai/server-sdk": "^0.11.0",
52
+ "body-parser": "^2.0.0",
53
+ "express": "^5.0.0",
54
+ "form-data": "^4.0.0",
55
+ "mailgun.js": "^12.0.0",
56
+ "openai": "^5.12.2",
57
+ "raw-body": "^3.0.0",
58
+ "stripe": "^9.1.0"
52
59
  },
53
60
  "dependencies": {}
54
61
  }
@@ -0,0 +1 @@
1
+ exports._default = require('./index.cjs.js').default;