Split PeertubeRequester main function into 2

This commit is contained in:
Florent Fayolle 2021-07-25 16:56:25 +02:00
parent 8f8f0c3cb0
commit 51126e7f0f

View File

@ -1,9 +1,6 @@
// import { ImplementableApi } from './implementableApi';
// Api request lib // Api request lib
import fetch, { FetchError, Headers } from "node-fetch"; import fetch, { FetchError, Headers } from "node-fetch";
import { URL, URLSearchParams } from "url"; import { URL, URLSearchParams } from "url";
import FormData from "form-data";
// import dedent from "ts-dedent";
namespace PeerTubeRequester { namespace PeerTubeRequester {
export type Config = { export type Config = {
@ -19,22 +16,6 @@ type UploadInstruction = {
targetUrl: string; targetUrl: string;
}; };
type ClientToken = {
client_id: string;
client_secret: string;
grant_type: "password";
response_type: "code";
username: string;
password: string;
};
type UserToken = {
access_token: string;
token_type: string;
expires_in: string;
refresh_token: string;
};
class PeerTubeRequester { class PeerTubeRequester {
readonly domain_name: URL; readonly domain_name: URL;
readonly username: string; readonly username: string;
@ -46,7 +27,7 @@ class PeerTubeRequester {
this.password = config.password; this.password = config.password;
} }
async apiRequest(message: UploadInstruction): Promise<void> { private async requestAuthToken(): Promise<void> {
let response = await fetch( let response = await fetch(
new URL(`/api/v1/oauth-clients/local`, this.domain_name) new URL(`/api/v1/oauth-clients/local`, this.domain_name)
); );
@ -74,15 +55,18 @@ class PeerTubeRequester {
if (!response.ok) { if (!response.ok) {
throw new Error(response.statusText); // CRASH throw new Error(response.statusText); // CRASH
} }
const { access_token } = await response.json(); const { access_token: accessToken } = await response.json();
return accessToken;
}
// Upload async uploadFromUrl(message: UploadInstruction): Promise<void> {
const accessToken = this.requestAuthToken();
const myUploadForm = new URLSearchParams(); const myUploadForm = new URLSearchParams();
const myHeader = new Headers(); const myHeader = new Headers();
myHeader.append("Authorization", `Bearer ${access_token}`); myHeader.append("Authorization", `Bearer ${accessToken}`);
for (const key in message) myUploadForm.append(key, message[key]); for (const key in message) myUploadForm.append(key, message[key]);
response = await fetch( const response = await fetch(
new URL(`/api/v1/videos/imports`, this.domain_name), new URL(`/api/v1/videos/imports`, this.domain_name),
{ {
method: "post", method: "post",
@ -95,9 +79,9 @@ class PeerTubeRequester {
switch (response.status) { switch (response.status) {
case 400: case 400:
throw new Error( throw new Error(
`Your target URL was not accepted by the API.\ `Bad or malformed request. Probably because your target URL (from Youtube?) was not accepted by the API.\
Actualy it's : ${message.targetUrl} The target URL you attempted to pass: ${message.targetUrl}.
${response.statusText}` Response from the server: ${response.statusText}`
); );
break; break;
case 403: case 403:
@ -105,15 +89,15 @@ class PeerTubeRequester {
break; break;
case 409: case 409:
throw new Error( throw new Error(
`Oops, your instance had not allowed the HTTPS import.\ `Oops, your instance did not allowed the HTTPS import.\
Contact your administrator. Contact your administrator.
${response.statusText}` ${response.statusText}`
); );
break; break;
default: default:
throw new Error( throw new Error(
`Oh, you resolved an undocumented issues.\ `Oh, you encountered an undocumented issues.\
Please report this on the git if you have the time. Please create an issue to the plugin project.
ERROR: ${response.statusText}` ERROR: ${response.statusText}`
); );
break; break;