Skip to content

feat(vercel): patches from vercel alchemy generation - #457

Draft
sam-goodwin wants to merge 5 commits into
mainfrom
feat/vercel
Draft

feat(vercel): patches from vercel alchemy generation#457
sam-goodwin wants to merge 5 commits into
mainfrom
feat/vercel

Conversation

@sam-goodwin

@sam-goodwin sam-goodwin commented Aug 14, 2026

Copy link
Copy Markdown
Collaborator

Companion to the alchemy Vercel provider (alchemy-run/alchemy#1217). Every patch here was surfaced by a live test against the real Vercel API.

Core codegen — binary request bodies. The OpenAPI converter dropped application/octet-stream request bodies entirely; it now emits a raw httpPayload member with bodyMediaType, sent verbatim by the protocol layer:

// deployments.uploadFile (and artifacts.uploadArtifact) gained:
body?: Blob | Uint8Array | ArrayBuffer | string;  // raw bytes under application/octet-stream

Patch layout. patches/{service}/{operationId}.patch.json — one directory per service, one file per operation, mirroring cloudflare/patches/{service}/{op}.json (see patches/README.md); convert.ts scans service subdirectories in sorted relative-path order.

31 patches across 8 services:

  • typed status adds live tests demanded: 404s on getProject/deleteProject/getProjectDomains/getWebhook/deleteWebhook/custom-env + access-group ops, conflict/slug-collision errors, 449 → DomainPretestFailed on issueCert
  • request-body fixes: dns.createRecord (anyOf arms were dropped — name/value/ttl/srv/https restored), createProjectEnv (was unknown), updateRollingReleaseConfig (had no body at all)
  • response fixes: access-groups list oneOf, edge-config slug params, storage store fields
  • real-but-undocumented storage endpoints the official CLI uses: GET /v1/storage/stores, GET/POST /v1/storage/stores/{storeId}/connections (the store↔project connect flow that injects BLOB_READ_WRITE_TOKEN)

Verified by the alchemy Vercel live suite (60+ tests against a real Pro team) and a full 38-module regeneration.

🤖 Generated with Claude Code

… errors and shape fixes

Produced by alchemy's Vercel provider bring-up — every patch was surfaced
by a live test against the real API (the typed-error flywheel).

- core codegen: OpenAPI binary request bodies (application/octet-stream)
  now emit a raw httpPayload member with bodyMediaType instead of being
  dropped — unblocks deployments.uploadFile, artifacts.uploadArtifact
- patches/ for vercel, laid out patches/{service}/{operationId}.patch.json
  (one file per operation, mirroring cloudflare's layout; README included);
  convert.ts scans service subdirectories in sorted relative-path order
- 31 patch files across 8 services: typed 404/409/449 adds, request-body
  shape fixes (dns.createRecord anyOf flattening, createProjectEnv,
  rolling-release body), response fixes (access-groups list oneOf,
  edge-config slug params), and the real-but-undocumented storage
  endpoints (GET /v1/storage/stores, /v1/storage/stores/{id}/connections)
  the official CLI uses

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@alchemy-version-bot

alchemy-version-bot Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Install the packages built from this commit:

Distilled

@distilled.cloud/core

bun add https://pkg.ing/@distilled.cloud/core/3401096

@distilled.cloud/aws

bun add https://pkg.ing/@distilled.cloud/aws/3401096

@distilled.cloud/axiom

bun add https://pkg.ing/@distilled.cloud/axiom/3401096

@distilled.cloud/azure

bun add https://pkg.ing/@distilled.cloud/azure/3401096

@distilled.cloud/cloudflare

bun add https://pkg.ing/@distilled.cloud/cloudflare/3401096

@distilled.cloud/coinbase

bun add https://pkg.ing/@distilled.cloud/coinbase/3401096

@distilled.cloud/discord

bun add https://pkg.ing/@distilled.cloud/discord/3401096

@distilled.cloud/expo-eas

bun add https://pkg.ing/@distilled.cloud/expo-eas/3401096

@distilled.cloud/fly-io

bun add https://pkg.ing/@distilled.cloud/fly-io/3401096

@distilled.cloud/gcp

bun add https://pkg.ing/@distilled.cloud/gcp/3401096

@distilled.cloud/github

bun add https://pkg.ing/@distilled.cloud/github/3401096

@distilled.cloud/kubernetes

bun add https://pkg.ing/@distilled.cloud/kubernetes/3401096

@distilled.cloud/mongodb-atlas

bun add https://pkg.ing/@distilled.cloud/mongodb-atlas/3401096

@distilled.cloud/neon

bun add https://pkg.ing/@distilled.cloud/neon/3401096

@distilled.cloud/planetscale

bun add https://pkg.ing/@distilled.cloud/planetscale/3401096

@distilled.cloud/posthog

bun add https://pkg.ing/@distilled.cloud/posthog/3401096

@distilled.cloud/prisma-postgres

bun add https://pkg.ing/@distilled.cloud/prisma-postgres/3401096

@distilled.cloud/railway

bun add https://pkg.ing/@distilled.cloud/railway/3401096

@distilled.cloud/stripe

bun add https://pkg.ing/@distilled.cloud/stripe/3401096

@distilled.cloud/supabase

bun add https://pkg.ing/@distilled.cloud/supabase/3401096

@distilled.cloud/turso

bun add https://pkg.ing/@distilled.cloud/turso/3401096

@distilled.cloud/typesense

bun add https://pkg.ing/@distilled.cloud/typesense/3401096

@distilled.cloud/vercel

bun add https://pkg.ing/@distilled.cloud/vercel/3401096

@distilled.cloud/workos

bun add https://pkg.ing/@distilled.cloud/workos/3401096

Surfaced by the ProjectEnv resource's read path (project-gone observation).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@sam-goodwin sam-goodwin changed the title feat(vercel): binary request bodies, service-organized patches, typed errors and shape fixes feat(vercel): patches from vercel alchemy generation Aug 14, 2026
sam-goodwin and others added 3 commits August 14, 2026 00:53
A server hint beyond our patience window (e.g. Vercel's 5-per-day
POST /v1/teams limit answering 429 with retry-after: 86400) means every
capped retry provably lands inside the same window — retrying just burns
the caller's timeout. The while predicates now fail fast, surfacing the
typed throttling error (observed: a 120s test hang became a 169ms typed
failure).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…vices

Surfaced by alchemy's live suite: rolling-release request body, teams /
project-members / routes / web-analytics / microfrontends / sandboxes /
checks / feature-flags status+shape fixes, storage connections list, and
getDeployment response repair (readySubstate missing from oneOf arm 0;
readyState enum missing the live-verified DELETED).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
'All HTTP goes through distilled' — hand-authored manual-specs compile to
fully-typed data-plane services so alchemy's hand-written HTTP clients can
be deleted:

- core: HostLabel endpoint templates ({store}.blob.vercel-storage.com,
  {region}.vercel-queue.com), header-presence error matchers (Edge
  Config's 404-with-x-edge-config-digest item-vs-config discrimination),
  http.accept, greedy path labels, a decodeSuccess hook for binary /
  multipart-mixed responses, and a raw-payload fix so a modeled
  content-type member is actually sent (also fixes latent R2 upload
  behavior); JSON null 2xx bodies decode as null
- vercel: manual-specs/{blob_data,queues_data,edge_config_data}.json ->
  generated services with typed error taxonomies; data-protocol with
  per-call sensitive bearer tokens (no package Credentials), env
  overrides (VERCEL_BLOB_API_URL, VERCEL_QUEUE_BASE_URL) preserved for
  local emulation; multipart parser exported
- verified 38/38 against the local emulator contract and 33/35 live
  (the 2 deltas were stale probe expectations, recorded in alchemy's
  PROBES.md); all other services byte-identical
- includes a concurrent wave agent's getDeploymentFileContents patch

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant