Cloudflare Workers
August 16, 2025
Info
To view the full example, see the Cloudflare example repository.
import { c15tInstance } from '@c15t/backend/v2';
import { kyselyAdapter } from '@c15t/backend/v2/db/adapters/kysely';
import { Kysely, PostgresDialect } from 'kysely';
import { Pool } from 'pg';
const handler = (env: Env) => {
const instance = c15tInstance({
appName: 'c15t-self-host',
basePath: '/api/c15t',
adapter: kyselyAdapter({
db: new Kysely({
dialect: new PostgresDialect({
pool: new Pool({
connectionString: env.DATABASE_URL,
}),
}),
}),
provider: 'postgresql',
}),
trustedOrigins: ['localhost', 'vercel.app'],
advanced: {
disableGeoLocation: true,
openapi: {
enabled: true,
},
},
logger: {
level: 'error',
},
});
return async (request: Request): Promise<Response> => {
try {
return await instance.handler(request);
} catch (error) {
console.error('Error handling request:', error);
return new Response(
JSON.stringify({
error: 'Internal Server Error',
message: error instanceof Error ? error.message : String(error),
}),
{
status: 500,
headers: { 'Content-Type': 'application/json' },
}
);
}
};
};
export default {
async fetch(request: Request, env: Env): Promise<Response> {
return await handler(env)(request);
},
};