From 84ce8cf2564135b4efe378d08697eba7d76bffb7 Mon Sep 17 00:00:00 2001 From: Arka Mondal Date: Thu, 2 Jul 2026 15:12:38 +0100 Subject: [PATCH] Add signedUrl to Images binding types --- src/cloudflare/internal/images.d.ts | 14 ++++++++++++++ .../internal/test/images/images-api-test.js | 17 +++++++++++++++++ .../test/images/images-upstream-mock.js | 4 ++++ types/defines/images.d.ts | 14 ++++++++++++++ .../generated-snapshot/experimental/index.d.ts | 12 ++++++++++++ types/generated-snapshot/experimental/index.ts | 12 ++++++++++++ types/generated-snapshot/latest/index.d.ts | 12 ++++++++++++ types/generated-snapshot/latest/index.ts | 12 ++++++++++++ 8 files changed, 97 insertions(+) diff --git a/src/cloudflare/internal/images.d.ts b/src/cloudflare/internal/images.d.ts index 280061e03e9..276dd637552 100644 --- a/src/cloudflare/internal/images.d.ts +++ b/src/cloudflare/internal/images.d.ts @@ -147,6 +147,12 @@ interface ImageListOptions { creator?: string; } +interface ImageSignedUrlOptions { + variant: string; + expiresIn?: number; + keyName?: string; +} + interface ImageList { images: ImageMetadata[]; cursor?: string; @@ -166,6 +172,14 @@ interface ImageHandle { */ bytes(): Promise | null>; + /** + * Generate a signed delivery URL for this hosted image. + * @param options Signing configuration + * @returns A signed image delivery URL + * @throws {@link ImagesError} if signing fails + */ + signedUrl(options: ImageSignedUrlOptions): Promise; + /** * Update hosted image metadata * @param options Properties to update diff --git a/src/cloudflare/internal/test/images/images-api-test.js b/src/cloudflare/internal/test/images/images-api-test.js index 00e9de64de2..53ff9827452 100644 --- a/src/cloudflare/internal/test/images/images-api-test.js +++ b/src/cloudflare/internal/test/images/images-api-test.js @@ -511,6 +511,23 @@ export const test_images_getImage_not_found = { }, }; +export const test_images_signed_url = { + /** + * @param {unknown} _ + * @param {Env} env + */ + async test(_, env) { + const url = await env.images.hosted + .image('test-image-id') + .signedUrl({ variant: 'private' }); + + assert.equal( + url, + 'https://imagedelivery.example/test-image-id/private?sig=mock-signature' + ); + }, +}; + // UPLOAD export const test_images_upload_with_options = { /** diff --git a/src/cloudflare/internal/test/images/images-upstream-mock.js b/src/cloudflare/internal/test/images/images-upstream-mock.js index 3b7c65597c4..9ef96fd360c 100644 --- a/src/cloudflare/internal/test/images/images-upstream-mock.js +++ b/src/cloudflare/internal/test/images/images-upstream-mock.js @@ -56,6 +56,10 @@ class ImageHandleMock extends RpcTarget { return new Blob([mockData]).stream(); } + async signedUrl(options) { + return `https://imagedelivery.example/${this.#imageId}/${options.variant}?sig=mock-signature`; + } + /** * @param {ImageUpdateOptions} body * @returns {Promise} diff --git a/types/defines/images.d.ts b/types/defines/images.d.ts index caf381f6afb..17888e0b664 100644 --- a/types/defines/images.d.ts +++ b/types/defines/images.d.ts @@ -144,6 +144,12 @@ interface ImageListOptions { creator?: string; } +interface ImageSignedUrlOptions { + variant: string; + expiresIn?: number; + keyName?: string; +} + interface ImageList { images: ImageMetadata[]; cursor?: string; @@ -163,6 +169,14 @@ interface ImageHandle { */ bytes(): Promise | null>; + /** + * Generate a signed delivery URL for this hosted image. + * @param options Signing configuration + * @returns A signed image delivery URL + * @throws {@link ImagesError} if signing fails + */ + signedUrl(options: ImageSignedUrlOptions): Promise; + /** * Update hosted image metadata * @param options Properties to update diff --git a/types/generated-snapshot/experimental/index.d.ts b/types/generated-snapshot/experimental/index.d.ts index 2c300423c8b..dd0f86bfcbb 100755 --- a/types/generated-snapshot/experimental/index.d.ts +++ b/types/generated-snapshot/experimental/index.d.ts @@ -14696,6 +14696,11 @@ interface ImageListOptions { sortOrder?: "asc" | "desc"; creator?: string; } +interface ImageSignedUrlOptions { + variant: string; + expiresIn?: number; + keyName?: string; +} interface ImageList { images: ImageMetadata[]; cursor?: string; @@ -14712,6 +14717,13 @@ interface ImageHandle { * @returns ReadableStream of image bytes, or null if not found */ bytes(): Promise | null>; + /** + * Generate a signed delivery URL for this hosted image. + * @param options Signing configuration + * @returns A signed image delivery URL + * @throws {@link ImagesError} if signing fails + */ + signedUrl(options: ImageSignedUrlOptions): Promise; /** * Update hosted image metadata * @param options Properties to update diff --git a/types/generated-snapshot/experimental/index.ts b/types/generated-snapshot/experimental/index.ts index f7ea288d7fe..9926c84f0e3 100755 --- a/types/generated-snapshot/experimental/index.ts +++ b/types/generated-snapshot/experimental/index.ts @@ -14719,6 +14719,11 @@ export interface ImageListOptions { sortOrder?: "asc" | "desc"; creator?: string; } +export interface ImageSignedUrlOptions { + variant: string; + expiresIn?: number; + keyName?: string; +} export interface ImageList { images: ImageMetadata[]; cursor?: string; @@ -14735,6 +14740,13 @@ export interface ImageHandle { * @returns ReadableStream of image bytes, or null if not found */ bytes(): Promise | null>; + /** + * Generate a signed delivery URL for this hosted image. + * @param options Signing configuration + * @returns A signed image delivery URL + * @throws {@link ImagesError} if signing fails + */ + signedUrl(options: ImageSignedUrlOptions): Promise; /** * Update hosted image metadata * @param options Properties to update diff --git a/types/generated-snapshot/latest/index.d.ts b/types/generated-snapshot/latest/index.d.ts index e89b4b64a74..6c5583541e4 100755 --- a/types/generated-snapshot/latest/index.d.ts +++ b/types/generated-snapshot/latest/index.d.ts @@ -14048,6 +14048,11 @@ interface ImageListOptions { sortOrder?: "asc" | "desc"; creator?: string; } +interface ImageSignedUrlOptions { + variant: string; + expiresIn?: number; + keyName?: string; +} interface ImageList { images: ImageMetadata[]; cursor?: string; @@ -14064,6 +14069,13 @@ interface ImageHandle { * @returns ReadableStream of image bytes, or null if not found */ bytes(): Promise | null>; + /** + * Generate a signed delivery URL for this hosted image. + * @param options Signing configuration + * @returns A signed image delivery URL + * @throws {@link ImagesError} if signing fails + */ + signedUrl(options: ImageSignedUrlOptions): Promise; /** * Update hosted image metadata * @param options Properties to update diff --git a/types/generated-snapshot/latest/index.ts b/types/generated-snapshot/latest/index.ts index 4397539adb5..a6599e663e4 100755 --- a/types/generated-snapshot/latest/index.ts +++ b/types/generated-snapshot/latest/index.ts @@ -14071,6 +14071,11 @@ export interface ImageListOptions { sortOrder?: "asc" | "desc"; creator?: string; } +export interface ImageSignedUrlOptions { + variant: string; + expiresIn?: number; + keyName?: string; +} export interface ImageList { images: ImageMetadata[]; cursor?: string; @@ -14087,6 +14092,13 @@ export interface ImageHandle { * @returns ReadableStream of image bytes, or null if not found */ bytes(): Promise | null>; + /** + * Generate a signed delivery URL for this hosted image. + * @param options Signing configuration + * @returns A signed image delivery URL + * @throws {@link ImagesError} if signing fails + */ + signedUrl(options: ImageSignedUrlOptions): Promise; /** * Update hosted image metadata * @param options Properties to update