@nephele/adapter-s3
Version:
S3 (or compatible) object storage adapter for the Nephele WebDAV server.
83 lines (82 loc) • 2.73 kB
TypeScript
import { Readable } from 'node:stream';
import type { Resource as ResourceInterface, User } from 'nephele';
import type Adapter from './Adapter.js';
import Properties from './Properties.js';
import Lock from './Lock.js';
export type MetaStorage = {
props?: {
[name: string]: any;
};
locks?: {
[token: string]: {
username: string;
date: number;
timeout: number;
scope: 'exclusive' | 'shared';
depth: '0' | 'infinity';
provisional: boolean;
owner: any;
};
};
};
export default class Resource implements ResourceInterface {
adapter: Adapter;
baseUrl: URL;
path: string;
key: string;
private meta;
private createCollection;
private collection;
private inStorage;
private etag;
private size;
private contentType;
private lastModified;
private metaReadyPromise;
constructor({ adapter, baseUrl, path: pathname, exists, collection, }: {
adapter: Adapter;
baseUrl: URL;
path: string;
exists?: boolean;
collection?: boolean;
});
getLocks(): Promise<Lock[]>;
getLocksByUser(user: User): Promise<Lock[]>;
createLockForUser(user: User): Promise<Lock>;
getProperties(): Promise<Properties>;
getStream(range?: {
start: number;
end: number;
}): Promise<Readable>;
setStream(input: Readable, _user: User, mediaType?: string): Promise<void>;
create(_user: User): Promise<void>;
delete(_user: User): Promise<void>;
copy(destination: URL, baseUrl: URL, user: User): Promise<void>;
move(destination: URL, baseUrl: URL, user: User): Promise<void>;
getLength(): Promise<number>;
getEtag(): Promise<string>;
getMediaType(): Promise<string | null>;
getLastModified(): Promise<Date | null>;
getCanonicalName(): Promise<string>;
getCanonicalPath(): Promise<string>;
getCanonicalUrl(): Promise<URL>;
listKeys(prefix?: string, maxKeys?: number): AsyncGenerator<{
key: string;
size: number;
type: string;
}, void, unknown>;
isCollection(): Promise<boolean>;
isEmpty(): Promise<boolean>;
isRoot(key?: string): boolean;
getInternalMembers(_user: User): Promise<Resource[]>;
exists(key?: string): Promise<boolean>;
existsInStorage(key?: string): Promise<boolean>;
resourceTreeExists(key?: string): Promise<boolean>;
createEmptyDir(key: string): Promise<void>;
deleteEmptyDir(key: string): Promise<void>;
getMetadata(): Promise<MetaStorage>;
translateMetadata(meta: MetaStorage): {
[k: string]: string;
};
saveMetadata(meta: MetaStorage): Promise<void>;
}