Skip to content

stunt 0.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 22 Jul 16:19

stunt 0.1.0

stunt turns public-facing APIs into local simulators so you can develop
and test client code without remote accounts or network access.

Changelog

New features

  • 21f88d9 feat: git adapter distribution (pi-style add/list/remove/update) — epic stunt-mlj
  • 3319290 feat: project scaffold + stunt version
  • c96c43c feat: stunt adapter import proto (gRPC adapter scaffolding) — epic stunt-ztm
  • c0d4295 feat: wire Identity+Events into Starlark; complete stripe adapter (auth+webhooks)

Other

  • f92f940 build(ci): justfile with 'just ci' canonical gate (build+test -race+vet+fmt-check+mod-tidy+lint-adapters)
  • daa2899 build: add stunt-internal as a private submodule at docs/internal/
  • 31385f0 chore(adapters): backfill api: version metadata on all existing adapters
  • 8cdde34 chore(legal): add Apache 2.0 LICENSE, NOTICE, and TRADEMARKS.md (trademark policy)
  • 601784d chore(release): drop dangling CHANGELOG.md link (GoReleaser generates the changelog into release notes)
  • 00e4709 ci: add GoReleaser + GitHub Actions + vanity redirect + RELEASING guide
  • 759f241 docs(adapters): scrub private-project references from public adapter docs
  • 3b066ac docs(readme): rewrite as a landing page (problem, stunt demo, comparison table)
  • b79858f docs(test): document yaml.Node flow-whitespace residual in manifest-preservation test
  • 33a95a1 drive/dropbox adapters: accept real binary uploads (raw body + headers)
  • 0a76cca feat(adapter): adapter.yaml schema + convention-dir loader
  • 265a9df feat(adapter): api-version tracking — adapters declare the real upstream API + version
  • fbe98f3 feat(adapter): expose Collection+KV stores to Starlark builtins
  • eb6c1d5 feat(adapter/runtime): expose Blob store to Starlark builtins
  • cce3787 feat(adapterdist): git source spec + clone/cache (pinned refs, dedup, injection-safe)
  • 88a0920 feat(adapters): X Articles surface (draft/publish/media + PKCE oauth) — ports REMOVED mock_x_api
  • 5e5bf88 feat(adapters): adyen-style (payments captures refunds + HMAC notifications) — Wave D
  • 792f08a feat(adapters): anaplan-style (Anaplan API 2.0) — final tail
  • f93c1c0 feat(adapters): apple-apns-style (HTTP/2 token send + apns-id + BadDeviceToken) — Wave A
  • 1e570be feat(adapters): apple-appstoreconnect-style (JWT-auth JSON:API apps/versions) — Wave A
  • 63b28e0 feat(adapters): apple-music-style (Apple Music API 1.0) — final tail
  • dd551eb feat(adapters): apple-searchads-style (campaigns+reports+keywords) — catalog tail
  • b225922 feat(adapters): apps-script-style (Google Apps Script API v1) — final tail
  • 7e45ce6 feat(adapters): avalara-style (AvaTax calc + transactions + jurisdiction breakdown) — catalog tail
  • 7777abc feat(adapters): aws-cognito-style (hosted-UI OAuth + user-pool service API + JWT) — catalog
  • b4550be feat(adapters): aws-iam-sts-style (AssumeRole/GetCallerIdentity temp creds + IAM) — Wave F
  • bfe1d06 feat(adapters): aws-s3-style (SigV4 PUT/GET/DELETE + ListObjectsV2 XML + presigned) — Wave B
  • 626de98 feat(adapters): azure-devops-style (Azure DevOps REST API 7.1) — final tail
  • 688a5b9 feat(adapters): azure-servicebus-style (Azure Service Bus + Storage 2024-01-01) — final tail
  • 661ec14 feat(adapters): azure-storage-style (Blob CRUD + SAS/SharedKey + XML listings) — Wave F
  • c591091 feat(adapters): blog-style GraphQL reference adapter + lint graphql-section + docs
  • 2ecbc55 feat(adapters): bluesky-style (AT Protocol createSession + createRecord + resolveHandle)
  • 133b02a feat(adapters): braintree-style (GraphQL + REST transactions + nonce + webhooks) — catalog tail
  • 9b07268 feat(adapters): braze-style (Braze REST API 2.0) — final tail
  • e042195 feat(adapters): chainlink-style (Data Feeds + Functions + Automation + CCIP) — catalog tail
  • a545cdb feat(adapters): cloudflare-style (Zones/Workers/R2/D1 + API tokens) — Wave F
  • 5c84dcd feat(adapters): cloudkit-style (CloudKit Web Services API v1) — final tail
  • 796eec6 feat(adapters): discord-style (OAuth2 + bot REST + stateful messages) — unblocks REMOVED
  • 243d2c0 feat(adapters): drive-style reference adapter (broader, blob+metadata)
  • bb7e387 feat(adapters): dropbox-style reference adapter (broader, blob+metadata)
  • e90f2d8 feat(adapters): dune-style (SQL async execute+results) — catalog tail
  • 0992b59 feat(adapters): echo-style WebSocket endpoint + lint ws-section + docs
  • 9d4adb3 feat(adapters): echo-style gRPC reference adapter + docs
  • ae74163 feat(adapters): echo-style streaming RPC + proto-importer streaming stubs + docs
  • 6f110e3 feat(adapters): embed all 91 reference adapters in the binary + 'embedded:' source kind
  • e149823 feat(adapters): entra-id-style (Microsoft Entra ID OAuth2 + Graph /me + users) — Wave A
  • 889671e feat(adapters): erc4337-style (bundler RPC + paymaster + userOp receipts) — Wave C
  • db1b021 feat(adapters): eth-jsonrpc-style (deterministic Ethereum JSON-RPC + batch + receipts) — Wave C
  • f5e2d4b feat(adapters): etherscan-style (account/contract/stats + apikey) — Wave C
  • 7a3324e feat(adapters): firebase-style (Auth v1/v3 + Firestore typed values + FCM) — catalog
  • ec7e6d3 feat(adapters): ga4-style (GA4 Admin + Data runReport) — Wave A
  • 96a29d2 feat(adapters): gcalendar-style (v3 events + recurring + quickAdd) — Wave A tail
  • b278a17 feat(adapters): gdocs-style (Google Docs API v1) — final tail
  • 3ab05e3 feat(adapters): github-style (App tokens + repos/issues/PRs + webhooks + graphql) — Wave F
  • a054473 feat(adapters): gmail-style (v1 messages send/list + rfc822 + labels) — Wave A tail
  • 5ea20f1 feat(adapters): google-admin-style (Directory API users/groups CRUD) — Wave A
  • 6ed41ac feat(adapters): google-iam-style (service accounts + jwt-bearer + domain-wide delegation) — Wave A
  • 047ad07 feat(adapters): google-style (OAuth2 authorize/token/refresh + userinfo) — unblocks onlin OAuth gate
  • 1f07763 feat(adapters): gsearchconsole-style (Google Search Console API v1) — final tail
  • 776c009 feat(adapters): gsheets-style (v4 spreadsheets/values A1-notation grid) — Wave A tail
  • f7aeaa3 feat(adapters): gtasks-style (Google Tasks API v1) — final tail
  • f17c81e feat(adapters): helius-style (Solana RPC+NFTs+balances) — catalog tail
  • e7a58f7 feat(adapters): hn-style (Firebase-style HN items/users/stories) — ports REMOVED mock_hn
  • e56bbd7 feat(adapters): hubspot-style (CRM v3 objects + associations + batch + cursor) — Wave E
  • 781b564 feat(adapters): instagram-style (Meta OAuth2 + two-step media publish + insights)
  • 3e4f5a6 feat(adapters): jira-style (Cloud REST v3 + JQL + issues/transitions) — Wave E
  • 3f35f90 feat(adapters): jumio-style (KYC scan PENDING→DONE+webhook) — catalog tail
  • 8ef2807 feat(adapters): linkedin-style adapter (Arctic OAuth2 + ugcPosts + comments + analytics) — ports REMOVED mock_linkedin
  • 58b1058 feat(adapters): llm-style (OpenAI chat/completions + Anthropic messages, deterministic)
  • 65c37a8 feat(adapters): marketo-style (Engage REST + token churn + activities) — Wave E
  • cb4ed86 feat(adapters): microsoft-graph-style (v1.0 me/messages/events/chats/files + OData) — catalog
  • 42099c6 feat(adapters): netsuite-style (SuiteTalk REST + SuiteQL + TBA auth) — Wave E
  • 7760723 feat(adapters): neutral-naming + disclaimer conventions for branded adapters
  • 6b70331 feat(adapters): oneinch-style (DEX quote+swap+approve) — catalog tail
  • 97a6259 feat(adapters): onfido-style (KYC applicant+check+webhook) — catalog tail
  • 8f18b04 feat(adapters): opensea-style (API v2 assets + Seaport orders) — Wave C
  • 937e988 feat(adapters): paypal-style (Orders v2 create/approve/capture + refunds + webhooks) — Wave D
  • e7fdf90 feat(adapters): persona-style (KYC inquiry + webhook) — catalog tail
  • 668e523 feat(adapters): photos-style (batchCreate/search/uploads) — Google Photos
  • 980fa2c feat(adapters): pinata-style (IPFS pinning + CID + auth) — catalog tail
  • 277be7d feat(adapters): plaid-style (Link + item exchange + transactions/sync + identity) — Wave D
  • be769b9 feat(adapters): powerplatform-style (Microsoft Power Platform API v2) — final tail
  • 9e6a953 feat(adapters): printful-style (store products/orders + shipping rates)
  • b2eddc6 feat(adapters): printify-style (catalog/products/orders + webhooks)
  • 4ea4b74 feat(adapters): producthunt-style (GraphQL post creation)
  • a566fa6 feat(adapters): psd2-style (consent + SCA redirect flow + accounts) — Wave D
  • 337a97b feat(adapters): qbo-style (OAuth2 + refresh churn + QSQL query + Fault errors) — Wave D
  • 137431f feat(adapters): reddit-style adapter (submit + access_token + UA requirement) — ports REMOVED mock_reddit
  • 91851c0 feat(adapters): resend-style (email send/list + webhook events)
  • 27cd035 feat(adapters): revenuecat-style (subscribers/entitlements/receipts)
  • 91428ad feat(adapters): revenuecat-style fidelity to real v1 subscriber schema (stunt-n85)
  • 3179cd0 feat(adapters): revenuecat-style fidelity to real v1 subscriber schema (stunt-n85, standalone re-apply)
  • 474c5a3 feat(adapters): salesforce-style (REST + SOQL + OAuth + sobjects CRUD) — Wave E
  • d73b267 feat(adapters): sendgrid-style (v3 mail/send + ECDSA event webhooks) — Wave B
  • a86f3ff feat(adapters): servicenow-style (Table API + encoded query + sys_id CRUD) — Wave E
  • 3ada62f feat(adapters): shopify-style (Admin REST + GraphQL + OAuth + webhook hmac) — Wave F
  • d7b50f0 feat(adapters): signin-with-apple-style (OAuth2 + JWT client-secret + id_token + JWKS) — Wave A
  • c507089 feat(adapters): slack-style (Web API chat.postMessage/conversations + signing-secret webhooks) — Wave B
  • 0c22dea feat(adapters): square-style (payments + catalog + OAuth + webhook hmac) — Wave D
  • 39e8136 feat(adapters): stripe-style Stripe Connect (accounts, account_links, transfers, payouts, Connect webhooks) + lib.star extraction
  • 5833413 feat(adapters): stripe-style auth (token validation + dev bypass) + webhook emission
  • ed7a2ad feat(adapters): stripe-style reference adapter (broader, stateful)
  • 716f095 feat(adapters): tenderly-style (tx simulation+bundle) — catalog tail
  • c6bfdf0 feat(adapters): thegraph-style (subgraph GraphQL entities + schema) — Wave C
  • dc59918 feat(adapters): threads-style adapter (Meta OAuth2 + two-step publish + insights + engagement) — ports REMOVED mock_threads
  • 6501397 feat(adapters): twilio-style (Messages/Calls/Verify + Basic auth + signed webhooks) — Wave B
  • 3c20a79 feat(adapters): twitter-style reference adapter (broader, pure-mock + tweets)
  • b9ba254 feat(adapters): walletconnect-style (v2 pairing/session + auto-approve dApp surface) — Wave C
  • 66fed5f feat(adapters): whatsapp-style (Cloud API send + templates + 24h window + webhooks) — Wave F
  • fbcf7d0 feat(adapters): workday-style (REST workers/compensation + RaaS reports) — Wave E
  • 21f5bbe feat(adapters): xero-style (Accounting OAuth2 + tenants + HMAC webhooks) — catalog tail
  • ef70797 feat(adapters): youtube-style (videos upload/list + playlists) — YouTube Data v3
  • 130358d feat(adapters): zendesk-style (REST v2 tickets/users + cursor + webhooks) — Wave E
  • 854b576 feat(adapters): zuora-style (Billing accounts/subscriptions/usage + ZOQL) — Wave E
  • 8a8f418 feat(catalog): adapter registry (search/show, remote + bundled fallback)
  • 192d583 feat(cli): QC pass — --version flag, help polish, fix stale catalog URLs, scaffold DISCLAIMER
  • b38c45e feat(cli): networking lifecycle commands (proxy/trust/hosts/doctor/clean/service)
  • 05385f8 feat(cli): stunt adapter add|remove|list|update (git + local sources)
  • 5866988 feat(cli): stunt adapter import proto + end-to-end gRPC verify
  • 04f7c5c feat(cli): stunt demo — boots stripe-style, prints stateful curl tour + webhook sink
  • 3440650 feat(cli): stunt init writes a sample manifest
  • b6de6be feat(cli): stunt up serves all services in foreground
  • 5bd27ed feat(contrib): stunt adapter import har
  • 53ba9b7 feat(contrib): stunt adapter import openapi
  • 88c66e9 feat(contrib): stunt adapter lint (synthetic-data guard)
  • 340ea6b feat(contrib): stunt adapter new scaffolds an adapter skeleton
  • b634901 feat(contrib): stunt adapter test (conformance vs traces)
  • eb2fd08 feat(contrib/proto): import .proto -> gRPC adapter (descriptor + grpc section + synthetic handlers)
  • 88a4988 feat(dist): cross-platform packaging via GoReleaser — homebrew_casks + winget
  • 2f7f717 feat(engine): HTTP server applying rules per service
  • 9d1e804 feat(engine): WebSocket adapter support (connection-lifetime handler, recv/send/close)
  • 6b02bd5 feat(engine): gRPC streaming via Starlark stream API (server/client/bidi)
  • 807c6df feat(engine): mount adapters as stateful services
  • 1ebe275 feat(engine): resolve git-ref adapters at load (cache + fallback to local path)
  • fd761fc feat(engine): serve gRPC for adapters (descriptor + Starlark handlers)
  • dd27b98 feat(engine): subdomain mode runs engine behind the TLS proxy
  • 66d929a feat(graphql): adapter graphql section + executor + HTTP endpoint + DoS limits
  • 4e67770 feat(grpcsim): dynamic gRPC serving from a FileDescriptorSet
  • b64744a feat(grpcsim): streaming ServiceDesc (server/client/bidi)
  • 28305f2 feat(llm-operability): AGENTS.md + 'stunt llm' command + JSON output (catalog/plan/doctor)
  • a1a05bb feat(manifest): types + Load from YAML
  • 9724e89 feat(manifest): validation + stunt plan
  • 4a97fea feat(netutil): /etc/hosts managed-block sync/clean
  • 427616f feat(netutil): local CA generation + platform trust commands
  • d0bce67 feat(netutil/proxy): TLS HTTP/2 reverse-proxy listener (Host/SNI routing)
  • 853c4b7 feat(primitives): SQLite-backed Collection document store
  • a84311a feat(primitives/blob): filesystem-backed blob store
  • 860d230 feat(primitives/clock): deterministic virtual clock + scheduler
  • 616257c feat(primitives/events): webhook emitter with retry
  • 7a0ff5d feat(primitives/gen): named generator registry
  • 562705b feat(primitives/identity): HMAC token issuer + scope simulation
  • 17b3e47 feat(primitives/kv): SQLite-backed namespaced key-value store
  • 6c1eb03 feat(primitives/validator): JSON-Schema validation
  • 4ce3a81 feat(rules): body.template rendering (Evaluate signature + engine body)
  • 4a92915 feat(rules): deterministic seeded Faker wrapper (gofakeit)
  • 751ebf2 feat(rules): first-match-wins evaluation with chance + timeout
  • 4fd2855 feat(rules): method/path-glob/header matching
  • 3a0d192 feat(rules): rule types + deterministic seeded RNG
  • b22eb99 feat(rules): template engine + Request.Body field
  • 8e1d1a6 feat(rules): when.expr conditional gating (expr-lang)
  • 2fe4141 feat(runtime): wire Identity + Events primitives into Starlark builtins + engine
  • eceb002 feat(security): SECURITY.md threat model + README link (codifies the sandbox trust property)
  • 9381432 feat(starlark): embedded Starlark VM + request handler SDK
  • 666a143 fix(adapters): atomic ID generation (store_kv_incr) — fixes concurrency race
  • bb86f8a fix(adapters): revert repeated out-of-scope revenuecat rewrite (2nd time)
  • 652e11e fix(adapters): signin-with-apple robustness — malformed client_secret no longer panics
  • 3dae3bc fix(adapters): twitter-style — dedupe _now/_reverse into lib.star (lint clean)
  • fd9b26f fix(eng): events.Emitter race; value-conversion hardening + round-trip tests; proxy per-backend pooling; starlark unit tests
  • eb001f2 fix(engine): revert out-of-scope revenuecat rewrite; keep _batch dispatch for JSON-RPC
  • bb620a8 fix(graphql): review — introspection type-kind/NonNull/inputFields, variable coercion, error-dedup propagation, top-level recover
  • ce12f69 fix(release): install syft in CI (GoReleaser's sboms pipe needs it on PATH)
  • 206a13e fix(review): WebSocket — concurrent-conn cap, clean shutdown close, send() lists, close() validation, panic logging
  • c3fb52a fix(review): address critical/important review findings
  • 8635859 fix(review): contributor epic — close data-leak paths (har path param, lint scans endpoints/recurses/tokens), openapi $ref+nil, conform timeout
  • 2f36c83 fix(review): gRPC findings (close order, serve error, snake_case req keys, unique handler type, descriptor containment)
  • c441dc1 fix(review): gRPC streaming — gofmt, propagate transport/cancel status codes, ctx wiring, int-as-float64 doc
  • 87e43f5 fix(review): git-distribution findings (option injection, atomic manifest, ref-stable cache, ctx timeouts, clone cleanup)
  • 7d65da1 fix(review): networking findings (hosts injection, shell/XML escaping, atomic hosts write, CA partial-state, sudo gap)
  • 7877cec fix(review): primitives review findings (clock Stop race, validator mutex+no-fileref, blob atomicity, events hardening)
  • 6e7e778 fix(review): proto importer — per-path cycle fix, concrete synthetic values, skip streaming, collision/well-known-types
  • 8259a64 fix(rules): template uses text/template syntax {{ .Request.Body.x }}
  • 70eea26 fix(security): path-traversal in rules body.file + collection seed; load-phase DoS step-limit; gRPC MaxRecvMsgSize; file-read audit
  • 5f8736e fix(ux): deferred dogfood findings — honor tls:false, preserve manifest on add/remove, partial startup, version ldflags, clean shutdown, kv consistency docs
  • 61ad9ec fix(ux): dogfood onboarding findings — plan validates adapters, request logging, init next-steps, builtin/expr/state/config docs, endpoints-scaffold honesty
  • b2eb0f7 fix(ux): dogfood tooling findings — surface gRPC port in up/plan, catalog↔dir alignment + completeness, init rule order, help/doc/clean honesty
  • 7e24dd1 fix(ux): dogfood troubleshooting findings — plan pre-compiles handlers, richer doctor, strict manifest keys, lint dedupe, stunt down lifecycle
  • e3ef908 printify-style: add shop-scoped GET order route for status/tracking polling
  • d26a403 printify/printful adapters: cover the real order-create surface REMOVED calls
  • f38da63 refactor(adapters): shared lib.star preload mechanism + dedup 4 adapters + fix _to_int drift + SECURITY doc-pass
  • 4227ae7 refactor: migrate module path to vanity stuntapi.com/stunt
  • f6d42b5 sponsors: FUNDING.yml (Sponsor button — mirrors wintty config)
  • 8e7a524 test(engine): template+expr end-to-end; docs: rules template/expr
  • ebaa51e test(proxy): WSS passthrough regression (WebSocket over the TLS proxy)
  • 74f941a test+docs(adapters): QC pass — boot-smoke test for all 91 adapters + 3 missing READMEs
  • 4c47efa twitter-style: 280-char + reply-chain fidelity; scrub port-origin fingerprints (#2)