Skip to content
github-actions[bot] edited this page Oct 8, 2026 · 10 revisions

🔗 Tundra Connect

Vendor API integrations for Deno, Bun, and Node — built on @tundralibs/restler and @tundralibs/guardian

Deno 2.0+ Bun 1.0+ Node.js 22+ Cloudflare Workers Browser

CI codecov

Tundra Connect wraps popular third-party vendor APIs in typed, tested, cross-runtime TypeScript clients. Each connect is an independently versioned package published to JSR under the @tundraconnect scope. Requests and responses are validated at runtime, and failures surface as one typed error class per vendor.

  • Payments: Stripe, PayPal, Razorpay, Dodo Payments
  • Object storage: AWS S3 and S3-compatible stores (Cloudflare R2, MinIO, DigitalOcean Spaces), Google Cloud Storage, Azure Blob Storage
  • Messaging and notifications: Slack, Discord, Telegram, Twilio SMS and voice, SendGrid and Cloudflare email, ntfy push
  • Market data and prediction markets: CoinGecko, Open Exchange Rates, Kalshi, Polymarket
  • Search, data and operations: Algolia, Upstash Redis, Sentry, OpenWeatherMap
  • URL safety: Google Web Risk, URLhaus (abuse.ch)
  • Analytics: Google Analytics 4 server-side events (Measurement Protocol)
  • Cloudflare platform: DNS records and zones, Cloudflare for SaaS custom hostnames, Turnstile token verification

See CONVENTIONS.md for the shared structure and CONTRIBUTING.md for the workflow.

Runs on Deno, Bun and Node; Web-APIs-only, so it also works on Cloudflare Workers (smoke-tested in CI inside workerd) and in the browser (not CI-verified).

📦 Connects

  • Algolia JSR — Typed Algolia Search client: search, save, fetch, delete and browse index records, and wait for indexing tasks to finish.
  • AzureBlob JSR — Typed Azure Blob Storage client with Shared Key or SAS auth: upload, download, list, inspect and delete blobs, including streamed block uploads and downloads for large files.
  • CloudflareDNS JSR — Typed Cloudflare DNS client: list, create, update, replace, delete and batch-edit DNS records in a zone, export the zone as BIND, and look up zones by name.
  • CloudflareEmail JSR — Typed Cloudflare Email Sending client: send transactional email with attachments, validated locally before the request is made.
  • CloudflareSaaS JSR — Typed Cloudflare for SaaS client: create, list, inspect, update and delete custom hostnames with their TLS and ownership validation state, manage the fallback origin, and read the hostname quota.
  • CloudflareTurnstile JSR — Typed Cloudflare Turnstile client: verify a widget token server-side with siteverify, with hostname and action checks, a hard per-call deadline, and failed challenges as answers instead of errors.
  • CoinGecko JSR — Typed CoinGecko client for the demo and pro tiers: coin prices, market data and the full coin list.
  • Discord JSR — Typed Discord client: post messages through a webhook or a bot token, and verify Ed25519-signed interaction webhooks.
  • DodoPayments JSR — Typed Dodo Payments client: create, verify and refund payments, manage subscriptions and plan changes, sync products and discount codes, open the customer portal, and verify Standard Webhooks signatures.
  • GCS JSR — Typed Google Cloud Storage client with bearer or service-account auth: upload, download, list, inspect and delete objects, including resumable streamed uploads for large files.
  • GoogleAnalytics JSR — Typed Google Analytics 4 Measurement Protocol client: send server-side events and validate them against the debug endpoint, with GA4's event, parameter and user-property limits checked before the request is made.
  • GoogleWebRisk JSR — Typed Google Web Risk client: check a URL against Google's malware, phishing and unwanted-software lists with the Lookup API's uris:search, under a hard per-call deadline.
  • Kalshi JSR — Typed Kalshi client: public market data, plus RSA-PSS-signed trading — balance, positions, fills and orders; place, amend and cancel orders.
  • ntfy JSR — Typed ntfy.sh client for publishing push notifications to a topic.
  • OpenExchange JSR — Typed Open Exchange Rates client: latest and historical rates, time series, currency conversion, OHLC data and account usage.
  • OpenWeatherMap JSR — Typed OpenWeatherMap client: current weather and 5-day / 3-hour forecasts by city name or coordinates.
  • PayPal JSR — Typed PayPal client for Orders v2: create, fetch, capture and refund, with automatic OAuth2 tokens, idempotency keys and webhook verification.
  • Polymarket JSR — Typed Polymarket client: Gamma market discovery, CLOB trading with secp256k1/EIP-712 order signing, portfolio positions and value, and gasless split/merge/redeem.
  • Razorpay JSR — Typed Razorpay client: create and fetch orders; capture, fetch and list payments; create payment links; and verify webhook signatures.
  • Resend JSR — Typed Resend client: send single and batch transactional email with idempotency keys, retrieve delivery status, reschedule or cancel scheduled email, and verify Svix-signed webhooks.
  • S3 JSR — Typed S3 client with SigV4 signing for AWS S3, Cloudflare R2, MinIO and DigitalOcean Spaces: object CRUD and listing, plus streamed multipart uploads and downloads.
  • SendGrid JSR — Typed Twilio SendGrid client: send transactional email, inspect API-key scopes, and verify ECDSA-signed event webhooks.
  • Sentry JSR — Typed Sentry API client: list projects; list, fetch and update issues; read issue events; and create releases.
  • Slack JSR — Typed Slack Web API client: post, update and delete messages, list channels and read history, look up users, and verify request signatures.
  • Stripe JSR — Typed Stripe client: create and retrieve PaymentIntents and create customers, with idempotency keys and webhook signature verification.
  • Telegram JSR — Typed Telegram Bot API client for webhook bots: send, edit and delete messages with inline keyboards, answer callback queries, manage the webhook and command menu, and verify and parse webhook updates and commands.
  • Twilio JSR — Typed Twilio client: send SMS/MMS; place, list, update and delete voice calls; and verify webhook signatures.
  • UpstashRedis JSR — Typed Upstash Redis REST client: string, hash and list commands, TTLs, counters and pipelining over plain HTTPS — no TCP connection needed.
  • URLhaus JSR — Typed URLhaus (abuse.ch) client: look up URLs, hosts and payloads in the malware-URL database, with not-listed results instead of errors and a hard per-call deadline.

Each connect's README is its main documentation. The API, error and schema guides for every connect live in the wiki.

🔎 Looking for a familiar SDK?

Each connect covers a focused subset of its vendor's API with no Node-only dependencies. Check the connect's README for exactly which endpoints.

If you use… Reach for
stripe @tundraconnect/stripe
@aws-sdk/client-s3 (also for R2, MinIO, Spaces) @tundraconnect/s3
@google-cloud/storage @tundraconnect/gcs
@google-cloud/web-risk, for URL lookups @tundraconnect/google-web-risk
@azure/storage-blob @tundraconnect/azure-blob
@slack/web-api @tundraconnect/slack
discord.js, for webhook and bot messages @tundraconnect/discord
twilio @tundraconnect/twilio
@sendgrid/mail @tundraconnect/sendgrid
razorpay @tundraconnect/razorpay
algoliasearch @tundraconnect/algolia
@upstash/redis @tundraconnect/upstash-redis
@polymarket/clob-client @tundraconnect/polymarket
cloudflare, for DNS records @tundraconnect/cloudflare-dns
cloudflare, for custom hostnames @tundraconnect/cloudflare-saas
cloudflare, for Turnstile siteverify @tundraconnect/cloudflare-turnstile

🚀 Quick start

deno add jsr:@tundraconnect/openexchange
import { OpenExchange } from '@tundraconnect/openexchange';

const client = new OpenExchange({
  auth: { type: 'CUSTOM', appId: 'your-app-id' },
});
const rates = await client.getRates();

🤝 Community & support

📄 License

MIT License — see LICENSE for details.

Clone this wiki locally