@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,378 @@
1
+ 'use strict';
2
+
3
+ var util = require('@dereekb/util');
4
+ var nestjs = require('@dereekb/nestjs');
5
+ var common = require('@nestjs/common');
6
+ var crypto = require('crypto');
7
+ var config = require('@nestjs/config');
8
+ var apiClient = require('@typeform/api-client');
9
+
10
+ /**
11
+ * Creates a TypeformWebhookEvent and treats the data as the input type.
12
+ *
13
+ * @param event
14
+ * @returns
15
+ */
16
+ function typeFormWebhookEvent(event) {
17
+ return event;
18
+ }
19
+ const typeformEventHandlerFactory = util.handlerFactory(x => x.event_type);
20
+ const typeformEventHandlerConfigurerFactory = util.handlerConfigurerFactory({
21
+ configurerForAccessor: accessor => {
22
+ // eslint-disable-next-line
23
+ const fnWithKey = util.handlerMappedSetFunctionFactory(accessor, typeFormWebhookEvent);
24
+ const configurer = {
25
+ ...accessor,
26
+ handleFormResponse: fnWithKey('form_response')
27
+ };
28
+ return configurer;
29
+ }
30
+ });
31
+
32
+ const TYPEFORM_WEBHOOK_SECRET_TOKEN_ENV_VAR = 'TYPEFORM_WEBHOOK_SECRET_TOKEN';
33
+ /**
34
+ * Configuration for TypeformService
35
+ */
36
+ class TypeformWebhookServiceConfig {
37
+ typeformWebhook;
38
+ static assertValidConfig(config) {
39
+ if (!config.typeformWebhook.secretToken) {
40
+ throw new Error('No Typeform webhook secret specified.');
41
+ }
42
+ }
43
+ }
44
+
45
+ /******************************************************************************
46
+ Copyright (c) Microsoft Corporation.
47
+
48
+ Permission to use, copy, modify, and/or distribute this software for any
49
+ purpose with or without fee is hereby granted.
50
+
51
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
52
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
53
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
54
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
55
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
56
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
57
+ PERFORMANCE OF THIS SOFTWARE.
58
+ ***************************************************************************** */
59
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
60
+
61
+
62
+ function __decorate(decorators, target, key, desc) {
63
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
64
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
65
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
66
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
67
+ }
68
+
69
+ function __param(paramIndex, decorator) {
70
+ return function (target, key) { decorator(target, key, paramIndex); }
71
+ }
72
+
73
+ function __metadata(metadataKey, metadataValue) {
74
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
75
+ }
76
+
77
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
78
+ var e = new Error(message);
79
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
80
+ };
81
+
82
+ /**
83
+ * Verifies a Typeform webhook event header.
84
+ *
85
+ * @param vapiSecretTokenGetter The Typeform secret token. The Vapi client allows for using an AsyncGetterOrValue type, so the verifier supports that as well.
86
+ * @returns A function that verifies a Typeform webhook event.
87
+ */
88
+ function typeFormWebhookEventVerifier(config) {
89
+ const {
90
+ secret
91
+ } = config;
92
+ return async (request, rawBody) => {
93
+ const requestBodyString = String(request.body);
94
+ const headers = request.headers;
95
+ const vapiSignature = headers['typeform-signature'];
96
+ const hashForVerify = crypto.createHmac('sha256', secret).update(requestBodyString).digest('base64');
97
+ const signature = `sha256=${hashForVerify}`;
98
+ const valid = vapiSignature === signature;
99
+ const event = JSON.parse(requestBodyString);
100
+ const result = {
101
+ valid,
102
+ event
103
+ };
104
+ return result;
105
+ };
106
+ }
107
+
108
+ /**
109
+ * Service that makes system changes based on Typeform webhook events.
110
+ */
111
+ exports.TypeformWebhookService = class TypeformWebhookService {
112
+ logger = new common.Logger('TypeformWebhookService');
113
+ _verifier;
114
+ handler = typeformEventHandlerFactory();
115
+ configure = typeformEventHandlerConfigurerFactory(this.handler);
116
+ constructor(typeFormWebhookServiceConfig) {
117
+ const {
118
+ secretToken: webhookSecret
119
+ } = typeFormWebhookServiceConfig.typeformWebhook;
120
+ this._verifier = typeFormWebhookEventVerifier({
121
+ secret: webhookSecret
122
+ });
123
+ }
124
+ async updateForWebhook(req, rawBody) {
125
+ const result = await this._verifier(req, rawBody);
126
+ if (!result.valid) {
127
+ this.logger.warn('Received invalid Typeform event.', req);
128
+ } else {
129
+ await this.updateForTypeformEvent(result.event);
130
+ }
131
+ }
132
+ async updateForTypeformEvent(event) {
133
+ const result = await this.handler(event);
134
+ if (!result) {
135
+ this.logger.warn('Received unexpected/unhandled Typeform event.', event);
136
+ }
137
+ }
138
+ };
139
+ exports.TypeformWebhookService = __decorate([common.Injectable(), __param(0, common.Inject(TypeformWebhookServiceConfig)), __metadata("design:paramtypes", [TypeformWebhookServiceConfig])], exports.TypeformWebhookService);
140
+
141
+ exports.TypeformWebhookController = class TypeformWebhookController {
142
+ _typeformWebhookService;
143
+ constructor(typeformWebhookService) {
144
+ this._typeformWebhookService = typeformWebhookService;
145
+ }
146
+ async handleTypeformWebhook(req, rawBody) {
147
+ await this._typeformWebhookService.updateForWebhook(req, rawBody);
148
+ }
149
+ };
150
+ __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.TypeformWebhookController.prototype, "handleTypeformWebhook", null);
151
+ exports.TypeformWebhookController = __decorate([common.Controller('/webhook/typeform'), __param(0, common.Inject(exports.TypeformWebhookService)), __metadata("design:paramtypes", [exports.TypeformWebhookService])], exports.TypeformWebhookController);
152
+
153
+ function typeFormWebhookServiceConfigFactory(configService) {
154
+ const config = {
155
+ typeformWebhook: {
156
+ secretToken: configService.get(TYPEFORM_WEBHOOK_SECRET_TOKEN_ENV_VAR)
157
+ }
158
+ };
159
+ TypeformWebhookServiceConfig.assertValidConfig(config);
160
+ return config;
161
+ }
162
+ exports.TypeformWebhookModule = class TypeformWebhookModule {};
163
+ exports.TypeformWebhookModule = __decorate([common.Module({
164
+ imports: [config.ConfigModule],
165
+ controllers: [exports.TypeformWebhookController],
166
+ providers: [{
167
+ provide: TypeformWebhookServiceConfig,
168
+ inject: [config.ConfigService],
169
+ useFactory: typeFormWebhookServiceConfigFactory
170
+ }, exports.TypeformWebhookService],
171
+ exports: [exports.TypeformWebhookService]
172
+ })], exports.TypeformWebhookModule);
173
+
174
+ function findTypeformTemplateRefsInString(input) {
175
+ /**
176
+ * Used to search the input string to find field refs like the following:
177
+ *
178
+ * {{field:8f7adc1e-c3b8-44bd-b00c-1b6c8de65797}}
179
+ * {{field:01H7G3DCZ1FZV4KYZGM755MXZZ}}
180
+ */
181
+ const regex = /\{\{\s*(field)\s*:\s*([A-Za-z0-9-]+)\s*\}\}/g;
182
+ const matches = input.matchAll(regex);
183
+ const result = [];
184
+ for (const regexMatch of matches) {
185
+ const match = regexMatch[0]; // {{field:8f7adc1e-c3b8-44bd-b00c-1b6c8de65797}}
186
+ const type = regexMatch[1]; // field
187
+ const ref = regexMatch[2]; // 8f7adc1e-c3b8-44bd-b00c-1b6c8de65797
188
+ result.push({
189
+ type,
190
+ match,
191
+ ref
192
+ });
193
+ }
194
+ return result;
195
+ }
196
+
197
+ /**
198
+ * Creates an ExpandedTypeformWebhookFormResponse from a TypeformWebhookFormResponse.
199
+ */
200
+ function expandTypeformWebhookFormResponse(formResponse) {
201
+ const {
202
+ answers,
203
+ definition
204
+ } = formResponse;
205
+ const {
206
+ fields = []
207
+ } = definition;
208
+ const questionFieldMap = new Map(util.filterMaybeArrayValues(fields.map(x => x.id ? [x.id, x] : null)));
209
+ const answerValuePairs = answers.map(answer => makeTypeformFormResponseAnswerValuePair(answer));
210
+ const answerValueFieldRefMap = new Map(util.filterMaybeArrayValues(answerValuePairs.map(x => x.answer.field.ref ? [x.answer.field.ref, x] : null)));
211
+ function expandQuestionTitle(title) {
212
+ let result = title;
213
+ let hadReferenceInTitle = false;
214
+ if (result) {
215
+ const refsInTitle = findTypeformTemplateRefsInString(result);
216
+ if (refsInTitle.length > 0) {
217
+ hadReferenceInTitle = true;
218
+ refsInTitle.forEach(refInTitle => {
219
+ const {
220
+ match,
221
+ ref
222
+ } = refInTitle;
223
+ const fullMatch = match;
224
+ const answer = answerValueFieldRefMap.get(ref);
225
+ const answerValue = answer?.valueString;
226
+ const replacedTitle = result.replaceAll(fullMatch, answerValue || '');
227
+ result = replacedTitle;
228
+ });
229
+ }
230
+ }
231
+ return {
232
+ questionTitle: result,
233
+ hadReferenceInTitle
234
+ };
235
+ }
236
+ const pairs = answerValuePairs.map(answerValue => {
237
+ const definitionField = questionFieldMap.get(answerValue.answer.field.id);
238
+ const {
239
+ questionTitle,
240
+ hadReferenceInTitle
241
+ } = expandQuestionTitle(definitionField?.title);
242
+ const result = {
243
+ ...answerValue,
244
+ definitionField,
245
+ questionTitle,
246
+ hadReferenceInTitle
247
+ };
248
+ return result;
249
+ });
250
+ return {
251
+ formResponse,
252
+ pairs
253
+ };
254
+ }
255
+ /**
256
+ * Creates a TypeformFormQuestionAnswerPair from a TypeformFormResponseAnswer.
257
+ */
258
+ function makeTypeformFormResponseAnswerValuePair(answer) {
259
+ let value;
260
+ let valueString;
261
+ switch (answer.type) {
262
+ case 'number':
263
+ value = answer.number;
264
+ valueString = answer.number.toString();
265
+ break;
266
+ case 'boolean':
267
+ value = answer.boolean;
268
+ valueString = answer.boolean.toString();
269
+ break;
270
+ case 'email':
271
+ value = answer.email;
272
+ valueString = answer.email;
273
+ break;
274
+ case 'phone_number':
275
+ value = answer.phone_number;
276
+ valueString = answer.phone_number;
277
+ break;
278
+ case 'date':
279
+ value = answer.date;
280
+ valueString = answer.date;
281
+ break;
282
+ case 'payment':
283
+ value = answer.payment;
284
+ valueString = answer.payment.amount.toString();
285
+ break;
286
+ case 'text':
287
+ value = answer.text;
288
+ valueString = answer.text;
289
+ break;
290
+ case 'choices':
291
+ value = answer.choices;
292
+ valueString = answer.choices.other || util.joinStringsWithCommas(answer.choices.labels);
293
+ break;
294
+ case 'choice':
295
+ value = answer.choice;
296
+ valueString = answer.choice.other || answer.choice.label || '';
297
+ break;
298
+ case 'url':
299
+ value = answer.url;
300
+ valueString = answer.url;
301
+ break;
302
+ case 'file_url':
303
+ value = answer.file_url;
304
+ valueString = answer.file_url;
305
+ break;
306
+ }
307
+ const result = {
308
+ answer,
309
+ value,
310
+ valueString
311
+ };
312
+ return result;
313
+ }
314
+
315
+ /**
316
+ * Default environment variable for the Typeform API key.
317
+ */
318
+ const TYPEFORM_SECRET_TOKEN_ENV_VAR = 'TYPEFORM_SECRET_TOKEN';
319
+ const TYPEFORM_BASE_URL_ENV_VAR = 'TYPEFORM_BASE_URL';
320
+ /**
321
+ * Configuration for TypeformService
322
+ */
323
+ class TypeformServiceConfig {
324
+ typeform;
325
+ static assertValidConfig(config) {
326
+ if (!config.typeform.config.token) {
327
+ throw new Error('No Typeform token specified.');
328
+ }
329
+ }
330
+ }
331
+
332
+ exports.TypeformApi = class TypeformApi {
333
+ config;
334
+ client;
335
+ constructor(config) {
336
+ this.config = config;
337
+ this.client = apiClient.createClient(config.typeform.config);
338
+ }
339
+ };
340
+ exports.TypeformApi = __decorate([common.Injectable(), __param(0, common.Inject(TypeformServiceConfig)), __metadata("design:paramtypes", [TypeformServiceConfig])], exports.TypeformApi);
341
+
342
+ function typeFormServiceConfigFactory(configService) {
343
+ const config = {
344
+ typeform: {
345
+ config: {
346
+ token: configService.get(TYPEFORM_SECRET_TOKEN_ENV_VAR),
347
+ baseURL: configService.get(TYPEFORM_BASE_URL_ENV_VAR) ?? undefined
348
+ }
349
+ }
350
+ };
351
+ TypeformServiceConfig.assertValidConfig(config);
352
+ return config;
353
+ }
354
+ exports.TypeformModule = class TypeformModule {};
355
+ exports.TypeformModule = __decorate([common.Module({
356
+ imports: [config.ConfigModule],
357
+ providers: [{
358
+ provide: TypeformServiceConfig,
359
+ inject: [config.ConfigService],
360
+ useFactory: typeFormServiceConfigFactory
361
+ }, exports.TypeformApi],
362
+ exports: [exports.TypeformApi]
363
+ })], exports.TypeformModule);
364
+
365
+ exports.TYPEFORM_BASE_URL_ENV_VAR = TYPEFORM_BASE_URL_ENV_VAR;
366
+ exports.TYPEFORM_SECRET_TOKEN_ENV_VAR = TYPEFORM_SECRET_TOKEN_ENV_VAR;
367
+ exports.TYPEFORM_WEBHOOK_SECRET_TOKEN_ENV_VAR = TYPEFORM_WEBHOOK_SECRET_TOKEN_ENV_VAR;
368
+ exports.TypeformServiceConfig = TypeformServiceConfig;
369
+ exports.TypeformWebhookServiceConfig = TypeformWebhookServiceConfig;
370
+ exports.expandTypeformWebhookFormResponse = expandTypeformWebhookFormResponse;
371
+ exports.findTypeformTemplateRefsInString = findTypeformTemplateRefsInString;
372
+ exports.makeTypeformFormResponseAnswerValuePair = makeTypeformFormResponseAnswerValuePair;
373
+ exports.typeFormServiceConfigFactory = typeFormServiceConfigFactory;
374
+ exports.typeFormWebhookEvent = typeFormWebhookEvent;
375
+ exports.typeFormWebhookEventVerifier = typeFormWebhookEventVerifier;
376
+ exports.typeFormWebhookServiceConfigFactory = typeFormWebhookServiceConfigFactory;
377
+ exports.typeformEventHandlerConfigurerFactory = typeformEventHandlerConfigurerFactory;
378
+ exports.typeformEventHandlerFactory = typeformEventHandlerFactory;
@@ -0,0 +1 @@
1
+ export * from "./src/index";