Connection
Source:
src/Prisma/Connection.ts
A Prisma database connection/API key.
Prisma returns connection credentials only when it creates or rotates a
connection. Alchemy stores those outputs as Redacted values. Changing the
database or name replaces the connection; changing rotate from false to
true keeps the connection ID and requests fresh credentials.
Creating a Connection
Section titled “Creating a Connection”const connection = yield* Prisma.Connection("api", { database: database.databaseId,});Binding to Platforms
Section titled “Binding to Platforms”Pass database URLs to Compute env
const connection = yield* Prisma.Connection("api", { database,});
const app = yield* Prisma.Compute("api", { project, path: "./apps/api", env: { DATABASE_URL: connection.databaseUrl, DIRECT_URL: connection.directConnectionString, },});Use a connection inside an Effect-native Compute app
export default Prisma.Compute( "api", { project, appName: "api", main: import.meta.filename }, Effect.gen(function* () { const db = yield* Prisma.Connect(connection); const sql = yield* SQL.Postgres({ url: db.databaseUrl }); return { fetch: Effect.gen(function* () { const users = yield* sql`SELECT * FROM users`; return yield* HttpServerResponse.json(users); }), }; }).pipe(Effect.provide(Prisma.ConnectBinding)),);Use a connection inside an Effect-native Lambda function
export default AWS.Lambda.Function( "api", { main: import.meta.filename, functionUrl: true }, Effect.gen(function* () { const db = yield* Prisma.Connect(connection); const sql = yield* SQL.Postgres({ url: db.databaseUrl }); return { fetch: Effect.gen(function* () { const users = yield* sql`SELECT * FROM users`; return yield* HttpServerResponse.json(users); }), }; }).pipe(Effect.provide(Prisma.ConnectBinding)),);Use a connection inside an Effect-native Cloudflare Worker
export default Cloudflare.Worker( "api", { main: import.meta.filename, compatibility: { flags: ["nodejs_compat"] } }, Effect.gen(function* () { const db = yield* Prisma.Connect(connection); const sql = yield* SQL.Postgres({ url: db.databaseUrl }); return { fetch: Effect.gen(function* () { const result = yield* sql`SELECT 1 AS ok`; return yield* HttpServerResponse.json(result); }), }; }).pipe(Effect.provide(Prisma.ConnectBinding)),);Rotating Credentials
Section titled “Rotating Credentials”const connection = yield* Prisma.Connection("api", { database, rotate: true,});Connecting over Hyperdrive
Section titled “Connecting over Hyperdrive”const hyperdrive = yield* Cloudflare.Hyperdrive.Connection("api-hd", { origin: connection.origin.as<Prisma.PostgresOrigin>(),});
export default Cloudflare.Worker( "api", { main: import.meta.filename, compatibility: { flags: ["nodejs_compat"] } }, Effect.gen(function* () { const hd = yield* Cloudflare.Hyperdrive.Connect(hyperdrive); const sql = yield* SQL.Postgres({ url: hd.connectionString }); return { fetch: Effect.gen(function* () { const users = yield* sql`SELECT * FROM users`; return yield* HttpServerResponse.json(users); }), }; }).pipe(Effect.provide(Cloudflare.Hyperdrive.ConnectBinding)),);