Esta guía cubre cómo instalar y configurar los paquetes de backend de Effectify en tu proyecto Node.js.
Usa tu gestor favorito. Los ejemplos usan npm, pero puedes usar yarn, pnpm o bun.
Integración de Effect con better-auth para Node.js:
npm install @effectify/node-better-auth
Peer Dependencies:
npm install better-auth effect @effect/platform @effect/platform-node
Aplicación completa de autenticación:
npm install @effectify/node-auth-app
Dependencias:
npm install express cors helmet dotenv better-sqlite3
mkdir mi-backend && cd mi-backend
npm init -y
npm install express cors helmet dotenv
npm install -D @types/express @types/cors @types/node typescript ts-node nodemon
Inicializa TypeScript:
tsconfig.json:
{
"compilerOptions": {
"target": "ES2022",
"module": "commonjs",
"lib": ["ES2022"],
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
Scripts en package.json:
{
"scripts": {
"dev": "nodemon --exec ts-node src/index.ts",
"build": "tsc",
"start": "node dist/index.js"
}
}
mkdir mi-fastify-backend && cd mi-fastify-backend
npm init -y
npm install fastify @fastify/cors @fastify/helmet
npm install -D @types/node typescript ts-node nodemon
Configuración básica con Effect:
import Fastify from "fastify"
import { Effect } from "effect"
const fastify = Fastify({ logger: true })
fastify.register(require("@fastify/cors"))
fastify.register(require("@fastify/helmet"))
fastify.get("/health", async () => {
const healthCheck = Effect.succeed({
status: "ok",
timestamp: new Date().toISOString(),
})
return await Effect.runPromise(healthCheck)
})
await fastify.listen({ port: 3000 })
npm i -g @nestjs/cli
nest new mi-nest-backend
cd mi-nest-backend
npm install @effectify/node-better-auth effect
Servicio Effect:
import { Injectable } from "@nestjs/common"
import { Effect } from "effect"
@Injectable()
export class EffectService {
runEffect<A, E>(effect: Effect.Effect<A, E, never>): Promise<A> {
return Effect.runPromise(effect)
}
}