| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- /**
- * Phase 2 local proof: password sign-up + sign-in + session on Doltgres.
- *
- * 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 \
- * BRIVEN_AUTH_CORE_ENABLED=true \
- * bun scripts/step1-password-proof.mjs
- */
- import pg from 'pg';
- // Set env BEFORE importing engine modules that read env at load.
- process.env.BRIVEN_AUTH_CORE_ENABLED = process.env.BRIVEN_AUTH_CORE_ENABLED ?? 'true';
- 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_ENV = process.env.BRIVEN_ENV ?? 'development';
- const { ensureBrivenEngineDatabase } = await import(
- '../src/services/auth-core/ensure-db.ts'
- );
- const { initAuthCoreSdk, probeBrivenEngine } = await import(
- '../src/services/auth-core/engine.ts'
- );
- const { signUpEmailPassword, signInEmailPassword } = await import(
- '../src/services/auth-core/emailpassword.ts'
- );
- const { createEngineSession, getSessionByHandle } = await import(
- '../src/services/auth-core/native-session.ts'
- );
- const { getEnginePool } = await import('../src/services/auth-core/db.ts');
- const email = `step1_${Date.now()}@example.com`;
- const password = 'Step1Test!Pass99';
- const projectId = 'p_step1_local';
- console.log('=== Step 1: password login on Doltgres ===');
- console.log('engine DB', process.env.BRIVEN_ENGINE_DATABASE_URL);
- console.log('email', email);
- console.log('project', projectId);
- // 1) Ensure database exists on Doltgres
- const ensured = await ensureBrivenEngineDatabase();
- console.log('ensure DB', ensured);
- if (!ensured.ok) {
- console.error('FAIL ensure DB');
- process.exit(1);
- }
- if (ensured.host !== 'doltgres' && !String(process.env.BRIVEN_ENGINE_DATABASE_URL).includes('5434')) {
- console.warn('warn: host check', ensured.host);
- }
- // 2) Init schema + pool
- const ok = await initAuthCoreSdk();
- console.log('init engine', ok);
- if (!ok) {
- console.error('FAIL init');
- process.exit(1);
- }
- const probe = await probeBrivenEngine();
- console.log('probe', {
- ok: probe.ok,
- storage: probe.storage,
- message: probe.message,
- schemaReady: probe.schemaReady,
- });
- if (!probe.ok) {
- console.error('FAIL probe');
- process.exit(1);
- }
- // 3) Sign up
- const signup = await signUpEmailPassword({
- email,
- password,
- projectId,
- });
- console.log('signup', signup);
- if (signup.status !== 'OK') {
- console.error('FAIL signup');
- process.exit(1);
- }
- // 4) Sign in
- const signin = await signInEmailPassword({
- email,
- password,
- projectId,
- });
- console.log('signin', signin);
- if (signin.status !== 'OK') {
- console.error('FAIL signin');
- process.exit(1);
- }
- // 5) Wrong password must fail
- const bad = await signInEmailPassword({
- email,
- password: 'wrong-password',
- projectId,
- });
- console.log('wrong password', bad.status);
- if (bad.status === 'OK') {
- console.error('FAIL: wrong password accepted');
- process.exit(1);
- }
- // 6) Session row on Doltgres
- const session = await createEngineSession({
- userId: signin.user.id,
- tenantId: signin.user.tenantId,
- });
- console.log('session handle', session.sessionHandle);
- // Phase 2: cookie value (accessToken) must equal handle for /session/me
- if (session.accessToken !== session.sessionHandle) {
- console.error('FAIL: accessToken must equal sessionHandle for cookie lookup');
- process.exit(1);
- }
- const loaded = await getSessionByHandle(session.sessionHandle);
- console.log('session loaded', loaded);
- if (!loaded || loaded.userId !== signin.user.id) {
- console.error('FAIL session not in Doltgres');
- process.exit(1);
- }
- // Cookie-style extract + verify (no HTTP server)
- const { extractSessionHandle } = await import(
- '../src/services/auth-core/session.ts'
- );
- const fromCookie = extractSessionHandle({
- cookieHeader: `sAccessToken=${encodeURIComponent(session.sessionHandle)}`,
- });
- if (fromCookie !== session.sessionHandle) {
- console.error('FAIL cookie extract', fromCookie);
- process.exit(1);
- }
- // 7) Direct SQL proof
- const pool = getEnginePool();
- const users = await pool.query(
- `SELECT id, email, tenant_id FROM be_users WHERE email = $1`,
- [email],
- );
- const sessions = await pool.query(
- `SELECT session_handle, user_id FROM be_sessions WHERE user_id = $1`,
- [signin.user.id],
- );
- console.log('SQL users', users.rows);
- console.log('SQL sessions count', sessions.rowCount, sessions.rows);
- // Refuse if somehow not on expected local doltgres port (localhost proof)
- const host = new URL(process.env.BRIVEN_ENGINE_DATABASE_URL).hostname;
- if (host === 'postgres') {
- console.error('FAIL: stock postgres host forbidden');
- process.exit(1);
- }
- console.log('');
- console.log('✔ PHASE 2 LOCAL PROOF OK');
- console.log(' storage: Doltgres (briven_engine)');
- console.log(' sign-up: OK');
- console.log(' sign-in: OK');
- console.log(' wrong password rejected: OK');
- console.log(' session row: OK');
- console.log(' cookie handle = session handle: OK');
- console.log(' userId:', signin.user.id);
- console.log(' tenantId:', signin.user.tenantId);
- process.exit(0);
|