@automate.ax/integration-contracts 0.93.1 → 0.95.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.
@@ -1,11 +1,37 @@
1
1
  import * as z from "zod"
2
2
  import {
3
+ TRELLO_ATTACHMENT_ADDED_EVENT_SCHEMA,
4
+ TRELLO_ATTACHMENT_DELETED_EVENT_SCHEMA,
3
5
  TRELLO_BOARD_EVENT_SCHEMA,
4
6
  TRELLO_CARD_ARCHIVED_EVENT_SCHEMA,
5
7
  TRELLO_CARD_COMMENTED_EVENT_SCHEMA,
6
8
  TRELLO_CARD_CREATED_EVENT_SCHEMA,
9
+ TRELLO_CARD_DELETED_EVENT_SCHEMA,
10
+ TRELLO_CARD_LABEL_ADDED_EVENT_SCHEMA,
11
+ TRELLO_CARD_LABEL_REMOVED_EVENT_SCHEMA,
12
+ TRELLO_CARD_MEMBER_ADDED_EVENT_SCHEMA,
13
+ TRELLO_CARD_MEMBER_REMOVED_EVENT_SCHEMA,
7
14
  TRELLO_CARD_MOVED_EVENT_SCHEMA,
15
+ TRELLO_CARD_RESTORED_EVENT_SCHEMA,
8
16
  TRELLO_CARD_UPDATED_EVENT_SCHEMA,
17
+ TRELLO_CHECKLIST_CREATED_EVENT_SCHEMA,
18
+ TRELLO_CHECKLIST_DELETED_EVENT_SCHEMA,
19
+ TRELLO_CHECKLIST_ITEM_COMPLETED_EVENT_SCHEMA,
20
+ TRELLO_CHECKLIST_ITEM_CREATED_EVENT_SCHEMA,
21
+ TRELLO_CHECKLIST_ITEM_DELETED_EVENT_SCHEMA,
22
+ TRELLO_CHECKLIST_ITEM_UPDATED_EVENT_SCHEMA,
23
+ TRELLO_CHECKLIST_UPDATED_EVENT_SCHEMA,
24
+ TRELLO_COMMENT_DELETED_EVENT_SCHEMA,
25
+ TRELLO_COMMENT_UPDATED_EVENT_SCHEMA,
26
+ TRELLO_CUSTOM_FIELD_CREATED_EVENT_SCHEMA,
27
+ TRELLO_CUSTOM_FIELD_DELETED_EVENT_SCHEMA,
28
+ TRELLO_CUSTOM_FIELD_UPDATED_EVENT_SCHEMA,
29
+ TRELLO_CUSTOM_FIELD_VALUE_UPDATED_EVENT_SCHEMA,
30
+ TRELLO_LIST_ARCHIVED_EVENT_SCHEMA,
31
+ TRELLO_LIST_CREATED_EVENT_SCHEMA,
32
+ TRELLO_LIST_MOVED_EVENT_SCHEMA,
33
+ TRELLO_LIST_RESTORED_EVENT_SCHEMA,
34
+ TRELLO_LIST_UPDATED_EVENT_SCHEMA,
9
35
  } from "./event-schemas"
10
36
 
11
37
  export * from "./api"
@@ -14,7 +40,7 @@ export * from "./schemas"
14
40
 
15
41
  /** Canonical Trello board selected by one webhook subscription. */
16
42
  export const TRELLO_TRIGGER_CONFIG_SCHEMA = z.object({
17
- boardId: z.string(),
43
+ boardId: z.string().trim().min(1),
18
44
  })
19
45
 
20
46
  export const trelloTriggerContracts = {
@@ -26,6 +52,26 @@ export const trelloTriggerContracts = {
26
52
  configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
27
53
  eventSchema: TRELLO_CARD_ARCHIVED_EVENT_SCHEMA,
28
54
  },
55
+ "trello.card.deleted": {
56
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
57
+ eventSchema: TRELLO_CARD_DELETED_EVENT_SCHEMA,
58
+ },
59
+ "trello.card.label.added": {
60
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
61
+ eventSchema: TRELLO_CARD_LABEL_ADDED_EVENT_SCHEMA,
62
+ },
63
+ "trello.card.label.removed": {
64
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
65
+ eventSchema: TRELLO_CARD_LABEL_REMOVED_EVENT_SCHEMA,
66
+ },
67
+ "trello.card.member.added": {
68
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
69
+ eventSchema: TRELLO_CARD_MEMBER_ADDED_EVENT_SCHEMA,
70
+ },
71
+ "trello.card.member.removed": {
72
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
73
+ eventSchema: TRELLO_CARD_MEMBER_REMOVED_EVENT_SCHEMA,
74
+ },
29
75
  "trello.card.commented": {
30
76
  configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
31
77
  eventSchema: TRELLO_CARD_COMMENTED_EVENT_SCHEMA,
@@ -38,8 +84,92 @@ export const trelloTriggerContracts = {
38
84
  configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
39
85
  eventSchema: TRELLO_CARD_MOVED_EVENT_SCHEMA,
40
86
  },
87
+ "trello.card.restored": {
88
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
89
+ eventSchema: TRELLO_CARD_RESTORED_EVENT_SCHEMA,
90
+ },
41
91
  "trello.card.updated": {
42
92
  configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
43
93
  eventSchema: TRELLO_CARD_UPDATED_EVENT_SCHEMA,
44
94
  },
95
+ "trello.attachment.added": {
96
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
97
+ eventSchema: TRELLO_ATTACHMENT_ADDED_EVENT_SCHEMA,
98
+ },
99
+ "trello.attachment.deleted": {
100
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
101
+ eventSchema: TRELLO_ATTACHMENT_DELETED_EVENT_SCHEMA,
102
+ },
103
+ "trello.checklist.created": {
104
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
105
+ eventSchema: TRELLO_CHECKLIST_CREATED_EVENT_SCHEMA,
106
+ },
107
+ "trello.checklist.deleted": {
108
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
109
+ eventSchema: TRELLO_CHECKLIST_DELETED_EVENT_SCHEMA,
110
+ },
111
+ "trello.checklist.updated": {
112
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
113
+ eventSchema: TRELLO_CHECKLIST_UPDATED_EVENT_SCHEMA,
114
+ },
115
+ "trello.checklist-item.completed": {
116
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
117
+ eventSchema: TRELLO_CHECKLIST_ITEM_COMPLETED_EVENT_SCHEMA,
118
+ },
119
+ "trello.checklist-item.created": {
120
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
121
+ eventSchema: TRELLO_CHECKLIST_ITEM_CREATED_EVENT_SCHEMA,
122
+ },
123
+ "trello.checklist-item.deleted": {
124
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
125
+ eventSchema: TRELLO_CHECKLIST_ITEM_DELETED_EVENT_SCHEMA,
126
+ },
127
+ "trello.checklist-item.updated": {
128
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
129
+ eventSchema: TRELLO_CHECKLIST_ITEM_UPDATED_EVENT_SCHEMA,
130
+ },
131
+ "trello.comment.deleted": {
132
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
133
+ eventSchema: TRELLO_COMMENT_DELETED_EVENT_SCHEMA,
134
+ },
135
+ "trello.comment.updated": {
136
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
137
+ eventSchema: TRELLO_COMMENT_UPDATED_EVENT_SCHEMA,
138
+ },
139
+ "trello.custom-field.created": {
140
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
141
+ eventSchema: TRELLO_CUSTOM_FIELD_CREATED_EVENT_SCHEMA,
142
+ },
143
+ "trello.custom-field.deleted": {
144
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
145
+ eventSchema: TRELLO_CUSTOM_FIELD_DELETED_EVENT_SCHEMA,
146
+ },
147
+ "trello.custom-field.updated": {
148
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
149
+ eventSchema: TRELLO_CUSTOM_FIELD_UPDATED_EVENT_SCHEMA,
150
+ },
151
+ "trello.custom-field.value.updated": {
152
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
153
+ eventSchema: TRELLO_CUSTOM_FIELD_VALUE_UPDATED_EVENT_SCHEMA,
154
+ },
155
+ "trello.list.archived": {
156
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
157
+ eventSchema: TRELLO_LIST_ARCHIVED_EVENT_SCHEMA,
158
+ },
159
+ "trello.list.created": {
160
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
161
+ eventSchema: TRELLO_LIST_CREATED_EVENT_SCHEMA,
162
+ },
163
+ "trello.list.moved": {
164
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
165
+ eventSchema: TRELLO_LIST_MOVED_EVENT_SCHEMA,
166
+ },
167
+ "trello.list.restored": {
168
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
169
+ eventSchema: TRELLO_LIST_RESTORED_EVENT_SCHEMA,
170
+ },
171
+ "trello.list.updated": {
172
+ configSchema: TRELLO_TRIGGER_CONFIG_SCHEMA,
173
+ eventSchema: TRELLO_LIST_UPDATED_EVENT_SCHEMA,
174
+ },
45
175
  } as const
@@ -26,6 +26,26 @@ export const TRELLO_MEMBER_SCHEMA = z.object({
26
26
  username: z.string(),
27
27
  })
28
28
 
29
+ export const TRELLO_WORKSPACE_SCHEMA = z.object({
30
+ /** Last activity time across the Workspace. */
31
+ lastActivityAt: z.date().nullable(),
32
+
33
+ /** Human-readable Workspace name. */
34
+ displayName: z.string(),
35
+
36
+ /** Stable Trello Workspace ID. */
37
+ id: z.string(),
38
+
39
+ /** URL-safe Workspace name. */
40
+ name: z.string(),
41
+
42
+ /** Public Trello Workspace URL. */
43
+ url: z.string().nullable(),
44
+
45
+ /** Public Workspace website, when configured. */
46
+ website: z.string().nullable(),
47
+ })
48
+
29
49
  export const TRELLO_BOARD_SCHEMA = z.object({
30
50
  /** Whether the board is archived. */
31
51
  closed: z.boolean(),
@@ -58,6 +78,23 @@ export const TRELLO_BOARD_SCHEMA = z.object({
58
78
  url: z.string(),
59
79
  })
60
80
 
81
+ export const TRELLO_BOARD_MEMBERSHIP_SCHEMA = z.object({
82
+ /** Whether the member is deactivated on this board. */
83
+ deactivated: z.boolean(),
84
+
85
+ /** Stable Trello board membership ID. */
86
+ id: z.string(),
87
+
88
+ /** Stable Trello member ID represented by this membership. */
89
+ memberId: z.string(),
90
+
91
+ /** Member's role on this board. */
92
+ memberType: z.enum(["admin", "normal", "observer"]),
93
+
94
+ /** Whether this membership is an unconfirmed invitation. */
95
+ unconfirmed: z.boolean(),
96
+ })
97
+
61
98
  export const TRELLO_LIST_SCHEMA = z.object({
62
99
  /** Stable ID of the containing board. */
63
100
  boardId: z.string(),
@@ -231,6 +268,71 @@ export const TRELLO_CHECKLIST_SCHEMA = z.object({
231
268
  position: z.number(),
232
269
  })
233
270
 
271
+ export const TRELLO_CUSTOM_FIELD_OPTION_SCHEMA = z.object({
272
+ /** Trello label color, or `none`. */
273
+ color: z.string(),
274
+
275
+ /** Stable Trello Custom Field ID. */
276
+ customFieldId: z.string(),
277
+
278
+ /** Stable Trello Custom Field option ID. */
279
+ id: z.string(),
280
+
281
+ /** Trello ordering position. */
282
+ position: z.number(),
283
+
284
+ /** Human-readable dropdown value. */
285
+ text: z.string(),
286
+ })
287
+
288
+ export const TRELLO_CUSTOM_FIELD_SCHEMA = z.object({
289
+ /** Whether the field is displayed on card fronts. */
290
+ displayOnCardFront: z.boolean(),
291
+
292
+ /** Stable Trello field-group hash. */
293
+ fieldGroup: z.string().optional(),
294
+
295
+ /** Stable Trello Custom Field ID. */
296
+ id: z.string(),
297
+
298
+ /** Board containing the Custom Field. */
299
+ modelId: z.string(),
300
+
301
+ /** Custom Field name. */
302
+ name: z.string(),
303
+
304
+ /** Dropdown options, for list fields. */
305
+ options: TRELLO_CUSTOM_FIELD_OPTION_SCHEMA.array(),
306
+
307
+ /** Trello ordering position. */
308
+ position: z.number(),
309
+
310
+ /** Custom Field value type. */
311
+ type: z.enum(["checkbox", "date", "list", "number", "text"]),
312
+ })
313
+
314
+ export const TRELLO_CUSTOM_FIELD_VALUE_SCHEMA = z.discriminatedUnion("type", [
315
+ z.object({ checked: z.boolean(), type: z.literal("checkbox") }),
316
+ z.object({ date: z.date(), type: z.literal("date") }),
317
+ z.object({ optionId: z.string(), type: z.literal("list") }),
318
+ z.object({ number: z.string(), type: z.literal("number") }),
319
+ z.object({ text: z.string(), type: z.literal("text") }),
320
+ ])
321
+
322
+ export const TRELLO_CUSTOM_FIELD_ITEM_SCHEMA = z.object({
323
+ /** Card containing the value. */
324
+ cardId: z.string(),
325
+
326
+ /** Custom Field definition represented by the value. */
327
+ customFieldId: z.string(),
328
+
329
+ /** Stable Trello Custom Field item ID. */
330
+ id: z.string(),
331
+
332
+ /** Typed value stored on the card. */
333
+ value: TRELLO_CUSTOM_FIELD_VALUE_SCHEMA,
334
+ })
335
+
234
336
  export const TRELLO_PROVIDER_MEMBER_SCHEMA = z.looseObject({
235
337
  avatarUrl: z.string().nullable().optional(),
236
338
  fullName: z.string(),
@@ -240,6 +342,15 @@ export const TRELLO_PROVIDER_MEMBER_SCHEMA = z.looseObject({
240
342
  username: z.string(),
241
343
  })
242
344
 
345
+ export const TRELLO_PROVIDER_WORKSPACE_SCHEMA = z.looseObject({
346
+ dateLastActivity: z.string().nullable().optional(),
347
+ displayName: z.string(),
348
+ id: z.string(),
349
+ name: z.string(),
350
+ url: z.string().nullable().optional(),
351
+ website: z.string().nullable().optional(),
352
+ })
353
+
243
354
  export const TRELLO_PROVIDER_BOARD_SCHEMA = z.looseObject({
244
355
  closed: z.boolean().prefault(false),
245
356
  dateLastActivity: z.string().nullable().optional(),
@@ -253,6 +364,14 @@ export const TRELLO_PROVIDER_BOARD_SCHEMA = z.looseObject({
253
364
  url: z.string().prefault(""),
254
365
  })
255
366
 
367
+ export const TRELLO_PROVIDER_BOARD_MEMBERSHIP_SCHEMA = z.looseObject({
368
+ deactivated: z.boolean(),
369
+ id: z.string(),
370
+ idMember: z.string(),
371
+ memberType: z.enum(["admin", "normal", "observer"]),
372
+ unconfirmed: z.boolean(),
373
+ })
374
+
256
375
  export const TRELLO_PROVIDER_LIST_SCHEMA = z.looseObject({
257
376
  closed: z.boolean().prefault(false),
258
377
  id: z.string(),
@@ -327,6 +446,44 @@ export const TRELLO_PROVIDER_CHECKLIST_SCHEMA = z.looseObject({
327
446
  pos: z.number(),
328
447
  })
329
448
 
449
+ export const TRELLO_PROVIDER_CUSTOM_FIELD_OPTION_SCHEMA = z.looseObject({
450
+ color: z.string().prefault("none"),
451
+ id: z.string(),
452
+ idCustomField: z.string(),
453
+ pos: z.number(),
454
+ value: z.looseObject({ text: z.string() }),
455
+ })
456
+
457
+ export const TRELLO_PROVIDER_CUSTOM_FIELD_SCHEMA = z.looseObject({
458
+ display: z
459
+ .looseObject({ cardFront: z.boolean().prefault(true) })
460
+ .prefault({ cardFront: true }),
461
+ fieldGroup: z.string().optional(),
462
+ id: z.string(),
463
+ idModel: z.string(),
464
+ modelType: z.literal("board"),
465
+ name: z.string(),
466
+ options: TRELLO_PROVIDER_CUSTOM_FIELD_OPTION_SCHEMA.array().prefault([]),
467
+ pos: z.number(),
468
+ type: z.enum(["checkbox", "date", "list", "number", "text"]),
469
+ })
470
+
471
+ const TRELLO_PROVIDER_CUSTOM_FIELD_VALUE_SCHEMA = z.looseObject({
472
+ checked: z.union([z.boolean(), z.enum(["true", "false"])]).optional(),
473
+ date: z.string().optional(),
474
+ number: z.string().optional(),
475
+ text: z.string().optional(),
476
+ })
477
+
478
+ export const TRELLO_PROVIDER_CUSTOM_FIELD_ITEM_SCHEMA = z.looseObject({
479
+ id: z.string(),
480
+ idCustomField: z.string(),
481
+ idModel: z.string(),
482
+ idValue: z.string().optional(),
483
+ modelType: z.literal("card"),
484
+ value: TRELLO_PROVIDER_CUSTOM_FIELD_VALUE_SCHEMA.optional(),
485
+ })
486
+
330
487
  /**
331
488
  * Normalizes one Trello member response.
332
489
  *
@@ -345,6 +502,24 @@ export function toTrelloMember(
345
502
  }
346
503
  }
347
504
 
505
+ /**
506
+ * Normalizes one Trello Workspace response.
507
+ *
508
+ * @param workspace - Provider Workspace resource.
509
+ */
510
+ export function toTrelloWorkspace(
511
+ workspace: z.output<typeof TRELLO_PROVIDER_WORKSPACE_SCHEMA>,
512
+ ): z.output<typeof TRELLO_WORKSPACE_SCHEMA> {
513
+ return {
514
+ displayName: workspace.displayName,
515
+ id: workspace.id,
516
+ lastActivityAt: OPTIONAL_DATE_SCHEMA.parse(workspace.dateLastActivity),
517
+ name: workspace.name,
518
+ url: workspace.url ?? null,
519
+ website: workspace.website ?? null,
520
+ }
521
+ }
522
+
348
523
  /**
349
524
  * Normalizes one Trello board response.
350
525
  *
@@ -367,6 +542,23 @@ export function toTrelloBoard(
367
542
  }
368
543
  }
369
544
 
545
+ /**
546
+ * Normalizes one Trello board membership response.
547
+ *
548
+ * @param membership - Provider board membership resource.
549
+ */
550
+ export function toTrelloBoardMembership(
551
+ membership: z.output<typeof TRELLO_PROVIDER_BOARD_MEMBERSHIP_SCHEMA>,
552
+ ): z.output<typeof TRELLO_BOARD_MEMBERSHIP_SCHEMA> {
553
+ return {
554
+ deactivated: membership.deactivated,
555
+ id: membership.id,
556
+ memberId: membership.idMember,
557
+ memberType: membership.memberType,
558
+ unconfirmed: membership.unconfirmed,
559
+ }
560
+ }
561
+
370
562
  /**
371
563
  * Normalizes one Trello list response.
372
564
  *
@@ -505,3 +697,84 @@ export function toTrelloChecklist(
505
697
  position: checklist.pos,
506
698
  }
507
699
  }
700
+
701
+ /**
702
+ * Normalizes one Trello Custom Field option.
703
+ *
704
+ * @param option - Provider Custom Field option.
705
+ */
706
+ export function toTrelloCustomFieldOption(
707
+ option: z.output<typeof TRELLO_PROVIDER_CUSTOM_FIELD_OPTION_SCHEMA>,
708
+ ): z.output<typeof TRELLO_CUSTOM_FIELD_OPTION_SCHEMA> {
709
+ return {
710
+ color: option.color,
711
+ customFieldId: option.idCustomField,
712
+ id: option.id,
713
+ position: option.pos,
714
+ text: option.value.text,
715
+ }
716
+ }
717
+
718
+ /**
719
+ * Normalizes one Trello Custom Field definition.
720
+ *
721
+ * @param field - Provider Custom Field definition.
722
+ */
723
+ export function toTrelloCustomField(
724
+ field: z.output<typeof TRELLO_PROVIDER_CUSTOM_FIELD_SCHEMA>,
725
+ ): z.output<typeof TRELLO_CUSTOM_FIELD_SCHEMA> {
726
+ return {
727
+ displayOnCardFront: field.display.cardFront,
728
+ fieldGroup: field.fieldGroup,
729
+ id: field.id,
730
+ modelId: field.idModel,
731
+ name: field.name,
732
+ options: field.options.map(toTrelloCustomFieldOption),
733
+ position: field.pos,
734
+ type: field.type,
735
+ }
736
+ }
737
+
738
+ /**
739
+ * Normalizes one typed Trello card Custom Field value.
740
+ *
741
+ * @param item - Provider Custom Field item.
742
+ */
743
+ export function toTrelloCustomFieldItem(
744
+ item: z.output<typeof TRELLO_PROVIDER_CUSTOM_FIELD_ITEM_SCHEMA>,
745
+ ): z.output<typeof TRELLO_CUSTOM_FIELD_ITEM_SCHEMA> {
746
+ return {
747
+ cardId: item.idModel,
748
+ customFieldId: item.idCustomField,
749
+ id: item.id,
750
+ value: toTrelloCustomFieldValue(item),
751
+ }
752
+ }
753
+
754
+ /**
755
+ * Converts the provider's key-selected value into a public discriminated union.
756
+ *
757
+ * @param item - Provider Custom Field item.
758
+ * @throws When the provider item contains no supported typed value.
759
+ */
760
+ function toTrelloCustomFieldValue(
761
+ item: z.output<typeof TRELLO_PROVIDER_CUSTOM_FIELD_ITEM_SCHEMA>,
762
+ ): z.output<typeof TRELLO_CUSTOM_FIELD_VALUE_SCHEMA> {
763
+ if (item.idValue) return { optionId: item.idValue, type: "list" }
764
+ if (item.value?.checked !== undefined) {
765
+ return {
766
+ checked:
767
+ typeof item.value.checked === "boolean"
768
+ ? item.value.checked
769
+ : item.value.checked === "true",
770
+ type: "checkbox",
771
+ }
772
+ }
773
+ if (item.value?.date !== undefined)
774
+ return { date: new Date(item.value.date), type: "date" }
775
+ if (item.value?.number !== undefined)
776
+ return { number: item.value.number, type: "number" }
777
+ if (item.value?.text !== undefined)
778
+ return { text: item.value.text, type: "text" }
779
+ throw new Error(`Trello Custom Field item ${item.id} has no typed value.`)
780
+ }