You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by te...@apache.org on 2026/05/01 14:46:03 UTC

(opendal) 01/01: feat(bindings/nodejs): Add presignDelete method for parity with presignRead/Write/Stat

This is an automated email from the ASF dual-hosted git repository.

TennyZhuang pushed a commit to branch agent-nodejs-presign-delete
in repository https://gitbox.apache.org/repos/asf/opendal.git

commit 2c32a0717d6da22d1f87ddbb987ec1bd91dffa1d
Author: tianyizhuang <ti...@tianyizhuangs-Mac-mini.local>
AuthorDate: Fri May 1 21:52:05 2026 +0800

    feat(bindings/nodejs): Add presignDelete method for parity with presignRead/Write/Stat
    
    Add the missing presign_delete capability to the Node.js binding, matching
    the existing flat presign method pattern (presignRead/presignWrite/presignStat).
    
    - bindings/nodejs/src/lib.rs: Add presign_delete napi method
    - bindings/nodejs/generated.d.ts: Auto-generated TypeScript declaration
    - Intentionally flat only (no options variant) for sibling parity
    - No Capability getter added (deferred to uniform sweep)
    
    Closes: apache/opendal issue for presign_delete parity
    Scope: Node.js binding only
    AI-assisted: DeepSeek v4-pro, reviewed by OpenDAL regression team
---
 bindings/nodejs/generated.d.ts | 16 ++++++++++++++++
 bindings/nodejs/src/lib.rs     | 23 +++++++++++++++++++++++
 2 files changed, 39 insertions(+)

diff --git a/bindings/nodejs/generated.d.ts b/bindings/nodejs/generated.d.ts
index 77ddf0705..53d7a1271 100644
--- a/bindings/nodejs/generated.d.ts
+++ b/bindings/nodejs/generated.d.ts
@@ -824,6 +824,22 @@ export declare class Operator {
    * ```
    */
   presignStat(path: string, expires: number): Promise<PresignedRequest>
+  /**
+   * Get a presigned request for delete.
+   *
+   * Unit of `expires` is seconds.
+   *
+   * ### Example
+   *
+   * ```javascript
+   * const req = await op.presignDelete(path, parseInt(expires));
+   *
+   * console.log("method: ", req.method);
+   * console.log("url: ", req.url);
+   * console.log("headers: ", req.headers);
+   * ```
+   */
+  presignDelete(path: string, expires: number): Promise<PresignedRequest>
   /** Add a layer to this operator. */
   layer(layer: ExternalObject<Layer>): Operator
 }
diff --git a/bindings/nodejs/src/lib.rs b/bindings/nodejs/src/lib.rs
index e56380e0a..85260382d 100644
--- a/bindings/nodejs/src/lib.rs
+++ b/bindings/nodejs/src/lib.rs
@@ -794,6 +794,29 @@ impl Operator {
             .map_err(format_napi_error)?;
         Ok(PresignedRequest::new(res))
     }
+
+    /// Get a presigned request for delete.
+    ///
+    /// Unit of `expires` is seconds.
+    ///
+    /// ### Example
+    ///
+    /// ```javascript
+    /// const req = await op.presignDelete(path, parseInt(expires));
+    ///
+    /// console.log("method: ", req.method);
+    /// console.log("url: ", req.url);
+    /// console.log("headers: ", req.headers);
+    /// ```
+    #[napi]
+    pub async fn presign_delete(&self, path: String, expires: u32) -> Result<PresignedRequest> {
+        let res = self
+            .async_op
+            .presign_delete(&path, Duration::from_secs(expires as u64))
+            .await
+            .map_err(format_napi_error)?;
+        Ok(PresignedRequest::new(res))
+    }
 }
 
 /// Entry returned by Lister or BlockingLister to represent a path, and it's a relative metadata.