| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- /**
- * Step 4 proof: first-party proxy keeps cookies on the **app** host.
- *
- * Spins up:
- * - "API" Hono with real Doltgres briven-engine FDI
- * - "App" Hono with /api/auth/* proxy → API FDI
- * Client hits App only; expects Set-Cookie + successful signup.
- *
- * cd apps/api
- * BRIVEN_ENGINE_DATABASE_URL=postgres://postgres:devpass@127.0.0.1:5434/briven_engine?sslmode=disable \
- * BRIVEN_DATA_PLANE_URL=postgres://postgres:devpass@127.0.0.1:5434/postgres?sslmode=disable \
- * bun scripts/step4-proxy-proof.mjs
- */
- process.env.BRIVEN_AUTH_CORE_ENABLED = 'true';
- process.env.BRIVEN_ENV = 'development';
- process.env.BRIVEN_ENGINE_DATABASE_URL =
- process.env.BRIVEN_ENGINE_DATABASE_URL ??
- 'postgres://postgres:devpass@127.0.0.1:5434/briven_engine?sslmode=disable';
- process.env.BRIVEN_DATA_PLANE_URL =
- process.env.BRIVEN_DATA_PLANE_URL ??
- 'postgres://postgres:devpass@127.0.0.1:5434/postgres?sslmode=disable';
- process.env.BRIVEN_API_ORIGIN = 'http://127.0.0.1:3011';
- process.env.BRIVEN_WEB_ORIGIN = 'http://127.0.0.1:3010';
- import { Hono } from 'hono';
- const { ensureBrivenEngineDatabase } = await import(
- '../src/services/auth-core/ensure-db.ts'
- );
- const { initAuthCoreSdk } = await import('../src/services/auth-core/engine.ts');
- const { authCoreFdiRouter } = await import('../src/routes/auth-core-fdi.ts');
- const { proxyBrivenEngineAuth, appAuthPathToFdiSuffix } = await import(
- '../../../packages/auth/src/engine/proxy.ts'
- );
- console.log('=== Step 4: first-party proxy (cookies on app host) ===');
- if (!(await ensureBrivenEngineDatabase()).ok) {
- console.error('FAIL ensure DB');
- process.exit(1);
- }
- if (!(await initAuthCoreSdk())) {
- console.error('FAIL init');
- process.exit(1);
- }
- // Unit-ish path mapping
- const mapped = appAuthPathToFdiSuffix('/api/auth/signup');
- console.log('path map /api/auth/signup →', mapped);
- if (mapped !== '/signup') {
- console.error('FAIL path map');
- process.exit(1);
- }
- // API server (briven-engine FDI)
- const api = new Hono();
- api.route('/', authCoreFdiRouter);
- const apiServer = Bun.serve({
- port: 3011,
- fetch: api.fetch,
- });
- console.log('API on', apiServer.url.href);
- // App server (first-party proxy)
- const app = new Hono();
- app.all('/api/auth/*', async (c) => {
- const res = await proxyBrivenEngineAuth(c.req.raw, {
- apiOrigin: 'http://127.0.0.1:3011',
- projectId: 'p_step4_local',
- proxyMount: '/api/auth',
- });
- return res;
- });
- app.get('/health', (c) => c.json({ app: true }));
- const appServer = Bun.serve({
- port: 3010,
- fetch: app.fetch,
- });
- console.log('APP on', appServer.url.href);
- const email = `step4_${Date.now()}@example.com`;
- const password = 'Step4Test!Pass99';
- // Client talks ONLY to app host
- const res = await fetch('http://127.0.0.1:3010/api/auth/signup', {
- method: 'POST',
- headers: {
- 'content-type': 'application/json',
- 'x-briven-project-id': 'p_step4_local',
- },
- body: JSON.stringify({
- formFields: [
- { id: 'email', value: email },
- { id: 'password', value: password },
- ],
- }),
- });
- const body = await res.json().catch(() => ({}));
- const setCookies =
- typeof res.headers.getSetCookie === 'function'
- ? res.headers.getSetCookie()
- : [res.headers.get('set-cookie')].filter(Boolean);
- console.log('proxy signup status', res.status);
- console.log('proxy body status', body.status);
- console.log('x-briven-proxy', res.headers.get('x-briven-proxy'));
- console.log('set-cookie count', setCookies.length);
- console.log(
- 'set-cookie sample',
- setCookies.map((c) => String(c).slice(0, 40) + '…'),
- );
- const ok =
- res.status === 200 &&
- body.status === 'OK' &&
- res.headers.get('x-briven-proxy') === 'first-party' &&
- setCookies.length >= 1 &&
- setCookies.some((c) => String(c).includes('sAccessToken'));
- // Sign-in through proxy too
- const res2 = await fetch('http://127.0.0.1:3010/api/auth/signin', {
- method: 'POST',
- headers: {
- 'content-type': 'application/json',
- 'x-briven-project-id': 'p_step4_local',
- },
- body: JSON.stringify({
- formFields: [
- { id: 'email', value: email },
- { id: 'password', value: password },
- ],
- }),
- });
- const body2 = await res2.json().catch(() => ({}));
- console.log('proxy signin status', res2.status, body2.status);
- apiServer.stop();
- appServer.stop();
- if (!ok || body2.status !== 'OK') {
- console.error('FAIL step 4', { ok, body, body2 });
- process.exit(1);
- }
- console.log('');
- console.log('✔ STEP 4 PROOF OK');
- console.log(' client hit: http://127.0.0.1:3010/api/auth/* (app host)');
- console.log(' upstream: http://127.0.0.1:3011/v1/auth-core/fdi/* (API)');
- console.log(' Set-Cookie returned on app response: yes');
- console.log(' signup + signin via proxy: OK');
- console.log(' storage still Doltgres (via API)');
- process.exit(0);
|