From bb8c6c7badd085f3e36c6d022e5b4f153364ab5d Mon Sep 17 00:00:00 2001
From: Mark Ferrell <major@homeonderanged.org>
Date: Tue, 14 Jan 2025 07:34:16 -0800
Subject: [PATCH] feat: support for Create/Delete file revisions

Extracted from fork https://github.com/henrybear327/go-proton-api
---
 link_file.go       | 20 ++++++++++++++++++++
 link_file_types.go |  4 ++++
 2 files changed, 24 insertions(+)

diff --git a/link_file.go b/link_file.go
index e682682..5c4a28e 100644
--- a/link_file.go
+++ b/link_file.go
@@ -53,3 +53,23 @@ func (c *Client) UpdateRevision(ctx context.Context, shareID, linkID, revisionID
 		return r.SetBody(req).Put("/drive/shares/" + shareID + "/files/" + linkID + "/revisions/" + revisionID)
 	})
 }
+
+func (c *Client) DeleteRevision(ctx context.Context, shareID, linkID, revisionID string) error {
+	return c.do(ctx, func(r *resty.Request) (*resty.Response, error) {
+		return r.Delete("/drive/shares/" + shareID + "/files/" + linkID + "/revisions/" + revisionID)
+	})
+}
+
+func (c *Client) CreateRevision(ctx context.Context, shareID, linkID string) (CreateRevisionRes, error) {
+	var res struct {
+		Revision CreateRevisionRes
+	}
+
+	if err := c.do(ctx, func(r *resty.Request) (*resty.Response, error) {
+		return r.SetResult(&res).Post("/drive/shares/" + shareID + "/files/" + linkID + "/revisions")
+	}); err != nil {
+		return CreateRevisionRes{}, err
+	}
+
+	return res.Revision, nil
+}
diff --git a/link_file_types.go b/link_file_types.go
index 16344e0..91e9756 100644
--- a/link_file_types.go
+++ b/link_file_types.go
@@ -22,6 +22,10 @@ type CreateFileRes struct {
 	RevisionID string // Encrypted Revision ID
 }
 
+type CreateRevisionRes struct {
+	ID string // Encrypted Revision ID
+}
+
 type UpdateRevisionReq struct {
 	BlockList         []BlockToken
 	State             RevisionState