1 | type Cloudflare = { |
2 | token: string; |
3 | email: string; |
4 | key: string; |
5 | }; |
6 | |
7 | * Add an Access application |
8 | * Adds a new application to Access. |
9 | */ |
10 | export async function main( |
11 | auth: Cloudflare, |
12 | identifier: string, |
13 | body: |
14 | | ({ |
15 | aud?: string; |
16 | created_at?: string; |
17 | id?: string; |
18 | updated_at?: string; |
19 | [k: string]: unknown; |
20 | } & { |
21 | allowed_idps?: string[]; |
22 | app_launcher_visible?: boolean; |
23 | auto_redirect_to_identity?: boolean; |
24 | cors_headers?: { |
25 | allow_all_headers?: boolean; |
26 | allow_all_methods?: boolean; |
27 | allow_all_origins?: boolean; |
28 | allow_credentials?: boolean; |
29 | allowed_headers?: unknown[]; |
30 | allowed_methods?: ( |
31 | | "GET" |
32 | | "POST" |
33 | | "HEAD" |
34 | | "PUT" |
35 | | "DELETE" |
36 | | "CONNECT" |
37 | | "OPTIONS" |
38 | | "TRACE" |
39 | | "PATCH" |
40 | )[]; |
41 | allowed_origins?: unknown[]; |
42 | max_age?: number; |
43 | [k: string]: unknown; |
44 | }; |
45 | custom_deny_message?: string; |
46 | custom_deny_url?: string; |
47 | domain: string; |
48 | enable_binding_cookie?: boolean; |
49 | http_only_cookie_attribute?: boolean; |
50 | logo_url?: string; |
51 | name?: string; |
52 | same_site_cookie_attribute?: string; |
53 | service_auth_401_redirect?: boolean; |
54 | session_duration?: string; |
55 | skip_interstitial?: boolean; |
56 | type: string; |
57 | [k: string]: unknown; |
58 | }) |
59 | | ({ |
60 | aud?: string; |
61 | created_at?: string; |
62 | id?: string; |
63 | updated_at?: string; |
64 | [k: string]: unknown; |
65 | } & { |
66 | allowed_idps?: string[]; |
67 | app_launcher_visible?: boolean; |
68 | auto_redirect_to_identity?: boolean; |
69 | logo_url?: string; |
70 | name?: string; |
71 | saas_app?: { |
72 | consumer_service_url?: string; |
73 | created_at?: string; |
74 | custom_attributes?: { |
75 | name?: string; |
76 | name_format?: |
77 | | "urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" |
78 | | "urn:oasis:names:tc:SAML:2.0:attrname-format:basic" |
79 | | "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"; |
80 | source?: { name?: string; [k: string]: unknown }; |
81 | [k: string]: unknown; |
82 | }; |
83 | idp_entity_id?: string; |
84 | name_id_format?: "id" | "email"; |
85 | public_key?: string; |
86 | sp_entity_id?: string; |
87 | sso_endpoint?: string; |
88 | updated_at?: string; |
89 | [k: string]: unknown; |
90 | }; |
91 | type?: string; |
92 | [k: string]: unknown; |
93 | }) |
94 | | ({ |
95 | aud?: string; |
96 | created_at?: string; |
97 | id?: string; |
98 | updated_at?: string; |
99 | [k: string]: unknown; |
100 | } & ({ |
101 | allowed_idps?: string[]; |
102 | app_launcher_visible?: boolean; |
103 | auto_redirect_to_identity?: boolean; |
104 | cors_headers?: { |
105 | allow_all_headers?: boolean; |
106 | allow_all_methods?: boolean; |
107 | allow_all_origins?: boolean; |
108 | allow_credentials?: boolean; |
109 | allowed_headers?: unknown[]; |
110 | allowed_methods?: ( |
111 | | "GET" |
112 | | "POST" |
113 | | "HEAD" |
114 | | "PUT" |
115 | | "DELETE" |
116 | | "CONNECT" |
117 | | "OPTIONS" |
118 | | "TRACE" |
119 | | "PATCH" |
120 | )[]; |
121 | allowed_origins?: unknown[]; |
122 | max_age?: number; |
123 | [k: string]: unknown; |
124 | }; |
125 | custom_deny_message?: string; |
126 | custom_deny_url?: string; |
127 | domain: string; |
128 | enable_binding_cookie?: boolean; |
129 | http_only_cookie_attribute?: boolean; |
130 | logo_url?: string; |
131 | name?: string; |
132 | same_site_cookie_attribute?: string; |
133 | service_auth_401_redirect?: boolean; |
134 | session_duration?: string; |
135 | skip_interstitial?: boolean; |
136 | type: string; |
137 | [k: string]: unknown; |
138 | } & { type?: string; [k: string]: unknown })) |
139 | | ({ |
140 | aud?: string; |
141 | created_at?: string; |
142 | id?: string; |
143 | updated_at?: string; |
144 | [k: string]: unknown; |
145 | } & ({ |
146 | allowed_idps?: string[]; |
147 | app_launcher_visible?: boolean; |
148 | auto_redirect_to_identity?: boolean; |
149 | cors_headers?: { |
150 | allow_all_headers?: boolean; |
151 | allow_all_methods?: boolean; |
152 | allow_all_origins?: boolean; |
153 | allow_credentials?: boolean; |
154 | allowed_headers?: unknown[]; |
155 | allowed_methods?: ( |
156 | | "GET" |
157 | | "POST" |
158 | | "HEAD" |
159 | | "PUT" |
160 | | "DELETE" |
161 | | "CONNECT" |
162 | | "OPTIONS" |
163 | | "TRACE" |
164 | | "PATCH" |
165 | )[]; |
166 | allowed_origins?: unknown[]; |
167 | max_age?: number; |
168 | [k: string]: unknown; |
169 | }; |
170 | custom_deny_message?: string; |
171 | custom_deny_url?: string; |
172 | domain: string; |
173 | enable_binding_cookie?: boolean; |
174 | http_only_cookie_attribute?: boolean; |
175 | logo_url?: string; |
176 | name?: string; |
177 | same_site_cookie_attribute?: string; |
178 | service_auth_401_redirect?: boolean; |
179 | session_duration?: string; |
180 | skip_interstitial?: boolean; |
181 | type: string; |
182 | [k: string]: unknown; |
183 | } & { type?: string; [k: string]: unknown })) |
184 | | ({ |
185 | aud?: string; |
186 | created_at?: string; |
187 | id?: string; |
188 | updated_at?: string; |
189 | [k: string]: unknown; |
190 | } & ({ |
191 | allowed_idps?: string[]; |
192 | auto_redirect_to_identity?: boolean; |
193 | domain?: string; |
194 | name?: string; |
195 | session_duration?: string; |
196 | type: |
197 | | "self_hosted" |
198 | | "saas" |
199 | | "ssh" |
200 | | "vnc" |
201 | | "app_launcher" |
202 | | "warp" |
203 | | "biso" |
204 | | "bookmark" |
205 | | "dash_sso"; |
206 | [k: string]: unknown; |
207 | } & { |
208 | domain?: { [k: string]: unknown }; |
209 | name?: string; |
210 | type?: string; |
211 | [k: string]: unknown; |
212 | })) |
213 | | ({ |
214 | aud?: string; |
215 | created_at?: string; |
216 | id?: string; |
217 | updated_at?: string; |
218 | [k: string]: unknown; |
219 | } & ({ |
220 | allowed_idps?: string[]; |
221 | auto_redirect_to_identity?: boolean; |
222 | domain?: string; |
223 | name?: string; |
224 | session_duration?: string; |
225 | type: |
226 | | "self_hosted" |
227 | | "saas" |
228 | | "ssh" |
229 | | "vnc" |
230 | | "app_launcher" |
231 | | "warp" |
232 | | "biso" |
233 | | "bookmark" |
234 | | "dash_sso"; |
235 | [k: string]: unknown; |
236 | } & { |
237 | domain?: { [k: string]: unknown }; |
238 | name?: string; |
239 | type?: string; |
240 | [k: string]: unknown; |
241 | })) |
242 | | ({ |
243 | aud?: string; |
244 | created_at?: string; |
245 | id?: string; |
246 | updated_at?: string; |
247 | [k: string]: unknown; |
248 | } & ({ |
249 | allowed_idps?: string[]; |
250 | auto_redirect_to_identity?: boolean; |
251 | domain?: string; |
252 | name?: string; |
253 | session_duration?: string; |
254 | type: |
255 | | "self_hosted" |
256 | | "saas" |
257 | | "ssh" |
258 | | "vnc" |
259 | | "app_launcher" |
260 | | "warp" |
261 | | "biso" |
262 | | "bookmark" |
263 | | "dash_sso"; |
264 | [k: string]: unknown; |
265 | } & { |
266 | domain?: { [k: string]: unknown }; |
267 | name?: string; |
268 | type?: string; |
269 | [k: string]: unknown; |
270 | })) |
271 | | ({ |
272 | aud?: string; |
273 | created_at?: string; |
274 | id?: string; |
275 | updated_at?: string; |
276 | [k: string]: unknown; |
277 | } & { |
278 | app_launcher_visible?: boolean; |
279 | domain: { [k: string]: unknown }; |
280 | logo_url?: string; |
281 | name?: string; |
282 | type: string; |
283 | [k: string]: unknown; |
284 | }) |
285 | ) { |
286 | const url = new URL( |
287 | `https://api.cloudflare.com/client/v4/zones/${identifier}/access/apps` |
288 | ); |
289 |
|
290 | const response = await fetch(url, { |
291 | method: "POST", |
292 | headers: { |
293 | "X-AUTH-EMAIL": auth.email, |
294 | "X-AUTH-KEY": auth.key, |
295 | "Content-Type": "application/json", |
296 | Authorization: "Bearer " + auth.token, |
297 | }, |
298 | body: JSON.stringify(body), |
299 | }); |
300 | if (!response.ok) { |
301 | const text = await response.text(); |
302 | throw new Error(`${response.status} ${text}`); |
303 | } |
304 | return await response.json(); |
305 | } |
306 |
|