@automate.ax/integration-contracts 0.104.0 → 0.107.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/close/events.d.ts +13 -13
- package/dist/close/schemas.d.ts +9 -9
- package/dist/cloudflare/api.d.ts +93 -0
- package/dist/cloudflare/api.js +250 -0
- package/dist/cloudflare/events.d.ts +1340 -0
- package/dist/cloudflare/events.js +178 -0
- package/dist/cloudflare/index.d.ts +3 -0
- package/dist/cloudflare/index.js +3 -0
- package/dist/cloudflare/schemas.d.ts +608 -0
- package/dist/cloudflare/schemas.js +340 -0
- package/dist/linear/api.d.ts +1 -1
- package/dist/linear/api.js +9 -6
- package/dist/linear/index.d.ts +3479 -782
- package/dist/linear/index.js +249 -13
- package/dist/linear/schemas.d.ts +2721 -28
- package/dist/linear/schemas.js +515 -2
- package/dist/notion/index.js +2 -2
- package/dist/notion/schemas.d.ts +2140 -58
- package/dist/notion/schemas.js +41 -2
- package/dist/outlook/schemas.d.ts +2 -2
- package/dist/resend/action-schemas.d.ts +9 -9
- package/dist/resend/index.d.ts +36 -36
- package/dist/resend/schemas.d.ts +40 -40
- package/dist/slack/event-schemas.d.ts +583 -583
- package/dist/slack/index.d.ts +303 -303
- package/dist/slack/schemas.d.ts +1 -1
- package/dist/teams/schemas.d.ts +5 -5
- package/dist/triggers.d.ts +2 -1
- package/dist/whatsapp/index.d.ts +2 -2
- package/dist/whatsapp/schemas.d.ts +5 -5
- package/package.json +8 -2
- package/src/cloudflare/api.ts +340 -0
- package/src/cloudflare/events.ts +212 -0
- package/src/cloudflare/index.ts +3 -0
- package/src/cloudflare/schemas.ts +359 -0
- package/src/linear/api.ts +10 -6
- package/src/linear/index.ts +249 -26
- package/src/linear/schemas.ts +688 -2
- package/src/notion/index.ts +2 -2
- package/src/notion/schemas.ts +58 -4
- package/src/triggers.ts +2 -0
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
import { encodableSchema } from "@automate.ax/codec";
|
|
3
|
+
const IDENTIFIER_SCHEMA = z.string().trim().min(1).max(32);
|
|
4
|
+
const RESPONSE_INFO_SCHEMA = z.object({
|
|
5
|
+
code: z.number().optional(),
|
|
6
|
+
documentationUrl: z.string().optional(),
|
|
7
|
+
message: z.string(),
|
|
8
|
+
source: z.object({ pointer: z.string().optional() }).optional(),
|
|
9
|
+
});
|
|
10
|
+
export const CLOUDFLARE_PAGE_INFO_SCHEMA = z.object({
|
|
11
|
+
count: z.number().int().nonnegative().optional(),
|
|
12
|
+
page: z.number().int().positive().optional(),
|
|
13
|
+
perPage: z.number().int().positive().optional(),
|
|
14
|
+
totalCount: z.number().int().nonnegative().optional(),
|
|
15
|
+
totalPages: z.number().int().nonnegative().optional(),
|
|
16
|
+
});
|
|
17
|
+
export const CLOUDFLARE_ACCOUNT_SCHEMA = z.object({
|
|
18
|
+
id: IDENTIFIER_SCHEMA,
|
|
19
|
+
name: z.string().min(1),
|
|
20
|
+
settings: z
|
|
21
|
+
.object({
|
|
22
|
+
abuseContactEmail: z.string().nullable().optional(),
|
|
23
|
+
enforceTwoFactor: z.boolean().optional(),
|
|
24
|
+
})
|
|
25
|
+
.optional(),
|
|
26
|
+
type: z.enum(["enterprise", "standard"]).optional(),
|
|
27
|
+
});
|
|
28
|
+
export const CLOUDFLARE_ZONE_SCHEMA = z.object({
|
|
29
|
+
account: z.object({
|
|
30
|
+
id: IDENTIFIER_SCHEMA,
|
|
31
|
+
name: z.string().optional(),
|
|
32
|
+
}),
|
|
33
|
+
activatedOn: z.string().nullable().optional(),
|
|
34
|
+
createdOn: z.string(),
|
|
35
|
+
developmentMode: z.number(),
|
|
36
|
+
id: IDENTIFIER_SCHEMA,
|
|
37
|
+
meta: z.object({
|
|
38
|
+
cdnOnly: z.boolean().optional(),
|
|
39
|
+
customCertificateQuota: z.number().int().optional(),
|
|
40
|
+
dnsOnly: z.boolean().optional(),
|
|
41
|
+
foundationDns: z.boolean().optional(),
|
|
42
|
+
pageRuleQuota: z.number().int().optional(),
|
|
43
|
+
phishingDetected: z.boolean().optional(),
|
|
44
|
+
step: z.number().int().optional(),
|
|
45
|
+
}),
|
|
46
|
+
modifiedOn: z.string(),
|
|
47
|
+
name: z.string().min(1).max(253),
|
|
48
|
+
nameServers: z.string().array(),
|
|
49
|
+
originalDnshost: z.string().nullable().optional(),
|
|
50
|
+
originalNameServers: z.string().array().nullable().optional(),
|
|
51
|
+
originalRegistrar: z.string().nullable().optional(),
|
|
52
|
+
paused: z.boolean(),
|
|
53
|
+
status: z.enum(["active", "initializing", "moved", "pending"]),
|
|
54
|
+
type: z.enum(["full", "internal", "partial", "secondary"]),
|
|
55
|
+
vanityNameServers: z.string().array().optional(),
|
|
56
|
+
});
|
|
57
|
+
export const CLOUDFLARE_DNS_RECORD_TYPE_SCHEMA = z.enum([
|
|
58
|
+
"A",
|
|
59
|
+
"AAAA",
|
|
60
|
+
"CAA",
|
|
61
|
+
"CERT",
|
|
62
|
+
"CNAME",
|
|
63
|
+
"DNSKEY",
|
|
64
|
+
"DS",
|
|
65
|
+
"HTTPS",
|
|
66
|
+
"LOC",
|
|
67
|
+
"MX",
|
|
68
|
+
"NAPTR",
|
|
69
|
+
"NS",
|
|
70
|
+
"OPENPGPKEY",
|
|
71
|
+
"PTR",
|
|
72
|
+
"SMIMEA",
|
|
73
|
+
"SRV",
|
|
74
|
+
"SSHFP",
|
|
75
|
+
"SVCB",
|
|
76
|
+
"TLSA",
|
|
77
|
+
"TXT",
|
|
78
|
+
"URI",
|
|
79
|
+
]);
|
|
80
|
+
export const CLOUDFLARE_DNS_RECORD_SCHEMA = z.object({
|
|
81
|
+
comment: z.string().nullable().optional(),
|
|
82
|
+
commentModifiedOn: z.string().nullable().optional(),
|
|
83
|
+
content: z.string(),
|
|
84
|
+
createdOn: z.string(),
|
|
85
|
+
data: z.record(z.string(), encodableSchema).optional(),
|
|
86
|
+
id: IDENTIFIER_SCHEMA,
|
|
87
|
+
meta: z.record(z.string(), encodableSchema).optional(),
|
|
88
|
+
modifiedOn: z.string(),
|
|
89
|
+
name: z.string().min(1).max(255),
|
|
90
|
+
priority: z.number().int().min(0).max(65_535).optional(),
|
|
91
|
+
proxiable: z.boolean(),
|
|
92
|
+
proxied: z.boolean(),
|
|
93
|
+
settings: z.record(z.string(), encodableSchema).optional(),
|
|
94
|
+
tags: z.string().array().optional(),
|
|
95
|
+
tagsModifiedOn: z.string().nullable().optional(),
|
|
96
|
+
ttl: z.number().int().nonnegative(),
|
|
97
|
+
type: CLOUDFLARE_DNS_RECORD_TYPE_SCHEMA,
|
|
98
|
+
});
|
|
99
|
+
export const CLOUDFLARE_HEALTH_CHECK_REGION_SCHEMA = z.enum([
|
|
100
|
+
"ALL_REGIONS",
|
|
101
|
+
"EEU",
|
|
102
|
+
"ENAM",
|
|
103
|
+
"IN",
|
|
104
|
+
"ME",
|
|
105
|
+
"NAF",
|
|
106
|
+
"NEAS",
|
|
107
|
+
"NSAM",
|
|
108
|
+
"OC",
|
|
109
|
+
"SAF",
|
|
110
|
+
"SEAS",
|
|
111
|
+
"SSAM",
|
|
112
|
+
"WEU",
|
|
113
|
+
"WNAM",
|
|
114
|
+
]);
|
|
115
|
+
export const CLOUDFLARE_HTTP_HEALTH_CHECK_SCHEMA = z.object({
|
|
116
|
+
allowInsecure: z.boolean().optional(),
|
|
117
|
+
expectedBody: z.string().optional(),
|
|
118
|
+
expectedCodes: z.string().array().nullable().optional(),
|
|
119
|
+
followRedirects: z.boolean().optional(),
|
|
120
|
+
header: z.record(z.string(), z.string().array()).nullable().optional(),
|
|
121
|
+
method: z.enum(["GET", "HEAD"]).optional(),
|
|
122
|
+
path: z.string().optional(),
|
|
123
|
+
port: z.number().int().min(0).max(65_535).optional(),
|
|
124
|
+
});
|
|
125
|
+
export const CLOUDFLARE_TCP_HEALTH_CHECK_SCHEMA = z.object({
|
|
126
|
+
method: z.literal("connection_established").optional(),
|
|
127
|
+
port: z.number().int().min(0).max(65_535).optional(),
|
|
128
|
+
});
|
|
129
|
+
export const CLOUDFLARE_HEALTH_CHECK_SCHEMA = z.object({
|
|
130
|
+
address: z.string(),
|
|
131
|
+
checkRegions: CLOUDFLARE_HEALTH_CHECK_REGION_SCHEMA.array()
|
|
132
|
+
.nullable()
|
|
133
|
+
.optional(),
|
|
134
|
+
consecutiveFails: z.number().int().nonnegative().optional(),
|
|
135
|
+
consecutiveSuccesses: z.number().int().nonnegative().optional(),
|
|
136
|
+
createdOn: z.string().optional(),
|
|
137
|
+
description: z.string().optional(),
|
|
138
|
+
failureReason: z.string().optional(),
|
|
139
|
+
httpConfig: CLOUDFLARE_HTTP_HEALTH_CHECK_SCHEMA.nullable().optional(),
|
|
140
|
+
id: IDENTIFIER_SCHEMA.optional(),
|
|
141
|
+
interval: z.number().int().nonnegative().optional(),
|
|
142
|
+
modifiedOn: z.string().optional(),
|
|
143
|
+
name: z.string().regex(/^[A-Za-z0-9_-]+$/),
|
|
144
|
+
retries: z.number().int().nonnegative().optional(),
|
|
145
|
+
status: z.enum(["healthy", "suspended", "unknown", "unhealthy"]).optional(),
|
|
146
|
+
suspended: z.boolean().optional(),
|
|
147
|
+
tcpConfig: CLOUDFLARE_TCP_HEALTH_CHECK_SCHEMA.nullable().optional(),
|
|
148
|
+
timeout: z.number().int().nonnegative().optional(),
|
|
149
|
+
type: z.enum(["HTTP", "HTTPS", "TCP"]).optional(),
|
|
150
|
+
});
|
|
151
|
+
export const CLOUDFLARE_ALERT_TYPE_SCHEMA = z.enum([
|
|
152
|
+
"abuse_report_alert",
|
|
153
|
+
"access_custom_certificate_expiration_type",
|
|
154
|
+
"advanced_ddos_attack_l4_alert",
|
|
155
|
+
"advanced_ddos_attack_l7_alert",
|
|
156
|
+
"advanced_http_alert_error",
|
|
157
|
+
"bgp_hijack_notification",
|
|
158
|
+
"billing_usage_alert",
|
|
159
|
+
"block_notification_block_removed",
|
|
160
|
+
"block_notification_new_block",
|
|
161
|
+
"block_notification_review_rejected",
|
|
162
|
+
"bot_traffic_basic_alert",
|
|
163
|
+
"brand_protection_alert",
|
|
164
|
+
"brand_protection_digest",
|
|
165
|
+
"clickhouse_alert_fw_anomaly",
|
|
166
|
+
"clickhouse_alert_fw_ent_anomaly",
|
|
167
|
+
"cloudforce_one_request_notification",
|
|
168
|
+
"cni_maintenance_notification",
|
|
169
|
+
"custom_analytics",
|
|
170
|
+
"custom_bot_detection_alert",
|
|
171
|
+
"custom_ssl_certificate_event_type",
|
|
172
|
+
"dedicated_ssl_certificate_event_type",
|
|
173
|
+
"device_connectivity_anomaly_alert",
|
|
174
|
+
"dos_attack_l4",
|
|
175
|
+
"dos_attack_l7",
|
|
176
|
+
"expiring_service_token_alert",
|
|
177
|
+
"failing_logpush_job_disabled_alert",
|
|
178
|
+
"fbm_auto_advertisement",
|
|
179
|
+
"fbm_dosd_attack",
|
|
180
|
+
"fbm_volumetric_attack",
|
|
181
|
+
"health_check_status_notification",
|
|
182
|
+
"hostname_aop_custom_certificate_expiration_type",
|
|
183
|
+
"http_alert_edge_error",
|
|
184
|
+
"http_alert_origin_error",
|
|
185
|
+
"image_notification",
|
|
186
|
+
"image_resizing_notification",
|
|
187
|
+
"incident_alert",
|
|
188
|
+
"load_balancing_health_alert",
|
|
189
|
+
"load_balancing_pool_enablement_alert",
|
|
190
|
+
"logo_match_alert",
|
|
191
|
+
"magic_tunnel_health_check_event",
|
|
192
|
+
"magic_wan_tunnel_health",
|
|
193
|
+
"maintenance_event_notification",
|
|
194
|
+
"mtls_certificate_store_certificate_expiration_type",
|
|
195
|
+
"pages_event_alert",
|
|
196
|
+
"radar_notification",
|
|
197
|
+
"real_origin_monitoring",
|
|
198
|
+
"scriptmonitor_alert_new_code_change_detections",
|
|
199
|
+
"scriptmonitor_alert_new_hosts",
|
|
200
|
+
"scriptmonitor_alert_new_malicious_hosts",
|
|
201
|
+
"scriptmonitor_alert_new_malicious_scripts",
|
|
202
|
+
"scriptmonitor_alert_new_malicious_url",
|
|
203
|
+
"scriptmonitor_alert_new_max_length_resource_url",
|
|
204
|
+
"scriptmonitor_alert_new_resources",
|
|
205
|
+
"secondary_dns_all_primaries_failing",
|
|
206
|
+
"secondary_dns_primaries_failing",
|
|
207
|
+
"secondary_dns_warning",
|
|
208
|
+
"secondary_dns_zone_successfully_updated",
|
|
209
|
+
"secondary_dns_zone_validation_warning",
|
|
210
|
+
"security_insights_alert",
|
|
211
|
+
"sentinel_alert",
|
|
212
|
+
"stream_live_notifications",
|
|
213
|
+
"synthetic_test_latency_alert",
|
|
214
|
+
"synthetic_test_low_availability_alert",
|
|
215
|
+
"traffic_anomalies_alert",
|
|
216
|
+
"tunnel_health_event",
|
|
217
|
+
"tunnel_update_event",
|
|
218
|
+
"universal_ssl_event_type",
|
|
219
|
+
"web_analytics_metrics_update",
|
|
220
|
+
"zone_aop_custom_certificate_expiration_type",
|
|
221
|
+
]);
|
|
222
|
+
const STRING_FILTER_SCHEMA = z.string().min(1).array().min(1);
|
|
223
|
+
export const CLOUDFLARE_NOTIFICATION_FILTERS_SCHEMA = z.object({
|
|
224
|
+
actions: STRING_FILTER_SCHEMA.optional(),
|
|
225
|
+
affectedAsns: STRING_FILTER_SCHEMA.optional(),
|
|
226
|
+
affectedComponents: STRING_FILTER_SCHEMA.optional(),
|
|
227
|
+
affectedLocations: STRING_FILTER_SCHEMA.optional(),
|
|
228
|
+
airportCode: STRING_FILTER_SCHEMA.optional(),
|
|
229
|
+
alertTriggerPreferences: STRING_FILTER_SCHEMA.optional(),
|
|
230
|
+
alertTriggerPreferencesValue: STRING_FILTER_SCHEMA.optional(),
|
|
231
|
+
enabled: STRING_FILTER_SCHEMA.optional(),
|
|
232
|
+
environment: STRING_FILTER_SCHEMA.optional(),
|
|
233
|
+
event: STRING_FILTER_SCHEMA.optional(),
|
|
234
|
+
eventSource: STRING_FILTER_SCHEMA.optional(),
|
|
235
|
+
eventType: STRING_FILTER_SCHEMA.optional(),
|
|
236
|
+
groupBy: STRING_FILTER_SCHEMA.optional(),
|
|
237
|
+
healthCheckId: STRING_FILTER_SCHEMA.optional(),
|
|
238
|
+
incidentImpact: z
|
|
239
|
+
.enum([
|
|
240
|
+
"INCIDENT_IMPACT_CRITICAL",
|
|
241
|
+
"INCIDENT_IMPACT_MAJOR",
|
|
242
|
+
"INCIDENT_IMPACT_MINOR",
|
|
243
|
+
"INCIDENT_IMPACT_NONE",
|
|
244
|
+
])
|
|
245
|
+
.array()
|
|
246
|
+
.min(1)
|
|
247
|
+
.optional(),
|
|
248
|
+
inputId: STRING_FILTER_SCHEMA.optional(),
|
|
249
|
+
insightClass: STRING_FILTER_SCHEMA.optional(),
|
|
250
|
+
limit: STRING_FILTER_SCHEMA.optional(),
|
|
251
|
+
logoTag: STRING_FILTER_SCHEMA.optional(),
|
|
252
|
+
megabitsPerSecond: STRING_FILTER_SCHEMA.optional(),
|
|
253
|
+
newHealth: STRING_FILTER_SCHEMA.optional(),
|
|
254
|
+
newStatus: STRING_FILTER_SCHEMA.optional(),
|
|
255
|
+
packetsPerSecond: STRING_FILTER_SCHEMA.optional(),
|
|
256
|
+
poolId: STRING_FILTER_SCHEMA.optional(),
|
|
257
|
+
popNames: STRING_FILTER_SCHEMA.optional(),
|
|
258
|
+
product: STRING_FILTER_SCHEMA.optional(),
|
|
259
|
+
projectId: STRING_FILTER_SCHEMA.optional(),
|
|
260
|
+
protocol: STRING_FILTER_SCHEMA.optional(),
|
|
261
|
+
queryTag: STRING_FILTER_SCHEMA.optional(),
|
|
262
|
+
requestsPerSecond: STRING_FILTER_SCHEMA.optional(),
|
|
263
|
+
selectors: STRING_FILTER_SCHEMA.optional(),
|
|
264
|
+
services: STRING_FILTER_SCHEMA.optional(),
|
|
265
|
+
slo: STRING_FILTER_SCHEMA.optional(),
|
|
266
|
+
status: STRING_FILTER_SCHEMA.optional(),
|
|
267
|
+
targetHostname: STRING_FILTER_SCHEMA.optional(),
|
|
268
|
+
targetIp: STRING_FILTER_SCHEMA.optional(),
|
|
269
|
+
targetZoneName: STRING_FILTER_SCHEMA.optional(),
|
|
270
|
+
trafficExclusions: z.literal("security_events").array().max(1).optional(),
|
|
271
|
+
tunnelId: STRING_FILTER_SCHEMA.optional(),
|
|
272
|
+
tunnelName: STRING_FILTER_SCHEMA.optional(),
|
|
273
|
+
type: STRING_FILTER_SCHEMA.optional(),
|
|
274
|
+
where: STRING_FILTER_SCHEMA.optional(),
|
|
275
|
+
zones: STRING_FILTER_SCHEMA.optional(),
|
|
276
|
+
});
|
|
277
|
+
export const CLOUDFLARE_NOTIFICATION_MECHANISMS_SCHEMA = z.object({
|
|
278
|
+
email: z.object({ id: z.email() }).array().optional(),
|
|
279
|
+
pagerduty: z
|
|
280
|
+
.object({ id: z.string().min(1) })
|
|
281
|
+
.array()
|
|
282
|
+
.optional(),
|
|
283
|
+
webhooks: z
|
|
284
|
+
.object({ id: z.string().min(1) })
|
|
285
|
+
.array()
|
|
286
|
+
.optional(),
|
|
287
|
+
});
|
|
288
|
+
export const CLOUDFLARE_NOTIFICATION_POLICY_SCHEMA = z.object({
|
|
289
|
+
alertInterval: z.string().optional(),
|
|
290
|
+
alertType: CLOUDFLARE_ALERT_TYPE_SCHEMA,
|
|
291
|
+
created: z.string().optional(),
|
|
292
|
+
description: z.string().optional(),
|
|
293
|
+
enabled: z.boolean(),
|
|
294
|
+
filters: CLOUDFLARE_NOTIFICATION_FILTERS_SCHEMA.optional(),
|
|
295
|
+
id: z.string().min(1).optional(),
|
|
296
|
+
mechanisms: CLOUDFLARE_NOTIFICATION_MECHANISMS_SCHEMA,
|
|
297
|
+
modified: z.string().optional(),
|
|
298
|
+
name: z.string().min(1),
|
|
299
|
+
});
|
|
300
|
+
export const CLOUDFLARE_AVAILABLE_ALERT_SCHEMA = z.object({
|
|
301
|
+
description: z.string().optional(),
|
|
302
|
+
displayName: z.string().optional(),
|
|
303
|
+
filterOptions: encodableSchema.optional(),
|
|
304
|
+
type: CLOUDFLARE_ALERT_TYPE_SCHEMA,
|
|
305
|
+
});
|
|
306
|
+
export const CLOUDFLARE_NOTIFICATION_HISTORY_SCHEMA = z.object({
|
|
307
|
+
alertBody: z.string().optional(),
|
|
308
|
+
alertType: z.string().optional(),
|
|
309
|
+
description: z.string().optional(),
|
|
310
|
+
id: z.string().optional(),
|
|
311
|
+
mechanism: z.string().optional(),
|
|
312
|
+
mechanismType: z.enum(["email", "pagerduty", "webhook"]).optional(),
|
|
313
|
+
name: z.string().optional(),
|
|
314
|
+
policyId: z.string().optional(),
|
|
315
|
+
sent: z.string().optional(),
|
|
316
|
+
});
|
|
317
|
+
export const CLOUDFLARE_DELETE_RESULT_SCHEMA = z.object({
|
|
318
|
+
id: z.string().min(1),
|
|
319
|
+
});
|
|
320
|
+
export const CLOUDFLARE_NOTIFICATION_WEBHOOK_SCHEMA = z.object({
|
|
321
|
+
createdAt: z.string().optional(),
|
|
322
|
+
id: z.string().min(1),
|
|
323
|
+
lastFailure: z.string().optional(),
|
|
324
|
+
lastSuccess: z.string().optional(),
|
|
325
|
+
name: z.string().optional(),
|
|
326
|
+
type: z
|
|
327
|
+
.enum([
|
|
328
|
+
"datadog",
|
|
329
|
+
"discord",
|
|
330
|
+
"feishu",
|
|
331
|
+
"gchat",
|
|
332
|
+
"generic",
|
|
333
|
+
"opsgenie",
|
|
334
|
+
"slack",
|
|
335
|
+
"splunk",
|
|
336
|
+
])
|
|
337
|
+
.optional(),
|
|
338
|
+
url: z.string().optional(),
|
|
339
|
+
});
|
|
340
|
+
export const CLOUDFLARE_API_RESPONSE_INFO_SCHEMA = RESPONSE_INFO_SCHEMA;
|
package/dist/linear/api.d.ts
CHANGED
|
@@ -58,6 +58,6 @@ export declare class LinearApiError extends Error {
|
|
|
58
58
|
* action. OAuth access tokens are resolved by the platform and never exposed to
|
|
59
59
|
* automation code.
|
|
60
60
|
*
|
|
61
|
-
* @param secret - Resolved Linear OAuth
|
|
61
|
+
* @param secret - Resolved Linear OAuth or personal API-key secret.
|
|
62
62
|
*/
|
|
63
63
|
export declare function getLinearApi(secret: Record<string, unknown>): LinearApi;
|
package/dist/linear/api.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as z from "zod";
|
|
2
2
|
const LINEAR_GRAPHQL_URL = "https://api.linear.app/graphql";
|
|
3
|
-
const LINEAR_SECRET_SCHEMA = z.
|
|
4
|
-
accessToken: z.string().min(1),
|
|
5
|
-
})
|
|
3
|
+
const LINEAR_SECRET_SCHEMA = z.union([
|
|
4
|
+
z.object({ accessToken: z.string().min(1) }),
|
|
5
|
+
z.object({ apiKey: z.string().min(1) }),
|
|
6
|
+
]);
|
|
6
7
|
const LINEAR_ERROR_SCHEMA = z.looseObject({
|
|
7
8
|
extensions: z.record(z.string(), z.json()).optional(),
|
|
8
9
|
message: z.string(),
|
|
@@ -43,10 +44,10 @@ export class LinearApiError extends Error {
|
|
|
43
44
|
* action. OAuth access tokens are resolved by the platform and never exposed to
|
|
44
45
|
* automation code.
|
|
45
46
|
*
|
|
46
|
-
* @param secret - Resolved Linear OAuth
|
|
47
|
+
* @param secret - Resolved Linear OAuth or personal API-key secret.
|
|
47
48
|
*/
|
|
48
49
|
export function getLinearApi(secret) {
|
|
49
|
-
const
|
|
50
|
+
const credential = LINEAR_SECRET_SCHEMA.parse(secret);
|
|
50
51
|
return {
|
|
51
52
|
graphql: async (document, options) => {
|
|
52
53
|
const response = await fetch(LINEAR_GRAPHQL_URL, {
|
|
@@ -56,7 +57,9 @@ export function getLinearApi(secret) {
|
|
|
56
57
|
}),
|
|
57
58
|
headers: {
|
|
58
59
|
Accept: "application/json",
|
|
59
|
-
Authorization:
|
|
60
|
+
Authorization: "accessToken" in credential
|
|
61
|
+
? `Bearer ${credential.accessToken}`
|
|
62
|
+
: credential.apiKey,
|
|
60
63
|
"Content-Type": "application/json",
|
|
61
64
|
},
|
|
62
65
|
method: "POST",
|