@dereekb/nestjs 12.6.21 → 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 -1997
  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
@@ -0,0 +1,293 @@
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
+ } else if (!config.openai.config.organization) {
108
+ throw new Error('No OpenAI organization specified.');
109
+ } else if (!config.openai.config.project) {
110
+ throw new Error('No OpenAI project specified.');
111
+ }
112
+ }
113
+ }
114
+
115
+ let OpenAIApi = class OpenAIApi {
116
+ config;
117
+ openAIClient;
118
+ constructor(config) {
119
+ this.config = config;
120
+ this.openAIClient = new OpenAI(config.openai.config);
121
+ }
122
+ };
123
+ OpenAIApi = __decorate([Injectable(), __param(0, Inject(OpenAIServiceConfig)), __metadata("design:paramtypes", [OpenAIServiceConfig])], OpenAIApi);
124
+
125
+ /**
126
+ * Verifies a OpenAI webhook event header.
127
+ *
128
+ * @param vapiSecretTokenGetter The OpenAI secret token. The Vapi client allows for using an AsyncGetterOrValue type, so the verifier supports that as well.
129
+ * @returns A function that verifies a OpenAI webhook event.
130
+ */
131
+ function openAIWebhookEventVerifier(config) {
132
+ const {
133
+ secret,
134
+ client
135
+ } = config;
136
+ return async (request, rawBody) => {
137
+ const headers = request.headers;
138
+ const requestBodyString = String(request.body);
139
+ let event;
140
+ let valid = false;
141
+ try {
142
+ event = await client.webhooks.unwrap(requestBodyString, headers, secret);
143
+ valid = true;
144
+ } catch (e) {
145
+ if (e instanceof InvalidWebhookSignatureError) {
146
+ valid = false;
147
+ } else {
148
+ throw e;
149
+ }
150
+ }
151
+ const result = {
152
+ valid,
153
+ event
154
+ };
155
+ return result;
156
+ };
157
+ }
158
+
159
+ /**
160
+ * Service that makes system changes based on OpenAI webhook events.
161
+ */
162
+ let OpenAIWebhookService = class OpenAIWebhookService {
163
+ logger = new Logger('OpenAIWebhookService');
164
+ _verifier;
165
+ handler = openaiEventHandlerFactory();
166
+ configure = openaiEventHandlerConfigurerFactory(this.handler);
167
+ constructor(openAiApi, openAIWebhookServiceConfig) {
168
+ const {
169
+ webhookSecret
170
+ } = openAIWebhookServiceConfig.openaiWebhook;
171
+ this._verifier = openAIWebhookEventVerifier({
172
+ secret: webhookSecret,
173
+ client: openAiApi.openAIClient
174
+ });
175
+ }
176
+ async updateForWebhook(req, rawBody) {
177
+ const result = await this._verifier(req, rawBody);
178
+ if (!result.valid) {
179
+ this.logger.warn('Received invalid OpenAI event.', req);
180
+ } else {
181
+ await this.updateForOpenAIEvent(result.event);
182
+ }
183
+ }
184
+ async updateForOpenAIEvent(event) {
185
+ const result = await this.handler(event);
186
+ if (!result) {
187
+ this.logger.warn('Received unexpected/unhandled OpenAI event.', event);
188
+ }
189
+ }
190
+ };
191
+ OpenAIWebhookService = __decorate([Injectable(), __param(0, Inject(OpenAIApi)), __param(1, Inject(OpenAIWebhookServiceConfig)), __metadata("design:paramtypes", [OpenAIApi, OpenAIWebhookServiceConfig])], OpenAIWebhookService);
192
+
193
+ let OpenAIWebhookController = class OpenAIWebhookController {
194
+ _openaiWebhookService;
195
+ constructor(openaiWebhookService) {
196
+ this._openaiWebhookService = openaiWebhookService;
197
+ }
198
+ async handleOpenAIWebhook(req, rawBody) {
199
+ await this._openaiWebhookService.updateForWebhook(req, rawBody);
200
+ }
201
+ };
202
+ __decorate([Post(), __param(0, Req()), __param(1, RawBody()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", Promise)], OpenAIWebhookController.prototype, "handleOpenAIWebhook", null);
203
+ OpenAIWebhookController = __decorate([Controller('/webhook/openai'), __param(0, Inject(OpenAIWebhookService)), __metadata("design:paramtypes", [OpenAIWebhookService])], OpenAIWebhookController);
204
+
205
+ function openAIServiceConfigFactory(configService) {
206
+ const config = {
207
+ openai: {
208
+ config: {
209
+ apiKey: configService.get(OPENAI_API_KEY_ENV_VAR),
210
+ baseURL: configService.get(OPENAI_BASE_URL_ENV_VAR) ?? undefined,
211
+ organization: configService.get(OPENAI_ORGANIZATION_ID_ENV_VAR),
212
+ project: configService.get(OPENAI_PROJECT_ID_ENV_VAR)
213
+ }
214
+ }
215
+ };
216
+ OpenAIServiceConfig.assertValidConfig(config);
217
+ return config;
218
+ }
219
+ let OpenAIModule = class OpenAIModule {};
220
+ OpenAIModule = __decorate([Module({
221
+ imports: [ConfigModule],
222
+ providers: [{
223
+ provide: OpenAIServiceConfig,
224
+ inject: [ConfigService],
225
+ useFactory: openAIServiceConfigFactory
226
+ }, OpenAIApi],
227
+ exports: [OpenAIApi]
228
+ })], OpenAIModule);
229
+
230
+ function openAIWebhookServiceConfigFactory(configService) {
231
+ const config = {
232
+ openaiWebhook: {
233
+ webhookSecret: configService.get(OPENAI_WEBHOOK_SECRET_TOKEN_ENV_VAR)
234
+ }
235
+ };
236
+ OpenAIWebhookServiceConfig.assertValidConfig(config);
237
+ return config;
238
+ }
239
+ let OpenAIWebhookModule = class OpenAIWebhookModule {};
240
+ OpenAIWebhookModule = __decorate([Module({
241
+ imports: [ConfigModule, OpenAIModule],
242
+ controllers: [OpenAIWebhookController],
243
+ providers: [{
244
+ provide: OpenAIWebhookServiceConfig,
245
+ inject: [ConfigService],
246
+ useFactory: openAIWebhookServiceConfigFactory
247
+ }, OpenAIWebhookService],
248
+ exports: [OpenAIWebhookService]
249
+ })], OpenAIWebhookModule);
250
+
251
+ /**
252
+ * Returns true if the response has a json response.
253
+ *
254
+ * @param response
255
+ * @returns
256
+ */
257
+ function isParsedOpenAIJsonResponseWithJson(response) {
258
+ return response.isJsonResponse && Boolean(response.jsonResponse) && Boolean(response.jsonResponseFieldMap);
259
+ }
260
+ /**
261
+ * Parses the OpenAI response into a ParsedOpenAIJsonResponse.
262
+ *
263
+ * @param response The OpenAI response to parse.
264
+ * @returns The parsed OpenAI response.
265
+ */
266
+ function parseOpenAIJsonResponse(response) {
267
+ const output_text = typeof response === 'string' ? response : response.output_text;
268
+ let jsonResponse = undefined;
269
+ let jsonResponseFieldMap = undefined;
270
+ try {
271
+ jsonResponse = JSON.parse(output_text);
272
+ jsonResponseFieldMap = openAIJsonResponseFieldsMap(jsonResponse);
273
+ } catch (e) {
274
+ // ignore
275
+ }
276
+ return {
277
+ output_text,
278
+ isJsonResponse: Boolean(jsonResponse),
279
+ jsonResponse,
280
+ jsonResponseFieldMap
281
+ };
282
+ }
283
+ /**
284
+ * Creates a map of the OpenAI json response fields.
285
+ *
286
+ * @param response The OpenAI json response to create a map from.
287
+ * @returns The map of the OpenAI json response fields.
288
+ */
289
+ function openAIJsonResponseFieldsMap(response) {
290
+ return new Map(response.fields.map(x => [x.field_name, x.field_value]));
291
+ }
292
+
293
+ 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,28 @@
1
1
  {
2
2
  "name": "@dereekb/nestjs/openai",
3
- "version": "12.6.21",
4
- "type": "commonjs",
5
- "peerDependencies": {},
6
- "dependencies": {},
3
+ "version": "13.0.0",
7
4
  "types": "./src/index.d.ts",
8
- "main": "./src/index.js"
5
+ "module": "./index.esm.js",
6
+ "main": "./index.cjs.js",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./src/index.d.ts",
10
+ "node": {
11
+ "require": "./index.cjs.js"
12
+ },
13
+ "browser": {
14
+ "require": "./index.cjs.js",
15
+ "import": "./index.esm.js"
16
+ },
17
+ "default": "./index.cjs.js"
18
+ }
19
+ },
20
+ "peerDependencies": {
21
+ "@dereekb/util": "13.0.0",
22
+ "@dereekb/date": "13.0.0",
23
+ "@dereekb/nestjs": "13.0.0",
24
+ "@dereekb/model": "13.0.0",
25
+ "@dereekb/rxjs": "13.0.0",
26
+ "core-js": "^3.0.0"
27
+ }
9
28
  }
@@ -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,84 @@
1
1
  {
2
2
  "name": "@dereekb/nestjs",
3
- "version": "12.6.21",
4
- "type": "commonjs",
3
+ "version": "13.0.0",
4
+ "types": "./src/index.d.ts",
5
+ "module": "./index.esm.js",
6
+ "main": "./index.cjs.js",
5
7
  "exports": {
6
8
  ".": {
7
9
  "types": "./src/index.d.ts",
8
- "main": "./src/index.js",
9
- "require": "./src/index.js",
10
- "default": "./src/index.js"
10
+ "node": {
11
+ "require": "./index.cjs.js"
12
+ },
13
+ "browser": {
14
+ "require": "./index.cjs.js",
15
+ "import": "./index.esm.js"
16
+ },
17
+ "default": "./index.cjs.js"
11
18
  },
12
19
  "./stripe": {
13
20
  "types": "./stripe/src/index.d.ts",
14
- "main": "./stripe/src/index.js",
15
- "require": "./stripe/src/index.js",
16
- "default": "./stripe/src/index.js"
21
+ "node": {
22
+ "require": "./stripe/index.cjs.js"
23
+ },
24
+ "browser": {
25
+ "require": "./stripe/index.cjs.js",
26
+ "import": "./stripe/index.esm.js"
27
+ },
28
+ "default": "./stripe/index.cjs.js"
17
29
  },
18
30
  "./mailgun": {
19
31
  "types": "./mailgun/src/index.d.ts",
20
- "main": "./mailgun/src/index.js",
21
- "require": "./mailgun/src/index.js",
22
- "default": "./mailgun/src/index.js"
32
+ "node": {
33
+ "require": "./mailgun/index.cjs.js"
34
+ },
35
+ "browser": {
36
+ "require": "./mailgun/index.cjs.js",
37
+ "import": "./mailgun/index.esm.js"
38
+ },
39
+ "default": "./mailgun/index.cjs.js"
23
40
  },
24
41
  "./vapiai": {
25
42
  "types": "./vapiai/src/index.d.ts",
26
- "main": "./vapiai/src/index.js",
27
- "require": "./vapiai/src/index.js",
28
- "default": "./vapiai/src/index.js"
43
+ "node": {
44
+ "require": "./vapiai/index.cjs.js"
45
+ },
46
+ "browser": {
47
+ "require": "./vapiai/index.cjs.js",
48
+ "import": "./vapiai/index.esm.js"
49
+ },
50
+ "default": "./vapiai/index.cjs.js"
29
51
  },
30
52
  "./openai": {
31
53
  "types": "./openai/src/index.d.ts",
32
- "main": "./openai/src/index.js",
33
- "require": "./openai/src/index.js",
34
- "default": "./openai/src/index.js"
54
+ "node": {
55
+ "require": "./openai/index.cjs.js"
56
+ },
57
+ "browser": {
58
+ "require": "./openai/index.cjs.js",
59
+ "import": "./openai/index.esm.js"
60
+ },
61
+ "default": "./openai/index.cjs.js"
35
62
  },
36
63
  "./typeform": {
37
64
  "types": "./typeform/src/index.d.ts",
38
- "main": "./typeform/src/index.js",
39
- "require": "./typeform/src/index.js",
40
- "default": "./typeform/src/index.js"
65
+ "node": {
66
+ "require": "./typeform/index.cjs.js"
67
+ },
68
+ "browser": {
69
+ "require": "./typeform/index.cjs.js",
70
+ "import": "./typeform/index.esm.js"
71
+ },
72
+ "default": "./typeform/index.cjs.js"
41
73
  }
42
74
  },
43
- "main": "./src/index.js",
44
- "types": "./src/index.d.ts",
45
75
  "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": "*"
76
+ "@nestjs/common": "^11.0.0",
77
+ "express": "^5.0.0",
78
+ "raw-body": "^3.0.0",
79
+ "body-parser": "^2.0.0",
80
+ "@nestjs/config": "^4.0.0",
81
+ "@dereekb/util": "13.0.0"
52
82
  },
53
83
  "dependencies": {}
54
84
  }