-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain_utils.ts
54 lines (45 loc) · 1.49 KB
/
main_utils.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import type { APIRequest, APIResponse } from "./types/v10.ts"
import type { FunctionResult } from "./types/other.ts"
const httpClient = Deno.createHttpClient({
poolMaxIdlePerHost: 0,
poolIdleTimeout: 5
})
export async function getFiles(urls: IterableIterator<RegExpMatchArray>): Promise<FunctionResult> {
const files: string[] = []
const source: string[] = []
for (const url of urls) {
const capture = url[0]
const mode = capture.includes("audio:") ? "audio" : capture.includes("mute:") ? "mute" : "auto"
source.push(capture)
const response = await fetch(Deno.env.get("API_URL")!, {
method: "POST",
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
"Authorization": `Api-Key ${Deno.env.get("API_KEY")}`,
"User-Agent": Deno.env.get("USER_AGENT")
},
body: JSON.stringify({
url: capture.replace(`${mode}:`, ""),
filenameStyle: "pretty",
downloadMode: mode
} satisfies APIRequest),
client: httpClient
})
if (response.status != 200)
return { files: [], source: source }
const json: APIResponse = await response.json()
if (json.status == "error")
return { files: [], source: source, error: json.error }
switch (json.status) {
case "picker":
json.picker.forEach(data => files.push(data.url))
break
case "tunnel":
case "redirect":
files.push(json.url)
break
}
}
return { files, source }
}