digital-tools 2.1.3 → 2.4.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 (294) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +19 -0
  3. package/README.md +2 -0
  4. package/dist/client.d.ts +109 -0
  5. package/dist/client.d.ts.map +1 -0
  6. package/dist/client.js +69 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/define.d.ts +2 -2
  9. package/dist/define.d.ts.map +1 -1
  10. package/dist/define.js +21 -11
  11. package/dist/define.js.map +1 -1
  12. package/dist/function-ref.d.ts +229 -0
  13. package/dist/function-ref.d.ts.map +1 -0
  14. package/dist/function-ref.js +28 -0
  15. package/dist/function-ref.js.map +1 -0
  16. package/dist/function-sugar.d.ts +57 -0
  17. package/dist/function-sugar.d.ts.map +1 -0
  18. package/dist/function-sugar.js +79 -0
  19. package/dist/function-sugar.js.map +1 -0
  20. package/dist/index.d.ts +10 -3
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +24 -4
  23. package/dist/index.js.map +1 -1
  24. package/dist/providers/analytics/mixpanel.d.ts.map +1 -1
  25. package/dist/providers/analytics/mixpanel.js +21 -18
  26. package/dist/providers/analytics/mixpanel.js.map +1 -1
  27. package/dist/providers/calendar/cal-com.d.ts.map +1 -1
  28. package/dist/providers/calendar/cal-com.js +10 -10
  29. package/dist/providers/calendar/cal-com.js.map +1 -1
  30. package/dist/providers/calendar/google-calendar.d.ts.map +1 -1
  31. package/dist/providers/calendar/google-calendar.js +4 -4
  32. package/dist/providers/calendar/google-calendar.js.map +1 -1
  33. package/dist/providers/crm/hubspot.d.ts.map +1 -1
  34. package/dist/providers/crm/hubspot.js +107 -85
  35. package/dist/providers/crm/hubspot.js.map +1 -1
  36. package/dist/providers/development/github.d.ts.map +1 -1
  37. package/dist/providers/development/github.js +40 -43
  38. package/dist/providers/development/github.js.map +1 -1
  39. package/dist/providers/ecommerce/shopify.d.ts.map +1 -1
  40. package/dist/providers/ecommerce/shopify.js +79 -62
  41. package/dist/providers/ecommerce/shopify.js.map +1 -1
  42. package/dist/providers/email/resend.d.ts.map +1 -1
  43. package/dist/providers/email/resend.js +20 -16
  44. package/dist/providers/email/resend.js.map +1 -1
  45. package/dist/providers/email/sendgrid.d.ts.map +1 -1
  46. package/dist/providers/email/sendgrid.js +12 -9
  47. package/dist/providers/email/sendgrid.js.map +1 -1
  48. package/dist/providers/finance/stripe.d.ts.map +1 -1
  49. package/dist/providers/finance/stripe.js +44 -42
  50. package/dist/providers/finance/stripe.js.map +1 -1
  51. package/dist/providers/forms/typeform.d.ts.map +1 -1
  52. package/dist/providers/forms/typeform.js +68 -58
  53. package/dist/providers/forms/typeform.js.map +1 -1
  54. package/dist/providers/knowledge/notion.d.ts.map +1 -1
  55. package/dist/providers/knowledge/notion.js +75 -41
  56. package/dist/providers/knowledge/notion.js.map +1 -1
  57. package/dist/providers/marketing/mailchimp.d.ts.map +1 -1
  58. package/dist/providers/marketing/mailchimp.js +74 -61
  59. package/dist/providers/marketing/mailchimp.js.map +1 -1
  60. package/dist/providers/media/cloudinary.d.ts.map +1 -1
  61. package/dist/providers/media/cloudinary.js +30 -28
  62. package/dist/providers/media/cloudinary.js.map +1 -1
  63. package/dist/providers/messaging/slack.d.ts.map +1 -1
  64. package/dist/providers/messaging/slack.js +75 -58
  65. package/dist/providers/messaging/slack.js.map +1 -1
  66. package/dist/providers/messaging/twilio-sms.d.ts.map +1 -1
  67. package/dist/providers/messaging/twilio-sms.js +33 -15
  68. package/dist/providers/messaging/twilio-sms.js.map +1 -1
  69. package/dist/providers/project-management/linear.d.ts.map +1 -1
  70. package/dist/providers/project-management/linear.js +31 -27
  71. package/dist/providers/project-management/linear.js.map +1 -1
  72. package/dist/providers/spreadsheet/google-sheets.d.ts.map +1 -1
  73. package/dist/providers/spreadsheet/google-sheets.js +21 -18
  74. package/dist/providers/spreadsheet/google-sheets.js.map +1 -1
  75. package/dist/providers/spreadsheet/xlsx.d.ts.map +1 -1
  76. package/dist/providers/spreadsheet/xlsx.js +4 -4
  77. package/dist/providers/spreadsheet/xlsx.js.map +1 -1
  78. package/dist/providers/storage/index.js +1 -0
  79. package/dist/providers/storage/index.js.map +1 -1
  80. package/dist/providers/storage/s3.d.ts.map +1 -1
  81. package/dist/providers/storage/s3.js +36 -27
  82. package/dist/providers/storage/s3.js.map +1 -1
  83. package/dist/providers/support/zendesk.d.ts.map +1 -1
  84. package/dist/providers/support/zendesk.js +24 -25
  85. package/dist/providers/support/zendesk.js.map +1 -1
  86. package/dist/providers/tasks/todoist.d.ts.map +1 -1
  87. package/dist/providers/tasks/todoist.js +18 -18
  88. package/dist/providers/tasks/todoist.js.map +1 -1
  89. package/dist/providers/video-conferencing/google-meet.d.ts.map +1 -1
  90. package/dist/providers/video-conferencing/google-meet.js +11 -11
  91. package/dist/providers/video-conferencing/google-meet.js.map +1 -1
  92. package/dist/providers/video-conferencing/jitsi.js +14 -14
  93. package/dist/providers/video-conferencing/jitsi.js.map +1 -1
  94. package/dist/providers/video-conferencing/teams.d.ts.map +1 -1
  95. package/dist/providers/video-conferencing/teams.js +9 -7
  96. package/dist/providers/video-conferencing/teams.js.map +1 -1
  97. package/dist/providers/video-conferencing/zoom.d.ts.map +1 -1
  98. package/dist/providers/video-conferencing/zoom.js +26 -24
  99. package/dist/providers/video-conferencing/zoom.js.map +1 -1
  100. package/dist/tools/data.d.ts.map +1 -1
  101. package/dist/tools/data.js +5 -12
  102. package/dist/tools/data.js.map +1 -1
  103. package/dist/tools/index.d.ts +1 -0
  104. package/dist/tools/index.d.ts.map +1 -1
  105. package/dist/tools/index.js +1 -0
  106. package/dist/tools/index.js.map +1 -1
  107. package/dist/tools/system.d.ts +289 -0
  108. package/dist/tools/system.d.ts.map +1 -0
  109. package/dist/tools/system.js +752 -0
  110. package/dist/tools/system.js.map +1 -0
  111. package/dist/tools/web.d.ts.map +1 -1
  112. package/dist/tools/web.js +22 -10
  113. package/dist/tools/web.js.map +1 -1
  114. package/dist/track-record.d.ts +101 -0
  115. package/dist/track-record.d.ts.map +1 -0
  116. package/dist/track-record.js +17 -0
  117. package/dist/track-record.js.map +1 -0
  118. package/dist/types.d.ts +210 -9
  119. package/dist/types.d.ts.map +1 -1
  120. package/dist/verb-registration.d.ts +122 -0
  121. package/dist/verb-registration.d.ts.map +1 -0
  122. package/dist/verb-registration.js +176 -0
  123. package/dist/verb-registration.js.map +1 -0
  124. package/dist/worker.d.ts +93 -0
  125. package/dist/worker.d.ts.map +1 -0
  126. package/dist/worker.js +315 -0
  127. package/dist/worker.js.map +1 -0
  128. package/dist/wrap.d.ts +89 -0
  129. package/dist/wrap.d.ts.map +1 -0
  130. package/dist/wrap.js +225 -0
  131. package/dist/wrap.js.map +1 -0
  132. package/package.json +31 -14
  133. package/src/client.ts +136 -0
  134. package/src/define.ts +30 -24
  135. package/src/function-ref.ts +264 -0
  136. package/src/function-sugar.ts +134 -0
  137. package/src/index.ts +132 -10
  138. package/src/providers/analytics/mixpanel.ts +19 -18
  139. package/src/providers/calendar/cal-com.ts +29 -18
  140. package/src/providers/calendar/google-calendar.ts +20 -14
  141. package/src/providers/crm/hubspot.ts +225 -99
  142. package/src/providers/development/github.ts +206 -135
  143. package/src/providers/ecommerce/shopify.ts +250 -89
  144. package/src/providers/email/resend.ts +101 -28
  145. package/src/providers/email/sendgrid.ts +12 -9
  146. package/src/providers/finance/stripe.ts +128 -49
  147. package/src/providers/forms/typeform.ts +74 -58
  148. package/src/providers/knowledge/notion.ts +340 -88
  149. package/src/providers/marketing/mailchimp.ts +86 -70
  150. package/src/providers/media/cloudinary.ts +99 -41
  151. package/src/providers/messaging/slack.ts +283 -85
  152. package/src/providers/messaging/twilio-sms.ts +35 -15
  153. package/src/providers/project-management/linear.ts +143 -55
  154. package/src/providers/spreadsheet/google-sheets.ts +222 -56
  155. package/src/providers/spreadsheet/xlsx.ts +47 -16
  156. package/src/providers/storage/s3.ts +119 -47
  157. package/src/providers/support/zendesk.ts +196 -46
  158. package/src/providers/tasks/todoist.ts +20 -26
  159. package/src/providers/video-conferencing/google-meet.ts +17 -20
  160. package/src/providers/video-conferencing/jitsi.ts +14 -14
  161. package/src/providers/video-conferencing/teams.ts +14 -13
  162. package/src/providers/video-conferencing/zoom.ts +54 -49
  163. package/src/tools/data.ts +6 -16
  164. package/src/tools/index.ts +1 -0
  165. package/src/tools/system.ts +887 -0
  166. package/src/tools/web.ts +22 -10
  167. package/src/track-record.ts +106 -0
  168. package/src/types.ts +241 -13
  169. package/src/verb-registration.ts +197 -0
  170. package/src/worker.ts +370 -0
  171. package/src/wrap.ts +260 -0
  172. package/test/client.test.ts +146 -0
  173. package/test/communication-tools-extended.test.ts +734 -0
  174. package/test/data-tools-extended.test.ts +743 -0
  175. package/test/define-extended.test.ts +819 -0
  176. package/test/define.test.ts +150 -41
  177. package/test/entities.test.ts +623 -0
  178. package/test/extended-entities.test.ts +1228 -0
  179. package/test/provider-implementations.test.ts +725 -0
  180. package/test/provider-registry-extended.test.ts +583 -0
  181. package/test/providers/google-sheets.test.ts +851 -0
  182. package/test/providers/helpers.ts +554 -0
  183. package/test/providers/hubspot.test.ts +576 -0
  184. package/test/providers/slack.test.ts +932 -0
  185. package/test/providers/stripe.test.ts +701 -0
  186. package/test/providers.test.ts +578 -0
  187. package/test/system-tools-extended.test.ts +632 -0
  188. package/test/system.test.ts +673 -0
  189. package/test/tools.test.ts +15 -11
  190. package/test/types.test.ts +402 -0
  191. package/test/verb-registration.test.ts +395 -0
  192. package/test/web-tools.test.ts +553 -0
  193. package/test/worker-extended.test.ts +699 -0
  194. package/test/worker.test.ts +576 -0
  195. package/test/wrap.test.ts +366 -0
  196. package/tsconfig.json +3 -13
  197. package/vitest.config.ts +37 -0
  198. package/wrangler.jsonc +9 -0
  199. package/LICENSE +0 -21
  200. package/dist/providers/voice/vapi.d.ts +0 -27
  201. package/dist/providers/voice/vapi.d.ts.map +0 -1
  202. package/dist/providers/voice/vapi.js +0 -440
  203. package/dist/providers/voice/vapi.js.map +0 -1
  204. package/src/define.js +0 -259
  205. package/src/entities/advertising.js +0 -999
  206. package/src/entities/ai.js +0 -756
  207. package/src/entities/analytics.js +0 -1588
  208. package/src/entities/automation.js +0 -601
  209. package/src/entities/communication.js +0 -1150
  210. package/src/entities/crm.js +0 -1386
  211. package/src/entities/design.js +0 -546
  212. package/src/entities/development.js +0 -2212
  213. package/src/entities/document.js +0 -874
  214. package/src/entities/ecommerce.js +0 -1429
  215. package/src/entities/experiment.js +0 -1039
  216. package/src/entities/finance.js +0 -3478
  217. package/src/entities/forms.js +0 -1892
  218. package/src/entities/hr.js +0 -661
  219. package/src/entities/identity.js +0 -997
  220. package/src/entities/index.js +0 -282
  221. package/src/entities/infrastructure.js +0 -1153
  222. package/src/entities/knowledge.js +0 -1438
  223. package/src/entities/marketing.js +0 -1610
  224. package/src/entities/media.js +0 -1634
  225. package/src/entities/notification.js +0 -1199
  226. package/src/entities/presentation.js +0 -1274
  227. package/src/entities/productivity.js +0 -1317
  228. package/src/entities/project-management.js +0 -1136
  229. package/src/entities/recruiting.js +0 -736
  230. package/src/entities/shipping.js +0 -509
  231. package/src/entities/signature.js +0 -1102
  232. package/src/entities/site.js +0 -222
  233. package/src/entities/spreadsheet.js +0 -1341
  234. package/src/entities/storage.js +0 -1198
  235. package/src/entities/support.js +0 -1166
  236. package/src/entities/video-conferencing.js +0 -1750
  237. package/src/entities/video.js +0 -950
  238. package/src/entities.js +0 -1663
  239. package/src/index.js +0 -74
  240. package/src/providers/analytics/index.js +0 -17
  241. package/src/providers/analytics/mixpanel.js +0 -255
  242. package/src/providers/calendar/cal-com.js +0 -303
  243. package/src/providers/calendar/google-calendar.js +0 -335
  244. package/src/providers/calendar/index.js +0 -20
  245. package/src/providers/crm/hubspot.js +0 -566
  246. package/src/providers/crm/index.js +0 -17
  247. package/src/providers/development/github.js +0 -472
  248. package/src/providers/development/index.js +0 -17
  249. package/src/providers/ecommerce/index.js +0 -17
  250. package/src/providers/ecommerce/shopify.js +0 -378
  251. package/src/providers/email/index.js +0 -20
  252. package/src/providers/email/resend.js +0 -258
  253. package/src/providers/email/sendgrid.js +0 -161
  254. package/src/providers/finance/index.js +0 -17
  255. package/src/providers/finance/stripe.js +0 -549
  256. package/src/providers/forms/index.js +0 -17
  257. package/src/providers/forms/typeform.js +0 -500
  258. package/src/providers/index.js +0 -123
  259. package/src/providers/knowledge/index.js +0 -17
  260. package/src/providers/knowledge/notion.js +0 -389
  261. package/src/providers/marketing/index.js +0 -17
  262. package/src/providers/marketing/mailchimp.js +0 -443
  263. package/src/providers/media/cloudinary.js +0 -318
  264. package/src/providers/media/index.js +0 -17
  265. package/src/providers/messaging/index.js +0 -20
  266. package/src/providers/messaging/slack.js +0 -393
  267. package/src/providers/messaging/twilio-sms.js +0 -249
  268. package/src/providers/project-management/index.js +0 -17
  269. package/src/providers/project-management/linear.js +0 -575
  270. package/src/providers/registry.js +0 -86
  271. package/src/providers/spreadsheet/google-sheets.js +0 -375
  272. package/src/providers/spreadsheet/index.js +0 -20
  273. package/src/providers/spreadsheet/xlsx.js +0 -423
  274. package/src/providers/storage/index.js +0 -24
  275. package/src/providers/storage/s3.js +0 -419
  276. package/src/providers/support/index.js +0 -17
  277. package/src/providers/support/zendesk.js +0 -373
  278. package/src/providers/tasks/index.js +0 -17
  279. package/src/providers/tasks/todoist.js +0 -286
  280. package/src/providers/types.js +0 -9
  281. package/src/providers/video-conferencing/google-meet.js +0 -286
  282. package/src/providers/video-conferencing/index.js +0 -31
  283. package/src/providers/video-conferencing/jitsi.js +0 -254
  284. package/src/providers/video-conferencing/teams.js +0 -270
  285. package/src/providers/video-conferencing/zoom.js +0 -332
  286. package/src/registry.js +0 -128
  287. package/src/tools/communication.js +0 -184
  288. package/src/tools/data.js +0 -205
  289. package/src/tools/index.js +0 -11
  290. package/src/tools/web.js +0 -137
  291. package/src/types.js +0 -10
  292. package/test/define.test.js +0 -306
  293. package/test/registry.test.js +0 -357
  294. package/test/tools.test.js +0 -363
@@ -47,8 +47,8 @@ export function createTypeformProvider(config: ProviderConfig): FormsProvider {
47
47
  info: typeformInfo,
48
48
 
49
49
  async initialize(cfg: ProviderConfig): Promise<void> {
50
- accessToken = cfg.accessToken as string
51
- workspaceId = cfg.workspaceId as string | undefined
50
+ accessToken = cfg['accessToken'] as string
51
+ workspaceId = cfg['workspaceId'] as string | undefined
52
52
 
53
53
  if (!accessToken) {
54
54
  throw new Error('Typeform access token is required')
@@ -91,12 +91,12 @@ export function createTypeformProvider(config: ProviderConfig): FormsProvider {
91
91
  }
92
92
 
93
93
  if (workspaceId) {
94
- body.workspace = { href: `${TYPEFORM_API_URL}/workspaces/${workspaceId}` }
94
+ body['workspace'] = { href: `${TYPEFORM_API_URL}/workspaces/${workspaceId}` }
95
95
  }
96
96
 
97
97
  // Map fields to Typeform format
98
98
  if (form.fields && form.fields.length > 0) {
99
- body.fields = form.fields.map((field, index) => {
99
+ body['fields'] = form.fields.map((field, index) => {
100
100
  const typeformField: Record<string, unknown> = {
101
101
  title: field.title,
102
102
  ref: `field_${index}`,
@@ -106,61 +106,63 @@ export function createTypeformProvider(config: ProviderConfig): FormsProvider {
106
106
  // Map field types
107
107
  switch (field.type) {
108
108
  case 'text':
109
- typeformField.type = 'short_text'
109
+ typeformField['type'] = 'short_text'
110
110
  break
111
111
  case 'textarea':
112
- typeformField.type = 'long_text'
112
+ typeformField['type'] = 'long_text'
113
113
  break
114
114
  case 'email':
115
- typeformField.type = 'email'
115
+ typeformField['type'] = 'email'
116
116
  break
117
117
  case 'number':
118
- typeformField.type = 'number'
118
+ typeformField['type'] = 'number'
119
119
  break
120
120
  case 'date':
121
- typeformField.type = 'date'
121
+ typeformField['type'] = 'date'
122
122
  break
123
123
  case 'dropdown':
124
- typeformField.type = 'dropdown'
124
+ typeformField['type'] = 'dropdown'
125
125
  if (field.choices) {
126
- typeformField.properties = {
126
+ typeformField['properties'] = {
127
127
  choices: field.choices.map((choice) => ({ label: choice })),
128
128
  }
129
129
  }
130
130
  break
131
131
  case 'radio':
132
- typeformField.type = 'multiple_choice'
132
+ typeformField['type'] = 'multiple_choice'
133
133
  if (field.choices) {
134
- typeformField.properties = {
134
+ typeformField['properties'] = {
135
135
  choices: field.choices.map((choice) => ({ label: choice })),
136
136
  allow_multiple_selection: false,
137
137
  }
138
138
  }
139
139
  break
140
140
  case 'checkbox':
141
- typeformField.type = 'multiple_choice'
141
+ typeformField['type'] = 'multiple_choice'
142
142
  if (field.choices) {
143
- typeformField.properties = {
143
+ typeformField['properties'] = {
144
144
  choices: field.choices.map((choice) => ({ label: choice })),
145
145
  allow_multiple_selection: true,
146
146
  }
147
147
  }
148
148
  break
149
149
  case 'file':
150
- typeformField.type = 'file_upload'
150
+ typeformField['type'] = 'file_upload'
151
151
  break
152
152
  default:
153
- typeformField.type = 'short_text'
153
+ typeformField['type'] = 'short_text'
154
154
  }
155
155
 
156
156
  if (field.description) {
157
- typeformField.properties = {
158
- ...(typeof typeformField.properties === 'object' ? typeformField.properties : {}),
157
+ typeformField['properties'] = {
158
+ ...(typeof typeformField['properties'] === 'object'
159
+ ? typeformField['properties']
160
+ : {}),
159
161
  description: field.description,
160
162
  }
161
163
  }
162
164
 
163
- typeformField.validations = {
165
+ typeformField['validations'] = {
164
166
  required: field.required || false,
165
167
  }
166
168
 
@@ -170,13 +172,13 @@ export function createTypeformProvider(config: ProviderConfig): FormsProvider {
170
172
 
171
173
  // Add settings
172
174
  if (form.settings) {
173
- body.settings = {
175
+ body['settings'] = {
174
176
  is_public: form.settings.isPublic !== undefined ? form.settings.isPublic : true,
175
177
  show_progress_bar: form.settings.showProgressBar || false,
176
178
  }
177
179
 
178
180
  if (form.settings.confirmationMessage) {
179
- body.thankyou_screens = [
181
+ body['thankyou_screens'] = [
180
182
  {
181
183
  title: 'Thank you!',
182
184
  properties: {
@@ -188,7 +190,7 @@ export function createTypeformProvider(config: ProviderConfig): FormsProvider {
188
190
  }
189
191
 
190
192
  if (form.settings.redirectUrl) {
191
- body.thankyou_screens = [
193
+ body['thankyou_screens'] = [
192
194
  {
193
195
  title: 'Thank you!',
194
196
  properties: {
@@ -257,11 +259,11 @@ export function createTypeformProvider(config: ProviderConfig): FormsProvider {
257
259
  const body: Record<string, unknown> = {}
258
260
 
259
261
  if (updates.title) {
260
- body.title = updates.title
262
+ body['title'] = updates.title
261
263
  }
262
264
 
263
265
  if (updates.fields) {
264
- body.fields = updates.fields.map((field, index) => {
266
+ body['fields'] = updates.fields.map((field, index) => {
265
267
  const typeformField: Record<string, unknown> = {
266
268
  title: field.title,
267
269
  ref: `field_${index}`,
@@ -271,61 +273,63 @@ export function createTypeformProvider(config: ProviderConfig): FormsProvider {
271
273
  // Map field types (same as createForm)
272
274
  switch (field.type) {
273
275
  case 'text':
274
- typeformField.type = 'short_text'
276
+ typeformField['type'] = 'short_text'
275
277
  break
276
278
  case 'textarea':
277
- typeformField.type = 'long_text'
279
+ typeformField['type'] = 'long_text'
278
280
  break
279
281
  case 'email':
280
- typeformField.type = 'email'
282
+ typeformField['type'] = 'email'
281
283
  break
282
284
  case 'number':
283
- typeformField.type = 'number'
285
+ typeformField['type'] = 'number'
284
286
  break
285
287
  case 'date':
286
- typeformField.type = 'date'
288
+ typeformField['type'] = 'date'
287
289
  break
288
290
  case 'dropdown':
289
- typeformField.type = 'dropdown'
291
+ typeformField['type'] = 'dropdown'
290
292
  if (field.choices) {
291
- typeformField.properties = {
293
+ typeformField['properties'] = {
292
294
  choices: field.choices.map((choice) => ({ label: choice })),
293
295
  }
294
296
  }
295
297
  break
296
298
  case 'radio':
297
- typeformField.type = 'multiple_choice'
299
+ typeformField['type'] = 'multiple_choice'
298
300
  if (field.choices) {
299
- typeformField.properties = {
301
+ typeformField['properties'] = {
300
302
  choices: field.choices.map((choice) => ({ label: choice })),
301
303
  allow_multiple_selection: false,
302
304
  }
303
305
  }
304
306
  break
305
307
  case 'checkbox':
306
- typeformField.type = 'multiple_choice'
308
+ typeformField['type'] = 'multiple_choice'
307
309
  if (field.choices) {
308
- typeformField.properties = {
310
+ typeformField['properties'] = {
309
311
  choices: field.choices.map((choice) => ({ label: choice })),
310
312
  allow_multiple_selection: true,
311
313
  }
312
314
  }
313
315
  break
314
316
  case 'file':
315
- typeformField.type = 'file_upload'
317
+ typeformField['type'] = 'file_upload'
316
318
  break
317
319
  default:
318
- typeformField.type = 'short_text'
320
+ typeformField['type'] = 'short_text'
319
321
  }
320
322
 
321
323
  if (field.description) {
322
- typeformField.properties = {
323
- ...(typeof typeformField.properties === 'object' ? typeformField.properties : {}),
324
+ typeformField['properties'] = {
325
+ ...(typeof typeformField['properties'] === 'object'
326
+ ? typeformField['properties']
327
+ : {}),
324
328
  description: field.description,
325
329
  }
326
330
  }
327
331
 
328
- typeformField.validations = {
332
+ typeformField['validations'] = {
329
333
  required: field.required || false,
330
334
  }
331
335
 
@@ -334,7 +338,7 @@ export function createTypeformProvider(config: ProviderConfig): FormsProvider {
334
338
  }
335
339
 
336
340
  if (updates.settings) {
337
- body.settings = {
341
+ body['settings'] = {
338
342
  ...(updates.settings.isPublic !== undefined && {
339
343
  is_public: updates.settings.isPublic,
340
344
  }),
@@ -415,9 +419,9 @@ export function createTypeformProvider(config: ProviderConfig): FormsProvider {
415
419
 
416
420
  return {
417
421
  items,
418
- total: data.total_items,
422
+ ...(data.total_items !== undefined && { total: data.total_items }),
419
423
  hasMore: data.page_count > page,
420
- nextCursor: data.page_count > page ? ((page + 1) * pageSize).toString() : undefined,
424
+ ...(data.page_count > page && { nextCursor: ((page + 1) * pageSize).toString() }),
421
425
  }
422
426
  } catch (error) {
423
427
  throw new Error(
@@ -469,9 +473,9 @@ export function createTypeformProvider(config: ProviderConfig): FormsProvider {
469
473
 
470
474
  return {
471
475
  items,
472
- total: data.total_items,
476
+ ...(data.total_items !== undefined && { total: data.total_items }),
473
477
  hasMore: !!data.next_cursor,
474
- nextCursor: data.next_cursor,
478
+ ...(data.next_cursor !== undefined && { nextCursor: data.next_cursor }),
475
479
  }
476
480
  } catch (error) {
477
481
  throw new Error(
@@ -545,19 +549,30 @@ function transformTypeformToFormData(data: any): FormData {
545
549
  break
546
550
  }
547
551
 
548
- return {
552
+ const fieldResult: {
553
+ type: typeof type
554
+ title: string
555
+ required: boolean
556
+ description?: string
557
+ choices?: string[]
558
+ } = {
549
559
  type,
550
560
  title: field.title,
551
- description: field.properties?.description,
552
561
  required: field.validations?.required || false,
553
- choices: field.properties?.choices?.map((c: any) => c.label),
554
562
  }
563
+ if (field.properties?.description !== undefined) {
564
+ fieldResult.description = field.properties.description
565
+ }
566
+ if (field.properties?.choices) {
567
+ fieldResult.choices = field.properties.choices.map((c: any) => c.label)
568
+ }
569
+ return fieldResult
555
570
  })
556
571
 
557
572
  return {
558
573
  id: data.id,
559
574
  title: data.title,
560
- description: data.description,
575
+ ...(data.description !== undefined && { description: data.description }),
561
576
  fields,
562
577
  responseCount: data.response_count || 0,
563
578
  url: data._links?.display || `https://form.typeform.com/to/${data.id}`,
@@ -575,19 +590,20 @@ function transformTypeformResponseToFormResponseData(formId: string, data: any):
575
590
  value: answer[answer.type] || answer.text || answer.choice || answer.choices,
576
591
  }))
577
592
 
578
- return {
593
+ const result: FormResponseData = {
579
594
  id: data.response_id || data.token,
580
595
  formId,
581
596
  answers,
582
597
  submittedAt: new Date(data.submitted_at),
583
- metadata: data.metadata
584
- ? {
585
- ip: data.metadata.user_agent,
586
- userAgent: data.metadata.user_agent,
587
- referer: data.metadata.referer,
588
- }
589
- : undefined,
590
598
  }
599
+ if (data.metadata) {
600
+ result.metadata = {
601
+ ...(data.metadata.user_agent !== undefined && { ip: data.metadata.user_agent }),
602
+ ...(data.metadata.user_agent !== undefined && { userAgent: data.metadata.user_agent }),
603
+ ...(data.metadata.referer !== undefined && { referer: data.metadata.referer }),
604
+ }
605
+ }
606
+ return result
591
607
  }
592
608
 
593
609
  /**