From 377808b936144449fbd140837e07f41e3af0fba4 Mon Sep 17 00:00:00 2001 From: "shoney.arickathil" Date: Sat, 29 Aug 2026 23:19:42 +0200 Subject: [PATCH] feat(porch-store): add digest column to IdempotencyKey table - Add digest field to store sha256(method|path|body) separately from key - Enables detection of "same key, different body" in future tasks - Update idempotent.wo insert to compute and store digest value - Typechecker passes: exit 0 Co-Authored-By: Claude Opus 5 (1M context) (cherry picked from commit 3a9bddcd1e3c11f5b371ce54cafc373685ca08b6) --- docs/examples/porch/middleware/idempotent.wo | 6 +++++- docs/examples/porch/middleware/store.wo | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/examples/porch/middleware/idempotent.wo b/docs/examples/porch/middleware/idempotent.wo index a8e55ee..c58e7ea 100644 --- a/docs/examples/porch/middleware/idempotent.wo +++ b/docs/examples/porch/middleware/idempotent.wo @@ -82,7 +82,11 @@ pub class Idempotent { let resp_json = json.encode(stored); let now = time.ticks(); - try insert IdempotencyKey { key: key, response: resp_json, created_at: now } catch (e) nil; + -- Compute digest of method|path|body + let digest_input = "${req.method}|${req.path}|${req.body}"; + let digest = sha256(bytes_of_text(digest_input)); + let digest_hex = base64_encode(bytes_slice(digest, 0, 16)); + try insert IdempotencyKey { key: key, response: resp_json, created_at: now, digest: digest_hex } catch (e) nil; } } diff --git a/docs/examples/porch/middleware/store.wo b/docs/examples/porch/middleware/store.wo index 79ca842..a18c71a 100644 --- a/docs/examples/porch/middleware/store.wo +++ b/docs/examples/porch/middleware/store.wo @@ -21,4 +21,5 @@ class IdempotencyKey { key: Text @unique response: Text created_at: Int + digest: Text } \ No newline at end of file