Added storages, accesses & websites, other changes

This commit is contained in:
Filip Znachor 2024-07-03 22:39:42 +02:00
parent a018f01d2a
commit bce5611449
9 changed files with 188 additions and 11 deletions

View file

@ -1,2 +1,2 @@
src/
!lib/**
!lib/**

View file

@ -1,6 +1,6 @@
{
"name": "oohost.js",
"version": "0.0.6",
"version": "0.0.7",
"description": "TypeScript library for accessing the oohost API",
"license": "MIT",
"author": "oohost.cz",

View file

@ -64,7 +64,7 @@ export class Response {
}
/**
* Get Reponse meta keys
* Get Response meta keys
* @returns meta keys
*/
getMeta() {

View file

@ -1,6 +1,8 @@
export * from "./API";
export * from "./APIList";
export * from "./models/Base";
export * from "./models/User";
export * from "./models/Domain";
export * from "./models/Storage";
export * from "./models/StorageAccess";
export * from "./models/Certificate";
export * from "./models/Website";

View file

@ -1,4 +0,0 @@
import { Response } from "../API";
export type PromisedData<T> = Promise<Data<T>>;
export type Data<T> = [T | null, Response.ExtendedError[]];

View file

@ -55,15 +55,21 @@ export interface CertificateEdit extends Partial<CertificateData> {
name?: string
}
export interface CertificateListItem {
export interface CertificateInclude {
id: number,
name: string,
domain: string,
domain: string
}
export interface CertificateExtendedInclude extends CertificateInclude {
auto_renew: boolean,
expiration_date: string,
created_at: string,
updated_at: string,
user_id: number,
user_id: number
}
export interface CertificateListItem extends CertificateExtendedInclude {
User: UserInclude
}

59
src/models/Storage.ts Normal file
View file

@ -0,0 +1,59 @@
import { API, Response } from "../API";
import { APIList } from "../APIList";
import { UserInclude } from "./User";
export class Storage {
public readonly id: number;
constructor(id: number) {
this.id = id;
}
public async getDetails() {
let res = await API.get("storages/details", {id: this.id});
let details: StorageDetails | null = res.get().details ?? null;
return {details, res};
}
public async remove(): Promise<Response> {
return await API.get("storages/remove", {id: this.id});
}
public async edit(data: StorageEdit): Promise<Response> {
return await API.get("storages/edit", {id: this.id, ...data});
}
public static async add(name: string, size: number, server: string) {
let res = await API.get("storages/add", {name, size, server});
let id: number | null = res.success ? res.get().info.id : null;
return {id, res};
}
public static getList(): APIList<StorageListItem> {
return new APIList("storages/list");
}
}
export interface StorageEdit {
name?: string
}
export interface StorageInclude {
id: number,
name: string,
status: number,
size: number,
max_size: number,
server_id: string,
}
export interface StorageListItem extends StorageInclude {
created_at: string,
updated_at: string,
user_id: number,
User: UserInclude
}
export type StorageDetails = StorageListItem;

View file

@ -0,0 +1,49 @@
import { API, Response } from "../API";
import { APIList } from "../APIList";
import { StorageInclude } from "./Storage";
import { UserInclude } from "./User";
export class StorageAccess {
public readonly id: number;
constructor(id: number) {
this.id = id;
}
public async getDetails() {
let res = await API.get("webdav/details", {id: this.id});
let details: StorageAccessDetails | null = res.get().details ?? null;
return {details, res};
}
public async remove(): Promise<Response> {
return await API.get("webdav/remove", {id: this.id});
}
public static async add(username: string, password: string, storage_id: number, path: string = "/") {
let res = await API.get("webdav/add", {username, password, storage_id, path});
let id: number | null = res.success ? res.get().info.id : null;
return {id, res};
}
public static getList(): APIList<StorageAccessListItem> {
return new APIList("webdav/list");
}
}
export interface StorageAccessListItem {
id: number,
username: string,
server_id: string,
storage_id: number,
path: string
created_at: string,
updated_at: string,
user_id: number,
User: UserInclude,
Storage: StorageInclude
}
export type StorageAccessDetails = StorageAccessListItem;

65
src/models/Website.ts Normal file
View file

@ -0,0 +1,65 @@
import { API, Response } from "../API";
import { APIList } from "../APIList";
import { CertificateExtendedInclude } from "./Certificate";
import { StorageInclude } from "./Storage";
import { UserInclude } from "./User";
export class Website {
public readonly id: number;
constructor(id: number) {
this.id = id;
}
public async getDetails() {
let res = await API.get("websites/details", {id: this.id});
let details: WebsiteDetails | null = res.get().details ?? null;
return {details, res};
}
public async remove(): Promise<Response> {
return await API.get("websites/remove", {id: this.id});
}
public async edit(data: WebsiteEdit): Promise<Response> {
return await API.get("websites/edit", {id: this.id, ...data});
}
public static async add(name: string) {
let res = await API.get("websites/add", {name});
let id: number | null = res.success ? res.get().info.id : null;
return {id, res};
}
public static getList(): APIList<WebsiteListItem> {
return new APIList("websites/list");
}
}
export interface WebsiteEdit {
name?: string,
storage_id?: number,
root?: string,
domain?: string,
cert_id?: number,
enabled?: boolean
}
export interface WebsiteListItem {
id: number,
name: string,
status: number,
domain: string,
root: string,
server_id: string,
created_at: string,
updated_at: string,
user_id: number,
User: UserInclude,
Storage: StorageInclude | null,
Certificate: CertificateExtendedInclude | null
}
export type WebsiteDetails = WebsiteListItem;