0.9.1 • Published 9 days ago

@e-mc/cloud v0.9.1

Weekly downloads
-
License
BSD 3-Clause
Repository
github
Last release
9 days ago

@e-mc/cloud

  • NodeJS 16
  • ES2020

General Usage

Interface

import type { IHost, IScopeOrigin } from "./index";
import type { ExternalAsset } from "./asset";
import type { BucketWebsiteOptions, CloudDatabase, CloudFeatures, CloudFunctions, CloudService, CloudStorage, CloudStorageDownload, CloudStorageUpload, UploadAssetOptions } from "./cloud";
import type { ClientDbConstructor, IClientDb } from "./core";
import type { BatchQueryResult, QueryResult } from "./db";
import type { LogMessageOptions } from "./logger";
import type { CloudAuthSettings, CloudModule, CloudServiceOptions, CloudSettings, DbCoerceSettings } from "./settings";

interface ICloud extends IClientDb<IHost, CloudModule, CloudDatabase, CloudServiceOptions, DbCoerceSettings & CloudAuthSettings> {
    module: CloudModule;
    readonly uploaded: string[];
    readonly downloaded: string[];
    createBucket(service: string, credential: unknown, bucket: string, acl?: unknown, options?: unknown): Promise<boolean>;
    createBucket(service: string, credential: unknown, bucket: string, publicRead?: boolean): Promise<boolean>;
    setBucketPolicy(service: string, credential: unknown, bucket: string, options: unknown): Promise<boolean>;
    setBucketTagging(service: string, credential: unknown, bucket: string, options: unknown): Promise<boolean>;
    setBucketWebsite(service: string, credential: unknown, bucket: string, options: BucketWebsiteOptions): Promise<boolean>;
    deleteObjects(service: string, credential: unknown, bucket: string, recursive?: boolean): Promise<void>;
    uploadObject(service: string, credential: unknown, bucket: string, upload: CloudStorageUpload, localUri: string, beforeResolve?: ((value: string) => Promise<void> | void)): Promise<string>;
    downloadObject(service: string, credential: unknown, bucket: string, download: CloudStorageDownload, beforeResolve?: ((value: Buffer | string | null) => Promise<string | undefined> | void)): Promise<Buffer | string>;
    getStorage(action: CloudFunctions, data: CloudStorage[] | undefined): CloudStorage | undefined;
    hasStorage(action: CloudFunctions, storage: CloudStorage): CloudStorageUpload | false;
    getDatabaseRows(item: CloudDatabase, ignoreErrors: boolean, sessionKey?: string): Promise<QueryResult>;
    getDatabaseRows(item: CloudDatabase, sessionKey?: string): Promise<QueryResult>;
    getDatabaseBatchRows(batch: CloudDatabase[], ignoreErrors: boolean, sessionKey?: string): Promise<BatchQueryResult>;
    getDatabaseBatchRows(batch: CloudDatabase[], sessionKey?: string): Promise<BatchQueryResult>;
    hasCredential(feature: CloudFeatures, data: CloudService, credential?: unknown): boolean;
    getCredential(item: CloudService, unused?: boolean): Record<string | number | symbol, unknown>;
    getSettings(service: string): Record<string, unknown> | undefined;
    settingsOf(service: string, name: "coerce", component: keyof DbCoerceSettings): unknown;
    settingsOf(service: string, name: "auth", component: keyof CloudAuthSettings): unknown;
    getUploadHandler(service: string, credential: unknown): (...args: unknown[]) => void;
    getDownloadHandler(service: string, credential: unknown): (...args: unknown[]) => void;
    resolveService(service: string, folder?: string): string;
    get settings(): CloudSettings;
}

interface CloudConstructor extends ClientDbConstructor<IHost> {
    LOG_CLOUD_FAIL: LogMessageOptions;
    LOG_CLOUD_COMMAND: LogMessageOptions;
    LOG_CLOUD_WARN: LogMessageOptions;
    LOG_CLOUD_UPLOAD: LogMessageOptions;
    LOG_CLOUD_DOWNLOAD: LogMessageOptions;
    LOG_CLOUD_DELETE: LogMessageOptions;
    LOG_CLOUD_DELAYED: LogMessageOptions;
    finalize(this: IHost, instance: ICloud): Promise<unknown>;
    uploadAsset(state: IScopeOrigin<IFileManager, ICloud>, file: ExternalAsset, options: UploadAssetOptions): Promise<unknown>[];
    uploadAsset(state: IScopeOrigin<IFileManager, ICloud>, file: ExternalAsset, ignoreProcess: boolean): Promise<unknown>[];
    uploadAsset(state: IScopeOrigin<IFileManager, ICloud>, file: ExternalAsset, contentType?: string, ignoreProcess?: boolean): Promise<unknown>[];
    sanitizeAssets(assets: ExternalAsset[]): ExternalAsset[];
    readonly prototype: ICloud;
    new(module?: CloudModule, database?: CloudDatabase[], ...args: unknown[]): ICloud;
}

interface ICloudServiceClient {
    CLOUD_SERVICE_NAME: string;
    CLOUD_UPLOAD_DISK?: boolean;
    CLOUD_UPLOAD_STREAM?: boolean;
    CLOUD_UPLOAD_CHUNK?: boolean;
    CLOUD_DOWNLOAD_CHUNK?: boolean;
    validateStorage?(credential: unknown, data?: CloudService): boolean;
    validateDatabase?(credential: unknown, data?: CloudService): boolean;
    createStorageClient?(this: IModule, credential: unknown, service?: string): unknown;
    createDatabaseClient?(this: IModule, credential: unknown, data?: CloudService): unknown;
    createBucket?(this: IModule, credential: unknown, bucket: string, publicRead?: boolean, service?: string, sdk?: string): Promise<boolean>;
    createBucketV2?(this: IModule, credential: unknown, bucket: string, acl?: unknown, options?: unknown, service?: string, sdk?: string): Promise<boolean>;
    setBucketPolicy?(this: IModule, credential: unknown, bucket: string, options: unknown, service?: string, sdk?: string): Promise<boolean>;
    setBucketTagging?(this: IModule, credential: unknown, bucket: string, options: unknown, service?: string, sdk?: string): Promise<boolean>;
    setBucketWebsite?(this: IModule, credential: unknown, bucket: string, options: BucketWebsiteOptions, service?: string, sdk?: string): Promise<boolean>;
    deleteObjects?(this: IModule, credential: unknown, bucket: string, service?: string, sdk?: string, recursive?: boolean): Promise<void>;
    deleteObjectsV2?(this: IModule, credential: unknown, bucket: string, recursive?: boolean, service?: string, sdk?: string): Promise<void>;
    executeQuery?(this: ICloud, credential: unknown, data: CloudDatabase, sessionKey?: string): Promise<QueryResult>;
    executeBatchQuery?(this: ICloud, credential: unknown, batch: CloudDatabase[], sessionKey?: string): Promise<BatchQueryResult>;
}

Settings

import type { PermittedDirectories } from "./core";
import type { CloudServiceOptions, DbSourceOptions, PurgeComponent } from "./settings";

interface CloudModule {
    // handler: "@e-mc/cloud";
    extensions?: string[];
    atlas?: CloudStoredCredentials;
    aws?: CloudStoredCredentials;
    "aws-v3"?: CloudStoredCredentials;
    azure?: CloudStoredCredentials; // az
    gcp?: CloudStoredCredentials; // gcloud
    ibm?: CloudStoredCredentials;
    oci?: CloudStoredCredentials;
    minio?: CloudStoredCredentials;
    settings?: {
        broadcast_id?: string | string[];
        users?: Record<string, Record<string, unknown>>;
        cache_dir?: string;
        session_expires?: number;
        user_key?: Record<string, DbSourceOptions>;
        imports?: StringMap;
        purge?: PurgeComponent;
        atlas?: CloudServiceOptions;
        aws?: CloudServiceOptions;
        "aws-v3"?: CloudServiceOptions;
        azure?: CloudServiceOptions;
        gcp?: CloudServiceOptions;
        ibm?: CloudServiceOptions;
        oci?: CloudServiceOptions;
        minio?: CloudServiceOptions;
    };
    permission?: PermittedDirectories;
}

type CloudStoredCredentials = Record<string, Record<string, unknown>>;

Example usage

const Cloud = require("@e-mc/cloud"); // Using @pi-r/aws

const instance = new Cloud({
    aws: {
        main: {
            accessKeyId: "**********",
            secretAccessKey: "**********"
        }
    },
    "aws-v3": {
        main: {
            credentials: {
                accessKeyId: "**********",
                secretAccessKey: "**********",
                region: "ap-northeast-1"
            }
        }
    }
});
// instance.host = new Host();
instance.init();

const options = {
    contentType: "application/tar",
    acl: "authenticated-read",
    chunkSize: "8mb",
    overwrite: false, // Default
    tags: { key_1: "value", key_2: "value" }
};
Promise.all([
    // nodejs-001/archive.tar
    instance.uploadObject("aws", "main", "nodejs-001", options, "/tmp/archive.tar"),
    // nodejs-001/2024/01-01.tar
    instance.uploadObject("aws", "main", "nodejs-001", { ...options, publicRead: true, pathname: "2024", filename: "01-01.tar" }, "/tmp/archive.tar"),
    // nodejs-001/archive_1.tar
    instance.uploadObject("aws", { accessKeyId: "*****", secretAccessKey: "*****" }, "nodejs-001", { overwrite: false }, "/tmp/archive.tar")
]);

const rows = await instance.getDatabaseRows({ service: "aws-v3", credential: "main", table: "demo", key: { id: 1 } });

References

LICENSE

BSD 3-Clause

0.8.9

10 days ago

0.8.8

10 days ago

0.7.6

9 days ago

0.7.5

10 days ago

0.8.10

9 days ago

0.6.3

10 days ago

0.7.4

10 days ago

0.5.6

10 days ago

0.9.1

9 days ago

0.9.0

11 days ago

0.8.7

1 month ago

0.6.2

1 month ago

0.7.3

1 month ago

0.5.5

1 month ago

0.8.6

2 months ago

0.7.2

2 months ago

0.5.4

2 months ago

0.6.1

2 months ago

0.8.5

2 months ago

0.8.4

3 months ago

0.8.3

3 months ago

0.8.2

3 months ago

0.8.1

4 months ago

0.8.0

5 months ago

0.7.1

5 months ago

0.7.0

5 months ago

0.6.0

9 months ago

0.5.3

12 months ago

0.5.2

1 year ago

0.5.1

1 year ago

0.5.0

1 year ago

0.4.2

1 year ago

0.4.1

1 year ago

0.4.0

1 year ago

0.3.3

1 year ago

0.3.2

1 year ago

0.3.1

1 year ago

0.3.0

1 year ago

0.2.0

1 year ago

0.1.0

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago