@getflect/sdk
v0.1.0
Published
Flect SDK — resolve infrastructure bindings into official ecosystem clients
Maintainers
Readme
@getflect/sdk
Resolve infrastructure bindings into official ecosystem clients. You learn
one thing — createEnv() — and get back the real @libsql/client, ioredis,
or @aws-sdk/client-s3 object. No broker, manifest, provider, or credential
ever appears in your code.
Quick start
import { createEnv } from "@getflect/sdk"
const env = createEnv()
const db = await env.db("DB") // @libsql/client
const cache = await env.kv("CACHE") // ioredis
const files = await env.store("FILES") // @aws-sdk/client-s3
// From here it's the vendor ecosystem — Flect is out of the way.
import { drizzle } from "drizzle-orm/libsql"
const orm = drizzle(db)The SDK ships no runtime dependencies. Install only the client(s) you bind:
pnpm add @getflect/sdk @libsql/client # + ioredis / @aws-sdk/client-s3 as neededHow it resolves
createEnv() does no I/O. On first use, each binding is resolved to a manifest
(cached until it nears expiry), then the matching factory builds the official
client. Clients are cached per binding and rebuilt when credentials rotate.
- Production / CI — set
FLECT_BROKER_URL(andFLECT_TOKEN); bindings resolve through the Binding Broker. - Local development — with no broker URL configured, the SDK reads static
manifests from
flect.local.json(orFLECT_LOCAL_CONFIG). Same API, no control plane:
// flect.local.json
{
"bindings": {
"DB": { "kind": "database", "provider": "libsql", "connection": { "url": ":memory:" } },
"CACHE": { "kind": "kv", "provider": "redis", "connection": { "url": "redis://localhost:6379" } }
}
}You can also inject config directly: createEnv({ local: { bindings: { … } } }).
Errors
Every failure is a FlectError with a stable code you can branch on:
BINDING_NOT_FOUND, UNAUTHORIZED, FORBIDDEN, PROVIDER_NOT_SUPPORTED,
PROVIDER_UNAVAILABLE, MANIFEST_INVALID, MANIFEST_EXPIRED,
CLIENT_INITIALIZATION_FAILED, BROKER_UNREACHABLE.
Principles
- Bindings are stable; infrastructure is replaceable.
- Applications never construct clients or manage credentials directly.
- The SDK constructs official clients and never proxies infrastructure traffic.
See ../../docs/rfcs/RFC-0008 — SDK API.md for the full contract.
