step5-dashboard-proof.mjs135 lines · main
1/**
2 * Step 5 proof: yellow dashboard data from Doltgres (users + methods).
3 *
4 * cd apps/api
5 * BRIVEN_ENGINE_DATABASE_URL=postgres://postgres:devpass@127.0.0.1:5434/briven_engine?sslmode=disable \
6 * BRIVEN_DATA_PLANE_URL=postgres://postgres:devpass@127.0.0.1:5434/postgres?sslmode=disable \
7 * bun scripts/step5-dashboard-proof.mjs
8 */
9
10process.env.BRIVEN_AUTH_CORE_ENABLED = 'true';
11process.env.BRIVEN_ENV = 'development';
12process.env.BRIVEN_ENGINE_DATABASE_URL =
13 process.env.BRIVEN_ENGINE_DATABASE_URL ??
14 'postgres://postgres:devpass@127.0.0.1:5434/briven_engine?sslmode=disable';
15process.env.BRIVEN_DATA_PLANE_URL =
16 process.env.BRIVEN_DATA_PLANE_URL ??
17 'postgres://postgres:devpass@127.0.0.1:5434/postgres?sslmode=disable';
18
19const { ensureBrivenEngineDatabase } = await import(
20 '../src/services/auth-core/ensure-db.ts'
21);
22const { initAuthCoreSdk } = await import('../src/services/auth-core/engine.ts');
23const { signUpEmailPassword } = await import(
24 '../src/services/auth-core/emailpassword.ts'
25);
26const { createEngineSession } = await import(
27 '../src/services/auth-core/native-session.ts'
28);
29const { createPasswordlessCode, consumePasswordlessCode } = await import(
30 '../src/services/auth-core/passwordless.ts'
31);
32const { signInUpWithThirdPartyProfile } = await import(
33 '../src/services/auth-core/thirdparty.ts'
34);
35const { getBrivenEngineDashboard } = await import(
36 '../src/services/auth-core/dashboard.ts'
37);
38const { listBrivenEngineUsers } = await import(
39 '../src/services/auth-core/users.ts'
40);
41
42console.log('=== Step 5: dashboard data from Doltgres ===');
43
44if (!(await ensureBrivenEngineDatabase()).ok) process.exit(1);
45if (!(await initAuthCoreSdk())) process.exit(1);
46
47const projectId = 'p_step5_local';
48const email = `step5_${Date.now()}@example.com`;
49
50// Seed a few real rows (password + SMS + google)
51const su = await signUpEmailPassword({
52 email,
53 password: 'Step5Test!Pass99',
54 projectId,
55});
56if (su.status !== 'OK') {
57 console.error('FAIL signup', su);
58 process.exit(1);
59}
60await createEngineSession({
61 userId: su.user.id,
62 tenantId: su.user.tenantId,
63});
64
65const pl = await createPasswordlessCode({
66 phoneNumber: `+1555${String(Date.now()).slice(-7)}`,
67 projectId,
68 flowType: 'USER_INPUT_CODE',
69});
70if (pl.status === 'OK' && pl.userInputCode) {
71 await consumePasswordlessCode({
72 preAuthSessionId: pl.preAuthSessionId,
73 deviceId: pl.deviceId,
74 userInputCode: pl.userInputCode,
75 projectId,
76 });
77}
78
79await signInUpWithThirdPartyProfile({
80 profile: {
81 thirdPartyId: 'google',
82 thirdPartyUserId: `step5-g-${Date.now()}`,
83 email: `step5_g_${Date.now()}@example.com`,
84 emailVerified: true,
85 },
86 projectId,
87});
88
89const dash = await getBrivenEngineDashboard();
90const users = await listBrivenEngineUsers({ limit: 50 });
91
92console.log('dashboard', {
93 ok: dash.ok,
94 storage: dash.storage,
95 database: dash.database,
96 counts: dash.counts,
97 methods: dash.methods,
98 recipesLoaded: dash.recipesLoaded,
99 recentUsers: dash.recentUsers.length,
100});
101console.log(
102 'users sample',
103 users.users.slice(0, 5).map((u) => ({
104 id: u.id,
105 emails: u.emails,
106 phones: u.phoneNumbers,
107 tenantId: u.tenantId,
108 storage: u.storage,
109 })),
110);
111
112const ok =
113 dash.ok &&
114 dash.storage === 'doltgres' &&
115 dash.database === 'briven_engine' &&
116 dash.counts.users >= 3 &&
117 dash.counts.sessions >= 1 &&
118 dash.methods.emailPassword === true &&
119 dash.methods.passwordlessSms === true &&
120 users.users.some((u) => u.emails.includes(email)) &&
121 users.storage === 'doltgres';
122
123if (!ok) {
124 console.error('FAIL step 5 criteria');
125 process.exit(1);
126}
127
128console.log('');
129console.log('✔ STEP 5 PROOF OK');
130console.log(' storage: Doltgres (briven_engine)');
131console.log(' dashboard counts match real tables');
132console.log(' methods flags present');
133console.log(' recent users list non-empty');
134console.log(' yellow UI wired via /v1/auth-core/dashboard + /users');
135process.exit(0);