UNPKG

@jvddavid/cloudflare-images

Version:
359 lines (355 loc) 12.2 kB
/** * CloudFlare authentication token * @typedef {Object} CloudFlareAuthToken * @property {string} accountId - The CloudFlare account ID * @property {string} token - The CloudFlare account token */ interface CloudFlareAuthToken { accountId: string; token: string; } /** * CloudFlare authentication key * @typedef {Object} CloudFlareAuthKey * @property {string} accountId - The CloudFlare account ID * @property {string} email - The CloudFlare account email * @property {string} key - The CloudFlare account key */ interface CloudFlareAuthKey { accountId: string; email: string; key: string; } /** * CloudFlare authentication * @typedef {CloudFlareAuthToken | CloudFlareAuthKey} CloudFlareAuth */ type CloudFlareAuth = CloudFlareAuthToken | CloudFlareAuthKey; /** * CloudFlare options * @typedef {Object} CloudFlareOptions * @property {string} [endpoint] - The CloudFlare API endpoint -> default: 'https://api.cloudflare.com/client/v4' */ type CloudFlareOptions = { endpoint?: string; }; /** * CloudFlare image options * @typedef {Object} ListImagesOptions * @property {number} page - The page number * @property {number} perPage - The number of images per page */ interface ListImagesOptions { page: number; perPage: number; } interface ListImagesV2Options { perPage: number; sortOrder: 'asc' | 'desc' | null; continuationToken: string | null; } interface DirectUploadUrlV2Options { expiry?: Date; metadata?: Record<string, string>; requireSignedURLs?: boolean; } interface UploadImageOptions { name?: string; image: Buffer | Blob | string; metadata?: Record<string, string>; requireSignedURLs?: boolean; } interface UploadImageURLOptions { imageURL: string; metadata?: Record<string, string>; requireSignedURLs?: boolean; } interface UpdateImageOptions { imageId: string; metadata?: Record<string, string>; requireSignedURLs?: boolean; } interface CreateVariantOptions { id: string; neverRequireSignedURLs?: boolean; options: VariantOptions; } interface UpdateVariantOptions { id: string; neverRequireSignedURLs?: boolean; options: VariantOptions; } interface ListImages { images: Image[]; } interface ListImagesV2 { images: Image[]; continuation_token: string; } interface Stats { count: { allowed: number; current: number; }; } interface ImageDetails { filename: string; id: string; meta: Record<string, string>; requireSignedURLs: boolean; uploaded: string; variants: string[]; } interface DirectUploadUrlV2 { id: string; uploadURL: string; } interface ListSigningKeys { keys: { name: string; value: string; }[]; } interface ListVariants { variants: { [key: string]: { id: string; neverRequireSignedURLs: boolean; options: VariantOptions; }; }; } interface VariantDetails { variant: { id: string; neverRequireSignedURLs: boolean; options: VariantOptions; }; } interface VariantOptions { fit: 'scale-down' | 'contain' | 'cover' | 'crop' | 'pad'; height: number; width: number; metadata: 'keep' | 'copyright' | 'none'; } interface UploadImage { id: string; filename: string; meta: Record<string, string>; requireSignedURLs: boolean; uploaded: string; variants: string[]; } interface Image { id: string; filename: string; meta?: Record<string, string>; requireSignedURLs: boolean; uploaded: string; variants: string[]; } interface DefaultResponse<Result> { success: boolean; errors: ErrorCloudFlare[]; messages: MessagesCloudFlare[]; result: Result | null; } interface ErrorCloudFlare { code: number; message: string; } interface MessagesCloudFlare { code: number; message: string; } declare class CloudFlareImages { private readonly auth; private readonly baseUrl; /** * @param {CloudFlareAuth} auth CloudFlareAuth * @param {CloudFlareOptions} [options] CloudFlareOptions * @example const cloudflare = new CloudFlareImages({ accountId: 'account_id', email: 'email', key: 'key' }, { endpoint: 'https://api.cloudflare.com/client/v4' }) * @example const cloudflare = new CloudFlareImages({ accountId: 'account_id', token: 'token' }, { endpoint: 'https://api.cloudflare.com/client/v4' }) * @returns {CloudFlareImages} CloudFlareImages */ constructor(auth: CloudFlareAuth, options?: CloudFlareOptions); /** * Images v1 */ /** * list images * @param {ListImagesOptions} info list images options * @returns object with success, errors, messages and result(images) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.listImages({ page: 1, perPage: 1000 }) */ list(info?: ListImagesOptions): Promise<DefaultResponse<ListImages>>; /** * get stats * @returns object with success, errors, messages and result(stats) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.stats() */ stats(): Promise<DefaultResponse<Stats>>; /** * get image details * @param imageId image id * @returns object with success, errors, messages and result(image details) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.imageDetails('image_id') */ imageDetails(imageId: string): Promise<DefaultResponse<ImageDetails>>; /** * get image * @param imageId image id * @returns object with success, errors, messages and result(base64 image) * @throws RequestError * @throws Error * @example const image = await cloudflare.image('image_id') */ baseImage(imageId: string): Promise<DefaultResponse<string>>; /** * upload image * @param name image name * @param image image buffer or base64 string * @param metadata image metadata * @param requireSignedURLs require signed urls * @returns object with success, errors, messages and result(image details) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.uploadImage({ name: 'image_name', image: 'image_base64', metadata: { key: 'value' }, requireSignedURLs: false }) */ uploadImage(info: UploadImageOptions): Promise<DefaultResponse<UploadImage>>; /** * upload image url * @param imageURL image url * @param metadata image metadata * @param requireSignedURLs require signed urls * @returns object with success, errors, messages and result(image details) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.uploadImageURL({ imageURL: 'https://example.com/image.png', metadata: { key: 'value' }, requireSignedURLs: false }) */ uploadImageURL(info: UploadImageURLOptions): Promise<DefaultResponse<UploadImage>>; /** * update image * @param imageId image id * @param metadata image metadata * @param requireSignedURLs require signed urls * @returns object with success, errors, messages and result(image details) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.updateImage({ imageId: 'image_id', metadata: { key: 'value' }, requireSignedURLs: false }) */ updateImage(info: UpdateImageOptions): Promise<DefaultResponse<Image>>; /** * delete image * @param imageId image id * @returns object with success, errors, messages and result(empty) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.deleteImage('image_id') */ deleteImage(imageId: string): Promise<DefaultResponse<Record<string, never>>>; /** * Images v2 */ /** * list images v2 * @param perPage number of images per page * @param sortOrder sort order * @param continuationToken continuation token * @returns object with success, errors, messages and result(images, continuation_token) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.listImagesV2({ perPage: 1000, sortOrder: null, continuationToken: null }) */ listV2(info?: ListImagesV2Options): Promise<DefaultResponse<ListImagesV2>>; /** * direct upload url v2 * @param expiry expiry date (default: 1 hour) '2023-12-13T11:57:06.523Z' * @param metadata image metadata * @param requireSignedURLs require signed urls * @returns object with success, errors, messages and result(direct upload url) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.directUploadUrlV2({ expiry: new Date(Date.now() + 1000 * 60 * 60 * 1), metadata: { key: 'value' }, requireSignedURLs: false }) */ directUploadUrlV2(info?: DirectUploadUrlV2Options): Promise<DefaultResponse<DirectUploadUrlV2>>; /** * Images keys */ /** * list signing keys * @returns object with success, errors, messages and result(signing keys) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.listSigningKeys() */ listSigningKeys(): Promise<DefaultResponse<ListSigningKeys>>; /** * Images variants */ /** * list variants * @returns object with success, errors, messages and result(variants) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.listVariants() */ listVariants(): Promise<DefaultResponse<ListVariants>>; /** * variant details * @param variantId variant id * @returns object with success, errors, messages and result(variant details) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.variantDetails('variant_id') */ variantDetails(variantId: string): Promise<DefaultResponse<VariantDetails>>; /** * create variant * @param id variant id * @param options variant options * @param neverRequireSignedURLs never require signed urls * @returns object with success, errors, messages and result(variant details) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.createVariant({ name: 'variant_name', options: { width: 100, height: 100, fit: 'contain', metadata: 'none' } }) */ createVariant(info: CreateVariantOptions): Promise<DefaultResponse<VariantDetails>>; /** * update variant * @param id variant id * @param options variant options * @param neverRequireSignedURLs never require signed urls * @returns object with success, errors, messages and result(variant details) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.updateVariant({ id: 'variant_id', options: { width: 100, height: 100, fit: 'contain', metadata: 'none' } }) */ updateVariant(info: UpdateVariantOptions): Promise<DefaultResponse<VariantDetails>>; /** * delete variant * @param variantId variant id * @returns object with success, errors, messages and result(empty) * @throws RequestError * @throws Error * @example const { success, errors, messages, result } = await cloudflare.deleteVariant('variant_id') */ deleteVariant(variantId: string): Promise<DefaultResponse<Record<string, never>>>; /** * Private */ private get; private post; private patch; private delete; private parseResponse; private getHeaders; private request; } export { CloudFlareImages as default };