From 58ad28df103558af1cbfb06952c90431d539318c Mon Sep 17 00:00:00 2001 From: lodekeeper Date: Tue, 28 Jul 2026 15:10:17 +0000 Subject: [PATCH] fix(sign): fetch existing Rekor entries by default Signed-off-by: lodekeeper --- .changeset/rekor-fetch-on-conflict.md | 5 +++++ .../src/__tests__/witness/tlog/client.test.ts | 17 +++++++++++++++++ packages/sign/src/witness/tlog/client.ts | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 .changeset/rekor-fetch-on-conflict.md diff --git a/.changeset/rekor-fetch-on-conflict.md b/.changeset/rekor-fetch-on-conflict.md new file mode 100644 index 000000000..5492f7ab9 --- /dev/null +++ b/.changeset/rekor-fetch-on-conflict.md @@ -0,0 +1,5 @@ +--- +"@sigstore/sign": patch +--- + +Fetch existing Rekor entries by default when a create request returns a conflict. diff --git a/packages/sign/src/__tests__/witness/tlog/client.test.ts b/packages/sign/src/__tests__/witness/tlog/client.test.ts index 241feceb3..6e4f69fef 100644 --- a/packages/sign/src/__tests__/witness/tlog/client.test.ts +++ b/packages/sign/src/__tests__/witness/tlog/client.test.ts @@ -125,6 +125,23 @@ describe('TLogClient', () => { .reply(409, {}, { Location: `/api/v1/log/entries/${uuid}` }); }); + describe('by default', () => { + const subject = new TLogClient({ rekorBaseURL }); + + describe('when the fetch is successful', () => { + beforeEach(() => { + nock(rekorBaseURL) + .get(`/api/v1/log/entries/${uuid}`) + .reply(200, rekorEntry); + }); + + it('returns a tlog entry', async () => { + const entry = await subject.createEntry(proposedEntry); + expect(entry).toBeTruthy(); + }); + }); + }); + describe('when fetchOnConflict is false', () => { const subject = new TLogClient({ rekorBaseURL, diff --git a/packages/sign/src/witness/tlog/client.ts b/packages/sign/src/witness/tlog/client.ts index 0e133220c..c5ec490c4 100644 --- a/packages/sign/src/witness/tlog/client.ts +++ b/packages/sign/src/witness/tlog/client.ts @@ -40,7 +40,7 @@ export class TLogClient implements TLog { private fetchOnConflict: boolean; constructor(options: TLogClientOptions) { - this.fetchOnConflict = options.fetchOnConflict ?? false; + this.fetchOnConflict = options.fetchOnConflict ?? true; this.rekor = new Rekor({ baseURL: options.rekorBaseURL, retry: options.retry,