@automate.ax/integration-contracts 0.110.0 → 0.111.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.
- package/dist/asana/api.d.ts +2 -0
- package/dist/asana/api.js +36 -9
- package/dist/asana/base.d.ts +38 -0
- package/dist/asana/base.js +42 -0
- package/dist/asana/index.d.ts +1411 -2
- package/dist/asana/index.js +122 -2
- package/dist/asana/resources.d.ts +513 -0
- package/dist/asana/resources.js +318 -0
- package/dist/asana/schemas.d.ts +274 -60
- package/dist/asana/schemas.js +62 -67
- package/dist/asana/semantic-events.d.ts +1214 -0
- package/dist/asana/semantic-events.js +104 -0
- package/dist/close/schemas.d.ts +1 -1
- package/dist/linear/schemas.d.ts +8 -8
- package/dist/resend/action-schemas.d.ts +4 -4
- package/dist/resend/index.d.ts +36 -36
- package/dist/resend/schemas.d.ts +44 -44
- package/package.json +2 -2
- package/src/asana/api.ts +41 -8
- package/src/asana/base.ts +54 -0
- package/src/asana/index.ts +122 -2
- package/src/asana/resources.ts +401 -0
- package/src/asana/schemas.ts +77 -79
- package/src/asana/semantic-events.ts +201 -0
package/src/asana/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as z from "zod"
|
|
2
|
+
import * as semantic from "./semantic-events"
|
|
2
3
|
import {
|
|
3
4
|
ASANA_COMMENT_ADDED_EVENT_SCHEMA,
|
|
4
5
|
ASANA_EVENT_SCHEMA,
|
|
@@ -10,11 +11,14 @@ import {
|
|
|
10
11
|
} from "./schemas"
|
|
11
12
|
|
|
12
13
|
export * from "./api"
|
|
14
|
+
export * from "./base"
|
|
15
|
+
export * from "./resources"
|
|
16
|
+
export * from "./semantic-events"
|
|
13
17
|
export * from "./schemas"
|
|
14
18
|
|
|
15
19
|
/** Asana resource selected for one webhook subscription. */
|
|
16
20
|
export const ASANA_TRIGGER_CONFIG_SCHEMA = z.object({
|
|
17
|
-
resourceId: z.string(),
|
|
21
|
+
resourceId: z.string().min(1),
|
|
18
22
|
})
|
|
19
23
|
|
|
20
24
|
export const asanaTriggerContracts = {
|
|
@@ -22,7 +26,7 @@ export const asanaTriggerContracts = {
|
|
|
22
26
|
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
23
27
|
eventSchema: ASANA_COMMENT_ADDED_EVENT_SCHEMA,
|
|
24
28
|
},
|
|
25
|
-
"asana.event": {
|
|
29
|
+
"asana.resource.event": {
|
|
26
30
|
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
27
31
|
eventSchema: ASANA_EVENT_SCHEMA,
|
|
28
32
|
},
|
|
@@ -46,4 +50,120 @@ export const asanaTriggerContracts = {
|
|
|
46
50
|
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
47
51
|
eventSchema: ASANA_TASK_REMOVED_EVENT_SCHEMA,
|
|
48
52
|
},
|
|
53
|
+
"asana.attachment.deleted": {
|
|
54
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
55
|
+
eventSchema: semantic.ASANA_ATTACHMENT_DELETED_EVENT_SCHEMA,
|
|
56
|
+
},
|
|
57
|
+
"asana.attachment.restored": {
|
|
58
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
59
|
+
eventSchema: semantic.ASANA_ATTACHMENT_RESTORED_EVENT_SCHEMA,
|
|
60
|
+
},
|
|
61
|
+
"asana.comment.deleted": {
|
|
62
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
63
|
+
eventSchema: semantic.ASANA_COMMENT_DELETED_EVENT_SCHEMA,
|
|
64
|
+
},
|
|
65
|
+
"asana.comment.restored": {
|
|
66
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
67
|
+
eventSchema: semantic.ASANA_COMMENT_RESTORED_EVENT_SCHEMA,
|
|
68
|
+
},
|
|
69
|
+
"asana.comment.updated": {
|
|
70
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
71
|
+
eventSchema: semantic.ASANA_COMMENT_UPDATED_EVENT_SCHEMA,
|
|
72
|
+
},
|
|
73
|
+
"asana.project.added": {
|
|
74
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
75
|
+
eventSchema: semantic.ASANA_PROJECT_ADDED_EVENT_SCHEMA,
|
|
76
|
+
},
|
|
77
|
+
"asana.project.changed": {
|
|
78
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
79
|
+
eventSchema: semantic.ASANA_PROJECT_CHANGED_EVENT_SCHEMA,
|
|
80
|
+
},
|
|
81
|
+
"asana.project.deleted": {
|
|
82
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
83
|
+
eventSchema: semantic.ASANA_PROJECT_DELETED_EVENT_SCHEMA,
|
|
84
|
+
},
|
|
85
|
+
"asana.project.removed": {
|
|
86
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
87
|
+
eventSchema: semantic.ASANA_PROJECT_REMOVED_EVENT_SCHEMA,
|
|
88
|
+
},
|
|
89
|
+
"asana.project.restored": {
|
|
90
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
91
|
+
eventSchema: semantic.ASANA_PROJECT_RESTORED_EVENT_SCHEMA,
|
|
92
|
+
},
|
|
93
|
+
"asana.section.added": {
|
|
94
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
95
|
+
eventSchema: semantic.ASANA_SECTION_ADDED_EVENT_SCHEMA,
|
|
96
|
+
},
|
|
97
|
+
"asana.section.changed": {
|
|
98
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
99
|
+
eventSchema: semantic.ASANA_SECTION_CHANGED_EVENT_SCHEMA,
|
|
100
|
+
},
|
|
101
|
+
"asana.section.deleted": {
|
|
102
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
103
|
+
eventSchema: semantic.ASANA_SECTION_DELETED_EVENT_SCHEMA,
|
|
104
|
+
},
|
|
105
|
+
"asana.section.restored": {
|
|
106
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
107
|
+
eventSchema: semantic.ASANA_SECTION_RESTORED_EVENT_SCHEMA,
|
|
108
|
+
},
|
|
109
|
+
"asana.tag.added": {
|
|
110
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
111
|
+
eventSchema: semantic.ASANA_TAG_ADDED_EVENT_SCHEMA,
|
|
112
|
+
},
|
|
113
|
+
"asana.tag.changed": {
|
|
114
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
115
|
+
eventSchema: semantic.ASANA_TAG_CHANGED_EVENT_SCHEMA,
|
|
116
|
+
},
|
|
117
|
+
"asana.tag.deleted": {
|
|
118
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
119
|
+
eventSchema: semantic.ASANA_TAG_DELETED_EVENT_SCHEMA,
|
|
120
|
+
},
|
|
121
|
+
"asana.tag.restored": {
|
|
122
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
123
|
+
eventSchema: semantic.ASANA_TAG_RESTORED_EVENT_SCHEMA,
|
|
124
|
+
},
|
|
125
|
+
"asana.task.assigned": {
|
|
126
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
127
|
+
eventSchema: semantic.ASANA_TASK_ASSIGNED_EVENT_SCHEMA,
|
|
128
|
+
},
|
|
129
|
+
"asana.task.due-date.changed": {
|
|
130
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
131
|
+
eventSchema: semantic.ASANA_TASK_DUE_DATE_CHANGED_EVENT_SCHEMA,
|
|
132
|
+
},
|
|
133
|
+
"asana.task.follower.added": {
|
|
134
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
135
|
+
eventSchema: semantic.ASANA_TASK_FOLLOWER_ADDED_EVENT_SCHEMA,
|
|
136
|
+
},
|
|
137
|
+
"asana.task.follower.removed": {
|
|
138
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
139
|
+
eventSchema: semantic.ASANA_TASK_FOLLOWER_REMOVED_EVENT_SCHEMA,
|
|
140
|
+
},
|
|
141
|
+
"asana.task.incomplete": {
|
|
142
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
143
|
+
eventSchema: semantic.ASANA_TASK_INCOMPLETE_EVENT_SCHEMA,
|
|
144
|
+
},
|
|
145
|
+
"asana.task.project.added": {
|
|
146
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
147
|
+
eventSchema: semantic.ASANA_TASK_PROJECT_ADDED_EVENT_SCHEMA,
|
|
148
|
+
},
|
|
149
|
+
"asana.task.project.removed": {
|
|
150
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
151
|
+
eventSchema: semantic.ASANA_TASK_PROJECT_REMOVED_EVENT_SCHEMA,
|
|
152
|
+
},
|
|
153
|
+
"asana.task.restored": {
|
|
154
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
155
|
+
eventSchema: semantic.ASANA_TASK_RESTORED_EVENT_SCHEMA,
|
|
156
|
+
},
|
|
157
|
+
"asana.task.tag.added": {
|
|
158
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
159
|
+
eventSchema: semantic.ASANA_TASK_TAG_ADDED_EVENT_SCHEMA,
|
|
160
|
+
},
|
|
161
|
+
"asana.task.tag.removed": {
|
|
162
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
163
|
+
eventSchema: semantic.ASANA_TASK_TAG_REMOVED_EVENT_SCHEMA,
|
|
164
|
+
},
|
|
165
|
+
"asana.task.unassigned": {
|
|
166
|
+
configSchema: ASANA_TRIGGER_CONFIG_SCHEMA,
|
|
167
|
+
eventSchema: semantic.ASANA_TASK_UNASSIGNED_EVENT_SCHEMA,
|
|
168
|
+
},
|
|
49
169
|
} as const
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
import * as z from "zod"
|
|
2
|
+
import {
|
|
3
|
+
ASANA_PROVIDER_RESOURCE_SCHEMA,
|
|
4
|
+
ASANA_RESOURCE_SCHEMA,
|
|
5
|
+
toAsanaResource,
|
|
6
|
+
} from "./base"
|
|
7
|
+
|
|
8
|
+
export const ASANA_ATTACHMENT_SCHEMA = ASANA_RESOURCE_SCHEMA.extend({
|
|
9
|
+
/** RFC 3339 creation timestamp. */
|
|
10
|
+
createdAt: z.string().optional(),
|
|
11
|
+
|
|
12
|
+
/** Temporary authenticated download URL. */
|
|
13
|
+
downloadUrl: z.string().optional(),
|
|
14
|
+
|
|
15
|
+
/** Attachment host, such as `asana`, `dropbox`, or `gdrive`. */
|
|
16
|
+
host: z.string().optional(),
|
|
17
|
+
|
|
18
|
+
/** Resource containing the attachment. */
|
|
19
|
+
parent: ASANA_RESOURCE_SCHEMA.optional(),
|
|
20
|
+
|
|
21
|
+
/** Stable provider URL for the attachment. */
|
|
22
|
+
permanentUrl: z.string().optional(),
|
|
23
|
+
|
|
24
|
+
/** File size in bytes. */
|
|
25
|
+
size: z.number().int().nonnegative().optional(),
|
|
26
|
+
|
|
27
|
+
/** Browser URL for viewing the attachment. */
|
|
28
|
+
viewUrl: z.string().optional(),
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
export const ASANA_TAG_SCHEMA = ASANA_RESOURCE_SCHEMA.extend({
|
|
32
|
+
/** Provider color token. */
|
|
33
|
+
color: z.string().optional(),
|
|
34
|
+
|
|
35
|
+
/** RFC 3339 creation timestamp. */
|
|
36
|
+
createdAt: z.string().optional(),
|
|
37
|
+
|
|
38
|
+
/** Users following this tag. */
|
|
39
|
+
followers: ASANA_RESOURCE_SCHEMA.array(),
|
|
40
|
+
|
|
41
|
+
/** Tag description. */
|
|
42
|
+
notes: z.string().optional(),
|
|
43
|
+
|
|
44
|
+
/** Workspace containing the tag. */
|
|
45
|
+
workspace: ASANA_RESOURCE_SCHEMA.optional(),
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
export const ASANA_TEAM_SCHEMA = ASANA_RESOURCE_SCHEMA.extend({
|
|
49
|
+
/** Plain-text team description. */
|
|
50
|
+
description: z.string().optional(),
|
|
51
|
+
|
|
52
|
+
/** Rich-text team description. */
|
|
53
|
+
htmlDescription: z.string().optional(),
|
|
54
|
+
|
|
55
|
+
/** Organization containing the team. */
|
|
56
|
+
organization: ASANA_RESOURCE_SCHEMA.optional(),
|
|
57
|
+
|
|
58
|
+
/** Browser URL for the team. */
|
|
59
|
+
permalinkUrl: z.string().optional(),
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
export const ASANA_ENUM_OPTION_SCHEMA = ASANA_RESOURCE_SCHEMA.extend({
|
|
63
|
+
/** Provider color token. */
|
|
64
|
+
color: z.string().optional(),
|
|
65
|
+
|
|
66
|
+
/** Whether users may select this option. */
|
|
67
|
+
enabled: z.boolean(),
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
export const ASANA_CUSTOM_FIELD_DATE_VALUE_SCHEMA = z.object({
|
|
71
|
+
/** Calendar date in YYYY-MM-DD format. */
|
|
72
|
+
date: z.string(),
|
|
73
|
+
|
|
74
|
+
/** RFC 3339 timestamp when the field includes a time. */
|
|
75
|
+
dateTime: z.string().optional(),
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
const ASANA_CUSTOM_FIELD_DATE_INPUT_VALUE_SCHEMA = z
|
|
79
|
+
.object({
|
|
80
|
+
/** Calendar date in YYYY-MM-DD format. */
|
|
81
|
+
date: z.string().optional(),
|
|
82
|
+
|
|
83
|
+
/** RFC 3339 timestamp when the field includes a time. */
|
|
84
|
+
dateTime: z.string().optional(),
|
|
85
|
+
})
|
|
86
|
+
.refine(({ date, dateTime }) => Boolean(date) !== Boolean(dateTime), {
|
|
87
|
+
message: "Provide exactly one custom-field date value.",
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
export const ASANA_CUSTOM_FIELD_SCHEMA = ASANA_RESOURCE_SCHEMA.extend({
|
|
91
|
+
/** Custom currency label. */
|
|
92
|
+
customLabel: z.string().optional(),
|
|
93
|
+
|
|
94
|
+
/** ISO currency code. */
|
|
95
|
+
currencyCode: z.string().optional(),
|
|
96
|
+
|
|
97
|
+
/** Field description. */
|
|
98
|
+
description: z.string().optional(),
|
|
99
|
+
|
|
100
|
+
/** Selectable enum options. */
|
|
101
|
+
enumOptions: ASANA_ENUM_OPTION_SCHEMA.array(),
|
|
102
|
+
|
|
103
|
+
/** Numeric display format. */
|
|
104
|
+
format: z.string().optional(),
|
|
105
|
+
|
|
106
|
+
/** Decimal precision for number fields. */
|
|
107
|
+
precision: z.number().int().nonnegative().optional(),
|
|
108
|
+
|
|
109
|
+
/** Custom field subtype. */
|
|
110
|
+
subtype: z.string(),
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
export const ASANA_CUSTOM_FIELD_VALUE_SCHEMA = ASANA_CUSTOM_FIELD_SCHEMA.extend(
|
|
114
|
+
{
|
|
115
|
+
/** Structured date value. */
|
|
116
|
+
dateValue: ASANA_CUSTOM_FIELD_DATE_VALUE_SCHEMA.optional(),
|
|
117
|
+
|
|
118
|
+
/** Human-readable value rendered by Asana. */
|
|
119
|
+
displayValue: z.string().optional(),
|
|
120
|
+
|
|
121
|
+
/** Selected single-enum option. */
|
|
122
|
+
enumValue: ASANA_ENUM_OPTION_SCHEMA.optional(),
|
|
123
|
+
|
|
124
|
+
/** Selected multi-enum options. */
|
|
125
|
+
multiEnumValues: ASANA_ENUM_OPTION_SCHEMA.array(),
|
|
126
|
+
|
|
127
|
+
/** Numeric value. */
|
|
128
|
+
numberValue: z.number().optional(),
|
|
129
|
+
|
|
130
|
+
/** Selected people. */
|
|
131
|
+
peopleValue: ASANA_RESOURCE_SCHEMA.array(),
|
|
132
|
+
|
|
133
|
+
/** Selected referenced resources. */
|
|
134
|
+
referenceValue: ASANA_RESOURCE_SCHEMA.array(),
|
|
135
|
+
|
|
136
|
+
/** Text value. */
|
|
137
|
+
textValue: z.string().optional(),
|
|
138
|
+
},
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
export const ASANA_CUSTOM_FIELD_INPUT_VALUE_SCHEMA = z.union([
|
|
142
|
+
z.string(),
|
|
143
|
+
z.number(),
|
|
144
|
+
z.string().array(),
|
|
145
|
+
ASANA_CUSTOM_FIELD_DATE_INPUT_VALUE_SCHEMA,
|
|
146
|
+
z.null(),
|
|
147
|
+
])
|
|
148
|
+
|
|
149
|
+
export const ASANA_PROJECT_TASK_COUNTS_SCHEMA = z.object({
|
|
150
|
+
numCompletedMilestones: z.number().int().nonnegative(),
|
|
151
|
+
numCompletedTasks: z.number().int().nonnegative(),
|
|
152
|
+
numIncompleteMilestones: z.number().int().nonnegative(),
|
|
153
|
+
numIncompleteTasks: z.number().int().nonnegative(),
|
|
154
|
+
numMilestones: z.number().int().nonnegative(),
|
|
155
|
+
numTasks: z.number().int().nonnegative(),
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
export const ASANA_JOB_SCHEMA = ASANA_RESOURCE_SCHEMA.extend({
|
|
159
|
+
/** Newly created project, when the job duplicates a project. */
|
|
160
|
+
newProject: ASANA_RESOURCE_SCHEMA.optional(),
|
|
161
|
+
|
|
162
|
+
/** Newly created task, when the job duplicates a task. */
|
|
163
|
+
newTask: ASANA_RESOURCE_SCHEMA.optional(),
|
|
164
|
+
|
|
165
|
+
/** Current asynchronous job state. */
|
|
166
|
+
status: z.enum(["failed", "in_progress", "not_started", "succeeded"]),
|
|
167
|
+
|
|
168
|
+
/** Provider job subtype. */
|
|
169
|
+
subtype: z.string().optional(),
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
export const ASANA_PROVIDER_ATTACHMENT_SCHEMA =
|
|
173
|
+
ASANA_PROVIDER_RESOURCE_SCHEMA.extend({
|
|
174
|
+
created_at: z.string().optional(),
|
|
175
|
+
download_url: z.string().nullish(),
|
|
176
|
+
host: z.string().optional(),
|
|
177
|
+
parent: ASANA_PROVIDER_RESOURCE_SCHEMA.nullish(),
|
|
178
|
+
permanent_url: z.string().nullish(),
|
|
179
|
+
size: z.number().int().nonnegative().nullish(),
|
|
180
|
+
view_url: z.string().nullish(),
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
export const ASANA_PROVIDER_TAG_SCHEMA = ASANA_PROVIDER_RESOURCE_SCHEMA.extend({
|
|
184
|
+
color: z.string().nullish(),
|
|
185
|
+
created_at: z.string().optional(),
|
|
186
|
+
followers: ASANA_PROVIDER_RESOURCE_SCHEMA.array().optional(),
|
|
187
|
+
notes: z.string().optional(),
|
|
188
|
+
workspace: ASANA_PROVIDER_RESOURCE_SCHEMA.nullish(),
|
|
189
|
+
})
|
|
190
|
+
|
|
191
|
+
export const ASANA_PROVIDER_TEAM_SCHEMA = ASANA_PROVIDER_RESOURCE_SCHEMA.extend(
|
|
192
|
+
{
|
|
193
|
+
description: z.string().optional(),
|
|
194
|
+
html_description: z.string().optional(),
|
|
195
|
+
organization: ASANA_PROVIDER_RESOURCE_SCHEMA.nullish(),
|
|
196
|
+
permalink_url: z.string().optional(),
|
|
197
|
+
},
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
export const ASANA_PROVIDER_ENUM_OPTION_SCHEMA =
|
|
201
|
+
ASANA_PROVIDER_RESOURCE_SCHEMA.extend({
|
|
202
|
+
color: z.string().nullish(),
|
|
203
|
+
enabled: z.boolean(),
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
export const ASANA_PROVIDER_CUSTOM_FIELD_SCHEMA =
|
|
207
|
+
ASANA_PROVIDER_RESOURCE_SCHEMA.extend({
|
|
208
|
+
custom_label: z.string().nullish(),
|
|
209
|
+
currency_code: z.string().nullish(),
|
|
210
|
+
description: z.string().optional(),
|
|
211
|
+
enum_options: ASANA_PROVIDER_ENUM_OPTION_SCHEMA.array().optional(),
|
|
212
|
+
format: z.string().nullish(),
|
|
213
|
+
precision: z.number().int().nonnegative().nullish(),
|
|
214
|
+
resource_subtype: z.string(),
|
|
215
|
+
})
|
|
216
|
+
|
|
217
|
+
export const ASANA_PROVIDER_CUSTOM_FIELD_VALUE_SCHEMA =
|
|
218
|
+
ASANA_PROVIDER_CUSTOM_FIELD_SCHEMA.extend({
|
|
219
|
+
date_value: z
|
|
220
|
+
.looseObject({
|
|
221
|
+
date: z.string(),
|
|
222
|
+
date_time: z.string().nullish(),
|
|
223
|
+
})
|
|
224
|
+
.nullish(),
|
|
225
|
+
display_value: z.string().nullish(),
|
|
226
|
+
enum_value: ASANA_PROVIDER_ENUM_OPTION_SCHEMA.nullish(),
|
|
227
|
+
multi_enum_values: ASANA_PROVIDER_ENUM_OPTION_SCHEMA.array().optional(),
|
|
228
|
+
number_value: z.number().nullish(),
|
|
229
|
+
people_value: ASANA_PROVIDER_RESOURCE_SCHEMA.array().optional(),
|
|
230
|
+
reference_value: ASANA_PROVIDER_RESOURCE_SCHEMA.array().optional(),
|
|
231
|
+
text_value: z.string().nullish(),
|
|
232
|
+
})
|
|
233
|
+
|
|
234
|
+
export const ASANA_PROVIDER_PROJECT_TASK_COUNTS_SCHEMA = z.looseObject({
|
|
235
|
+
num_completed_milestones: z.number().int().nonnegative(),
|
|
236
|
+
num_completed_tasks: z.number().int().nonnegative(),
|
|
237
|
+
num_incomplete_milestones: z.number().int().nonnegative(),
|
|
238
|
+
num_incomplete_tasks: z.number().int().nonnegative(),
|
|
239
|
+
num_milestones: z.number().int().nonnegative(),
|
|
240
|
+
num_tasks: z.number().int().nonnegative(),
|
|
241
|
+
})
|
|
242
|
+
|
|
243
|
+
export const ASANA_PROVIDER_JOB_SCHEMA = ASANA_PROVIDER_RESOURCE_SCHEMA.extend({
|
|
244
|
+
new_project: ASANA_PROVIDER_RESOURCE_SCHEMA.nullish(),
|
|
245
|
+
new_task: ASANA_PROVIDER_RESOURCE_SCHEMA.nullish(),
|
|
246
|
+
resource_subtype: z.string().optional(),
|
|
247
|
+
status: z.enum(["failed", "in_progress", "not_started", "succeeded"]),
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Converts a provider attachment to the public shape.
|
|
252
|
+
*
|
|
253
|
+
* @param value - Provider attachment.
|
|
254
|
+
*/
|
|
255
|
+
export function toAsanaAttachment(
|
|
256
|
+
value: z.output<typeof ASANA_PROVIDER_ATTACHMENT_SCHEMA>,
|
|
257
|
+
) {
|
|
258
|
+
return {
|
|
259
|
+
...toAsanaResource(value),
|
|
260
|
+
createdAt: value.created_at,
|
|
261
|
+
downloadUrl: value.download_url ?? undefined,
|
|
262
|
+
host: value.host,
|
|
263
|
+
parent: value.parent ? toAsanaResource(value.parent) : undefined,
|
|
264
|
+
permanentUrl: value.permanent_url ?? undefined,
|
|
265
|
+
size: value.size ?? undefined,
|
|
266
|
+
viewUrl: value.view_url ?? undefined,
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Converts a provider tag to the public shape.
|
|
272
|
+
*
|
|
273
|
+
* @param value - Provider tag.
|
|
274
|
+
*/
|
|
275
|
+
export function toAsanaTag(value: z.output<typeof ASANA_PROVIDER_TAG_SCHEMA>) {
|
|
276
|
+
return {
|
|
277
|
+
...toAsanaResource(value),
|
|
278
|
+
color: value.color ?? undefined,
|
|
279
|
+
createdAt: value.created_at,
|
|
280
|
+
followers: (value.followers ?? []).map(toAsanaResource),
|
|
281
|
+
notes: value.notes,
|
|
282
|
+
workspace: value.workspace ? toAsanaResource(value.workspace) : undefined,
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Converts a provider team to the public shape.
|
|
288
|
+
*
|
|
289
|
+
* @param value - Provider team.
|
|
290
|
+
*/
|
|
291
|
+
export function toAsanaTeam(
|
|
292
|
+
value: z.output<typeof ASANA_PROVIDER_TEAM_SCHEMA>,
|
|
293
|
+
) {
|
|
294
|
+
return {
|
|
295
|
+
...toAsanaResource(value),
|
|
296
|
+
description: value.description,
|
|
297
|
+
htmlDescription: value.html_description,
|
|
298
|
+
organization: value.organization
|
|
299
|
+
? toAsanaResource(value.organization)
|
|
300
|
+
: undefined,
|
|
301
|
+
permalinkUrl: value.permalink_url,
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Converts a provider enum option to the public shape.
|
|
307
|
+
*
|
|
308
|
+
* @param value - Provider enum option.
|
|
309
|
+
*/
|
|
310
|
+
export function toAsanaEnumOption(
|
|
311
|
+
value: z.output<typeof ASANA_PROVIDER_ENUM_OPTION_SCHEMA>,
|
|
312
|
+
) {
|
|
313
|
+
return {
|
|
314
|
+
...toAsanaResource(value),
|
|
315
|
+
color: value.color ?? undefined,
|
|
316
|
+
enabled: value.enabled,
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Converts a provider custom field to the public shape.
|
|
322
|
+
*
|
|
323
|
+
* @param value - Provider custom field.
|
|
324
|
+
*/
|
|
325
|
+
export function toAsanaCustomField(
|
|
326
|
+
value: z.output<typeof ASANA_PROVIDER_CUSTOM_FIELD_SCHEMA>,
|
|
327
|
+
) {
|
|
328
|
+
return {
|
|
329
|
+
...toAsanaResource(value),
|
|
330
|
+
customLabel: value.custom_label ?? undefined,
|
|
331
|
+
currencyCode: value.currency_code ?? undefined,
|
|
332
|
+
description: value.description,
|
|
333
|
+
enumOptions: (value.enum_options ?? []).map(toAsanaEnumOption),
|
|
334
|
+
format: value.format ?? undefined,
|
|
335
|
+
precision: value.precision ?? undefined,
|
|
336
|
+
subtype: value.resource_subtype,
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Converts a provider custom-field value to the public shape.
|
|
342
|
+
*
|
|
343
|
+
* @param value - Provider field value.
|
|
344
|
+
*/
|
|
345
|
+
export function toAsanaCustomFieldValue(
|
|
346
|
+
value: z.output<typeof ASANA_PROVIDER_CUSTOM_FIELD_VALUE_SCHEMA>,
|
|
347
|
+
) {
|
|
348
|
+
return {
|
|
349
|
+
...toAsanaCustomField(value),
|
|
350
|
+
dateValue: value.date_value
|
|
351
|
+
? {
|
|
352
|
+
date: value.date_value.date,
|
|
353
|
+
dateTime: value.date_value.date_time ?? undefined,
|
|
354
|
+
}
|
|
355
|
+
: undefined,
|
|
356
|
+
displayValue: value.display_value ?? undefined,
|
|
357
|
+
enumValue: value.enum_value
|
|
358
|
+
? toAsanaEnumOption(value.enum_value)
|
|
359
|
+
: undefined,
|
|
360
|
+
multiEnumValues: (value.multi_enum_values ?? []).map(toAsanaEnumOption),
|
|
361
|
+
numberValue: value.number_value ?? undefined,
|
|
362
|
+
peopleValue: (value.people_value ?? []).map(toAsanaResource),
|
|
363
|
+
referenceValue: (value.reference_value ?? []).map(toAsanaResource),
|
|
364
|
+
textValue: value.text_value ?? undefined,
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Converts provider project task counts to the public shape.
|
|
370
|
+
*
|
|
371
|
+
* @param value - Provider counts.
|
|
372
|
+
*/
|
|
373
|
+
export function toAsanaProjectTaskCounts(
|
|
374
|
+
value: z.output<typeof ASANA_PROVIDER_PROJECT_TASK_COUNTS_SCHEMA>,
|
|
375
|
+
) {
|
|
376
|
+
return {
|
|
377
|
+
numCompletedMilestones: value.num_completed_milestones,
|
|
378
|
+
numCompletedTasks: value.num_completed_tasks,
|
|
379
|
+
numIncompleteMilestones: value.num_incomplete_milestones,
|
|
380
|
+
numIncompleteTasks: value.num_incomplete_tasks,
|
|
381
|
+
numMilestones: value.num_milestones,
|
|
382
|
+
numTasks: value.num_tasks,
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Converts a provider asynchronous job to the public shape.
|
|
388
|
+
*
|
|
389
|
+
* @param value - Provider job.
|
|
390
|
+
*/
|
|
391
|
+
export function toAsanaJob(value: z.output<typeof ASANA_PROVIDER_JOB_SCHEMA>) {
|
|
392
|
+
return {
|
|
393
|
+
...toAsanaResource(value),
|
|
394
|
+
newProject: value.new_project
|
|
395
|
+
? toAsanaResource(value.new_project)
|
|
396
|
+
: undefined,
|
|
397
|
+
newTask: value.new_task ? toAsanaResource(value.new_task) : undefined,
|
|
398
|
+
status: value.status,
|
|
399
|
+
subtype: value.resource_subtype,
|
|
400
|
+
}
|
|
401
|
+
}
|