@kevinmichaelchen/distilled-stripe
v0.1.0
Published
Protocol-based Effect 4 SDK for the Stripe API
Downloads
101
Readme
Distilled Stripe
An Effect 4-native Stripe SDK generated from Stripe's official SDK-flavored
OpenAPI description. Operations use Distilled's shared protocol factory and
return typed Effect values.
import * as Effect from "effect/Effect";
import * as Stripe from "@kevinmichaelchen/distilled-stripe";
import * as HttpClient from "effect/unstable/http/HttpClient";
const program = Stripe.Services.charges.getCharges({ limit: 10 }).pipe(
Stripe.withRequestOptions({ stripeAccount: "acct_123" }),
Effect.provide(Stripe.credentials({ apiKey: "sk_test_..." })),
Effect.provide(HttpClient.layerFetch),
);POST bodies are passed under the generated body member and are encoded with
Stripe's nested bracket syntax. Expandable fields are represented by the
OpenAPI union (string | expanded object) when the official schema carries
both forms. withRequestOptions supplies Idempotency-Key, Stripe-Account
or Stripe-Context, and Stripe-Version without adding them to operation
inputs. Automatic retry is generated only for safe HTTP methods; callers must
make mutation retry semantics explicit with Stripe idempotency keys.
Webhook verification requires the exact raw request bytes:
const event = yield* Stripe.Webhooks.constructEvent({
payload: rawBody,
signature: request.headers.get("stripe-signature"),
secret: webhookSecret,
});The official source is pinned in specs.lock.json. bun run specs:fetch
downloads it and verifies its SHA-256 digest. The source document and Smithy
shadow output are kept out of version control. The compact manifests in
smithy-baseline/ record the pinned source, resource grouping, and parity
results.
bun run generate writes the production src/services/ projection through
the OpenAPI → Smithy compiler. It preserves the local 73-module resource
grouping. The previous direct generator remains a compatibility oracle in
.direct-shadow/: its operation I/O declarations are retained exactly while
Smithy owns operation construction, pagination metadata, manifests, and the
production module projection.
bun run check:parity regenerates both projections and verifies all 534
operations, all 1,068 bidirectional Input/Output assignability assertions,
public exports, errors, pagination, sensitive values, and representative wire
fixtures. Generation is atomic and deterministic; a failed projection leaves
the prior production directory intact.
Development
bun install
bun run generate
bun run check:parity
bun run typecheck
bun test
bun run buildThe CI workflow verifies these steps and has no package-publishing job.
