clefbase 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -47,60 +47,14 @@ class SessionStore {
47
47
  catch { /* ignore */ }
48
48
  }
49
49
  }
50
- // ─── GIS script loader ────────────────────────────────────────────────────────
51
- const GIS_SCRIPT_URL = "https://accounts.google.com/gsi/client";
52
- let _gisLoading = null;
53
- function loadGisScript() {
54
- if (typeof window === "undefined") {
55
- return Promise.reject(new types_1.ClefbaseError("signInWithGoogle() requires a browser environment. " +
56
- "Use signInWithGoogleToken(idToken) for server/Node.js contexts.", "UNSUPPORTED_ENVIRONMENT"));
57
- }
58
- if (window.google?.accounts?.id)
59
- return Promise.resolve();
60
- if (_gisLoading)
61
- return _gisLoading;
62
- _gisLoading = new Promise((resolve, reject) => {
63
- if (window.google?.accounts?.id) {
64
- resolve();
65
- return;
66
- }
67
- const existing = document.querySelector(`script[src="${GIS_SCRIPT_URL}"]`);
68
- const onLoad = () => resolve();
69
- const onError = () => {
70
- _gisLoading = null;
71
- reject(new types_1.ClefbaseError("Failed to load the Google Identity Services script. Check your internet connection and Content Security Policy.", "GOOGLE_SCRIPT_LOAD_ERROR"));
72
- };
73
- if (existing) {
74
- existing.addEventListener("load", onLoad, { once: true });
75
- existing.addEventListener("error", onError, { once: true });
76
- return;
77
- }
78
- const script = document.createElement("script");
79
- script.src = GIS_SCRIPT_URL;
80
- script.async = true;
81
- script.defer = true;
82
- script.addEventListener("load", onLoad, { once: true });
83
- script.addEventListener("error", onError, { once: true });
84
- document.head.appendChild(script);
85
- });
86
- return _gisLoading;
87
- }
88
- /**
89
- * Authentication service. Obtain via `getAuth(app)`.
90
- *
91
- * @example
92
- * const auth = getAuth(app);
93
- * const { user } = await auth.signIn("alice@example.com", "pass");
94
- * const unsub = auth.onAuthStateChanged(u => console.log(u));
95
- * unsub();
96
- */
97
50
  class Auth {
98
- constructor(http) {
51
+ constructor(http, gatewayUrl, projectId) {
99
52
  this.http = http;
100
53
  this.store = new SessionStore();
101
54
  this.listeners = [];
102
- /** Cached Google Client ID. `null` = confirmed not configured. `undefined` = not yet fetched. */
103
- this._googleClientId = undefined;
55
+ this._modalCleanup = null;
56
+ this.gatewayUrl = gatewayUrl.replace(/\/+$/, "");
57
+ this.projectId = projectId;
104
58
  this.store.load();
105
59
  }
106
60
  // ── Internals ─────────────────────────────────────────────────────────────
@@ -121,186 +75,218 @@ class Auth {
121
75
  this.notify(result.user);
122
76
  return result;
123
77
  }
124
- async resolveGoogleClientId() {
125
- if (this._googleClientId !== undefined) {
126
- if (!this._googleClientId) {
127
- throw new types_1.ClefbaseError("Google Sign-In is not enabled for this project. " +
128
- "Add a Google Client ID in your Clefbase auth settings.", "GOOGLE_NOT_CONFIGURED");
129
- }
130
- return this._googleClientId;
131
- }
132
- const cfg = await this.http.get("/google/config");
133
- if (!cfg.enabled || !cfg.clientId) {
134
- this._googleClientId = null;
135
- throw new types_1.ClefbaseError("Google Sign-In is not enabled for this project. " +
136
- "Add a Google Client ID in your Clefbase auth settings.", "GOOGLE_NOT_CONFIGURED");
137
- }
138
- this._googleClientId = cfg.clientId;
139
- return this._googleClientId;
140
- }
141
78
  /** @internal — used by Storage to attach the bearer token to upload requests */
142
79
  getAuthHeaders() {
143
80
  const s = this.store.load();
144
81
  return s ? { Authorization: `Bearer ${s.token}` } : {};
145
82
  }
146
83
  // ── Public API ────────────────────────────────────────────────────────────
147
- /** The currently signed-in user, or null. */
148
84
  get currentUser() { return this.store.load()?.user ?? null; }
149
- /** The raw bearer token for the active session, or null. */
150
85
  get currentToken() { return this.store.load()?.token ?? null; }
151
- /**
152
- * Create a new account.
153
- *
154
- * @example
155
- * const { user } = await auth.signUp("alice@example.com", "pass123", {
156
- * displayName: "Alice",
157
- * metadata: { role: "admin" },
158
- * });
159
- */
86
+ // ── Email / password ──────────────────────────────────────────────────────
160
87
  async signUp(email, password, profile) {
161
- const result = await this.http.post("/signup", {
162
- email, password, ...profile,
163
- });
88
+ const result = await this.http.post("/signup", { email, password, ...profile });
164
89
  return this.handleResult(result);
165
90
  }
166
- /**
167
- * Sign in with email + password.
168
- *
169
- * @example
170
- * const { user, token } = await auth.signIn("alice@example.com", "pass");
171
- */
172
91
  async signIn(email, password) {
173
92
  const result = await this.http.post("/signin", { email, password });
174
93
  return this.handleResult(result);
175
94
  }
95
+ // ── Auth UI modal ─────────────────────────────────────────────────────────
176
96
  /**
177
- * Sign in with Google using the Google Identity Services popup or One Tap.
178
- *
179
- * Browser-only. The GIS script (`accounts.google.com/gsi/client`) is loaded
180
- * automatically — no manual `<script>` tag needed.
181
- *
182
- * Without `buttonOptions`, the Google One Tap prompt is shown.
183
- * Pass `{ container }` to render a fully styled Google button instead —
184
- * which is more reliable since One Tap can be suppressed by the browser.
97
+ * Open the Cleforyx hosted auth UI as a modal overlay on top of your page.
98
+ * Handles sign-in via email/password, Google, and magic link seamlessly.
185
99
  *
186
- * Automatically handles new sign-ups: if the Google account has never been
187
- * seen before, a new user record is created server-side.
188
- *
189
- * @throws `ClefbaseError` with code `GOOGLE_NOT_CONFIGURED` if no Client ID
190
- * has been set in the project's auth settings.
191
- * @throws `ClefbaseError` with code `GOOGLE_PROMPT_SUPPRESSED` if One Tap
192
- * could not be displayed (switch to button mode in that case).
193
- * @throws `ClefbaseError` with code `GOOGLE_SIGN_IN_CANCELLED` if the user
194
- * dismissed the popup.
100
+ * The modal closes automatically on successful sign-in and fires `onSuccess`.
195
101
  *
196
102
  * @example
197
- * // One Tap prompt
198
- * const { user } = await auth.signInWithGoogle();
199
- *
200
- * // Branded Google button
201
- * const { user } = await auth.signInWithGoogle({
202
- * container: document.getElementById("google-btn")!,
203
- * theme: "filled_blue",
204
- * size: "large",
205
- * text: "continue_with",
103
+ * auth.openAuthUI({
104
+ * onSuccess: (result) => {
105
+ * console.log("Signed in:", result.user.email);
106
+ * navigate("/dashboard");
107
+ * },
206
108
  * });
207
- *
208
- * // React example
209
- * const btnRef = useRef<HTMLDivElement>(null);
210
- * await auth.signInWithGoogle({ container: btnRef.current! });
211
109
  */
212
- async signInWithGoogle(buttonOptions) {
213
- const clientId = await this.resolveGoogleClientId();
214
- await loadGisScript();
215
- const gis = window.google.accounts.id;
216
- return new Promise((resolve, reject) => {
217
- gis.initialize({
218
- client_id: clientId,
219
- auto_select: false,
220
- cancel_on_tap_outside: true,
221
- callback: async ({ credential }) => {
222
- try {
223
- resolve(await this.signInWithGoogleToken(credential));
224
- }
225
- catch (err) {
226
- reject(err);
227
- }
228
- },
229
- });
230
- if (buttonOptions?.container) {
231
- const { container, theme, size, text, shape, width, locale } = buttonOptions;
232
- gis.renderButton(container, {
233
- type: "standard",
234
- theme: theme ?? "outline",
235
- size: size ?? "large",
236
- text: text ?? "signin_with",
237
- shape: shape ?? "rectangular",
238
- logo_alignment: "left",
239
- width,
240
- locale,
110
+ openAuthUI(options = {}) {
111
+ if (typeof window === "undefined") {
112
+ throw new types_1.ClefbaseError("openAuthUI() requires a browser environment.", "UNSUPPORTED_ENVIRONMENT");
113
+ }
114
+ const { mode = "modal", onSuccess, onDismiss, redirectUrl } = options;
115
+ const currentUrl = window.location.href;
116
+ const returnUrl = redirectUrl ?? currentUrl;
117
+ const params = new URLSearchParams({
118
+ project: this.projectId,
119
+ redirect: returnUrl,
120
+ embed: "popup",
121
+ });
122
+ const authUrl = `${this.gatewayUrl}/login?${params}`;
123
+ if (mode === "redirect") {
124
+ window.location.href = authUrl;
125
+ return;
126
+ }
127
+ // ── Modal mode ──────────────────────────────────────────────────────────
128
+ // Inject styles once
129
+ if (!document.getElementById("cfx-modal-styles")) {
130
+ const style = document.createElement("style");
131
+ style.id = "cfx-modal-styles";
132
+ style.textContent = `
133
+ @keyframes cfxFadeIn { from { opacity: 0 } to { opacity: 1 } }
134
+ @keyframes cfxSlideUp { from { transform: translateY(20px); opacity: 0 } to { transform: none; opacity: 1 } }
135
+ #cfx-auth-overlay {
136
+ position: fixed; inset: 0; z-index: 999999;
137
+ background: rgba(15,23,42,0.6); backdrop-filter: blur(4px);
138
+ display: flex; align-items: center; justify-content: center;
139
+ animation: cfxFadeIn 0.18s ease;
140
+ padding: 16px; box-sizing: border-box;
141
+ }
142
+ #cfx-auth-card {
143
+ background: white; border-radius: 20px;
144
+ box-shadow: 0 24px 64px rgba(0,0,0,0.2);
145
+ overflow: hidden; width: 100%; max-width: 460px;
146
+ animation: cfxSlideUp 0.22s ease; position: relative;
147
+ }
148
+ #cfx-auth-frame {
149
+ width: 100%; height: 560px; border: none; display: block;
150
+ }
151
+ #cfx-auth-close {
152
+ position: absolute; top: 14px; right: 16px;
153
+ background: rgba(0,0,0,0.06); border: none;
154
+ width: 28px; height: 28px; border-radius: 50%;
155
+ font-size: 16px; line-height: 1; cursor: pointer;
156
+ display: flex; align-items: center; justify-content: center;
157
+ color: #64748b; z-index: 1; transition: background 0.15s;
158
+ }
159
+ #cfx-auth-close:hover { background: rgba(0,0,0,0.12); }
160
+ `;
161
+ document.head.appendChild(style);
162
+ }
163
+ // Create overlay
164
+ const overlay = document.createElement("div");
165
+ overlay.id = "cfx-auth-overlay";
166
+ const card = document.createElement("div");
167
+ card.id = "cfx-auth-card";
168
+ const closeBtn = document.createElement("button");
169
+ closeBtn.id = "cfx-auth-close";
170
+ closeBtn.innerHTML = "&#x2715;";
171
+ closeBtn.setAttribute("aria-label", "Close");
172
+ const iframe = document.createElement("iframe");
173
+ iframe.id = "cfx-auth-frame";
174
+ iframe.src = authUrl;
175
+ iframe.setAttribute("allow", "identity-credentials-get");
176
+ card.appendChild(closeBtn);
177
+ card.appendChild(iframe);
178
+ overlay.appendChild(card);
179
+ document.body.appendChild(overlay);
180
+ // Prevent body scroll
181
+ const prevOverflow = document.body.style.overflow;
182
+ document.body.style.overflow = "hidden";
183
+ const cleanup = () => {
184
+ overlay.remove();
185
+ document.body.style.overflow = prevOverflow;
186
+ window.removeEventListener("message", messageHandler);
187
+ this._modalCleanup = null;
188
+ };
189
+ const messageHandler = async (e) => {
190
+ if (e.data?.source !== "cleforyx-auth" || e.data?.type !== "auth_success")
191
+ return;
192
+ const { token, user: rawUser } = e.data;
193
+ if (!token)
194
+ return;
195
+ cleanup();
196
+ // Build a full AuthResult — fetch fresh user data to get expiresAt
197
+ // Use the public /me endpoint (no API key needed, just dbId + bearer)
198
+ try {
199
+ const serverUrl = this.http.getBaseUrl().replace(/\/auth$/, "");
200
+ const res = await fetch(`${serverUrl}/auth/public/me?dbId=${encodeURIComponent(this.projectId)}`, {
201
+ headers: { Authorization: `Bearer ${token}` },
241
202
  });
203
+ const user = res.ok ? await res.json() : rawUser;
204
+ const expiresAt = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString();
205
+ const result = { user, token, session: { token, expiresAt } };
206
+ this.handleResult(result);
207
+ onSuccess?.(result);
242
208
  }
243
- else {
244
- gis.prompt((n) => {
245
- if (n.isNotDisplayed()) {
246
- reject(new types_1.ClefbaseError(`Google One Tap could not be displayed (${n.getNotDisplayedReason()}). ` +
247
- "Pass a { container } element to render a sign-in button instead.", "GOOGLE_PROMPT_SUPPRESSED"));
248
- }
249
- else if (n.isSkippedMoment() || n.isDismissedMoment()) {
250
- reject(new types_1.ClefbaseError("Google Sign-In was cancelled by the user.", "GOOGLE_SIGN_IN_CANCELLED"));
251
- }
252
- });
209
+ catch {
210
+ // Fallback: use the user data from postMessage directly
211
+ const expiresAt = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString();
212
+ const result = { user: rawUser, token, session: { token, expiresAt } };
213
+ this.handleResult(result);
214
+ onSuccess?.(result);
215
+ }
216
+ };
217
+ closeBtn.onclick = () => { cleanup(); onDismiss?.(); };
218
+ overlay.addEventListener("click", (e) => {
219
+ if (e.target === overlay) {
220
+ cleanup();
221
+ onDismiss?.();
253
222
  }
254
223
  });
224
+ window.addEventListener("message", messageHandler);
225
+ this._modalCleanup = cleanup;
226
+ }
227
+ /** Close the auth modal programmatically if open. */
228
+ closeAuthUI() {
229
+ this._modalCleanup?.();
255
230
  }
231
+ // ── Gateway redirect flow ─────────────────────────────────────────────────
256
232
  /**
257
- * Sign in with Google using a raw ID token string.
258
- *
259
- * Use this when you already have a `credential` from Google's callback —
260
- * for example with a custom button implementation, React Native Google
261
- * Sign-In, or any other flow that gives you an ID token directly.
262
- *
263
- * Works in both browser and Node.js environments.
233
+ * Redirect to the Cleforyx auth gateway for OAuth sign-in.
234
+ * Use `openAuthUI()` for a modal experience instead.
264
235
  *
265
236
  * @example
266
- * // Inside a GIS callback
267
- * google.accounts.id.initialize({
268
- * client_id: "...",
269
- * callback: async ({ credential }) => {
270
- * const { user } = await auth.signInWithGoogleToken(credential);
271
- * },
272
- * });
273
- *
274
- * // React Native
275
- * const { idToken } = await GoogleSignin.signIn();
276
- * const { user } = await auth.signInWithGoogleToken(idToken);
237
+ * await auth.signInWithGateway("google");
277
238
  */
278
- async signInWithGoogleToken(idToken) {
279
- if (!idToken || typeof idToken !== "string") {
280
- throw new types_1.ClefbaseError("idToken must be a non-empty string.", "INVALID_ARGUMENT");
239
+ async signInWithGateway(provider, options) {
240
+ if (typeof window === "undefined") {
241
+ throw new types_1.ClefbaseError("signInWithGateway() requires a browser environment.", "UNSUPPORTED_ENVIRONMENT");
281
242
  }
282
- const result = await this.http.post("/google", { idToken });
283
- return this.handleResult(result);
243
+ const redirectUrl = options?.redirectUrl ?? window.location.href;
244
+ const params = new URLSearchParams({ project: this.projectId, redirect: redirectUrl });
245
+ window.location.href = `${this.gatewayUrl}/google?${params}`;
246
+ return new Promise(() => { });
247
+ }
248
+ isGatewayCallbackPending() {
249
+ if (typeof window === "undefined")
250
+ return false;
251
+ return new URLSearchParams(window.location.search).has("cfx_token");
284
252
  }
285
253
  /**
286
- * Returns `true` if Google Sign-In is configured for this project.
287
- * Useful for conditionally rendering a "Sign in with Google" button.
254
+ * Call on every page load to handle the gateway redirect callback.
255
+ * Detects `?cfx_token=` in the URL, validates it, and returns the signed-in user.
288
256
  *
289
257
  * @example
290
- * if (await auth.isGoogleSignInEnabled()) {
291
- * showGoogleButton();
292
- * }
258
+ * useEffect(() => {
259
+ * auth.handleGatewayCallback().then(result => {
260
+ * if (result) navigate("/dashboard");
261
+ * });
262
+ * }, []);
293
263
  */
294
- async isGoogleSignInEnabled() {
264
+ async handleGatewayCallback() {
265
+ if (typeof window === "undefined")
266
+ return null;
267
+ const params = new URLSearchParams(window.location.search);
268
+ const token = params.get("cfx_token");
269
+ if (!token)
270
+ return null;
271
+ // Clean URL
272
+ params.delete("cfx_token");
273
+ params.delete("cfx_project");
274
+ window.history.replaceState({}, "", window.location.pathname + (params.toString() ? `?${params}` : ""));
275
+ // Use /auth/public/me — no API key needed, just dbId + bearer
276
+ const serverUrl = this.http.getBaseUrl().replace(/\/auth$/, "");
295
277
  try {
296
- const cfg = await this.http.get("/google/config");
297
- return cfg.enabled && Boolean(cfg.clientId);
278
+ const res = await fetch(`${serverUrl}/auth/public/me?dbId=${encodeURIComponent(this.projectId)}`, { headers: { Authorization: `Bearer ${token}` } });
279
+ if (!res.ok)
280
+ throw new Error(`${res.status} ${res.statusText}`);
281
+ const user = await res.json();
282
+ const expiresAt = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString();
283
+ return this.handleResult({ user, token, session: { token, expiresAt } });
298
284
  }
299
- catch {
300
- return false;
285
+ catch (err) {
286
+ throw new types_1.ClefbaseError(`Gateway callback failed: ${err.message}`, "GATEWAY_CALLBACK_ERROR");
301
287
  }
302
288
  }
303
- /** Sign out and clear the local session. */
289
+ // ── Session management ────────────────────────────────────────────────────
304
290
  async signOut() {
305
291
  const token = this.currentToken;
306
292
  if (token) {
@@ -311,15 +297,7 @@ class Auth {
311
297
  }
312
298
  this.store.clear();
313
299
  this.notify(null);
314
- // Tell GIS to disable auto-select so the user isn't silently re-signed in
315
- if (typeof window !== "undefined" && window.google?.accounts?.id) {
316
- try {
317
- window.google.accounts.id.disableAutoSelect();
318
- }
319
- catch { /* ignore */ }
320
- }
321
300
  }
322
- /** Re-fetch the current user's profile from the server and update the cache. */
323
301
  async refreshCurrentUser() {
324
302
  const token = this.currentToken;
325
303
  if (!token)
@@ -336,72 +314,45 @@ class Auth {
336
314
  return null;
337
315
  }
338
316
  }
339
- /**
340
- * Update the signed-in user's profile.
341
- *
342
- * @example
343
- * await auth.updateProfile({ displayName: "Bob", metadata: { theme: "dark" } });
344
- */
345
317
  async updateProfile(updates) {
346
318
  const token = this.currentToken;
347
319
  if (!token)
348
320
  throw new Error("No user is currently signed in.");
349
- const user = await this.http.patch("/me", updates, {
350
- Authorization: `Bearer ${token}`,
351
- });
321
+ const user = await this.http.patch("/me", updates, { Authorization: `Bearer ${token}` });
352
322
  const session = this.store.load();
353
323
  if (session)
354
324
  this.store.save({ ...session, user });
355
325
  this.notify(user);
356
326
  return user;
357
327
  }
358
- /** Change password. All other sessions are invalidated server-side. */
359
328
  async changePassword(currentPassword, newPassword) {
360
329
  const token = this.currentToken;
361
330
  if (!token)
362
331
  throw new Error("No user is currently signed in.");
363
332
  await this.http.post("/change-password", { currentPassword, newPassword }, { Authorization: `Bearer ${token}` });
364
333
  }
365
- /** Request a password-reset email. Safe to call even for unregistered addresses. */
366
334
  async sendPasswordResetEmail(email) {
367
335
  await this.http.post("/forgot-password", { email });
368
336
  }
369
- /** Complete a password reset with the token from the reset email. */
370
337
  async confirmPasswordReset(resetToken, newPassword) {
371
338
  await this.http.post("/reset-password", { token: resetToken, newPassword });
372
339
  }
373
- /** Send an email verification code to the currently signed-in user. */
374
340
  async sendEmailVerification() {
375
341
  const token = this.currentToken;
376
342
  if (!token)
377
343
  throw new Error("No user is currently signed in.");
378
344
  await this.http.post("/send-verification", undefined, { Authorization: `Bearer ${token}` });
379
345
  }
380
- /** Verify email with the code the user received. */
381
346
  async verifyEmail(code) {
382
347
  return this.http.post("/verify-email", { code });
383
348
  }
384
- /**
385
- * Subscribe to auth state changes.
386
- * Fires immediately with the current user, then on every change.
387
- * Returns an unsubscribe function.
388
- *
389
- * @example
390
- * const unsubscribe = auth.onAuthStateChanged(user => {
391
- * if (user) console.log("signed in:", user.email);
392
- * else console.log("signed out");
393
- * });
394
- * unsubscribe();
395
- */
396
349
  onAuthStateChanged(callback) {
397
350
  this.listeners.push(callback);
398
351
  try {
399
352
  callback(this.currentUser);
400
353
  }
401
354
  catch { /* ignore */ }
402
- return () => {
403
- this.listeners = this.listeners.filter(cb => cb !== callback);
404
- };
355
+ return () => { this.listeners = this.listeners.filter(cb => cb !== callback); };
405
356
  }
406
357
  }
407
358
  exports.Auth = Auth;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
@@ -764,7 +764,18 @@ function buildLibTs(cfg) {
764
764
  ` *`,
765
765
  ` * Usage:`,
766
766
  ...(database ? [` * import { db } from "@lib/clefBase";`] : []),
767
- ...(auth ? [` * import { auth } from "@lib/clefBase";`] : []),
767
+ ...(auth ? [
768
+ ` * import { auth } from "@lib/clefBase";`,
769
+ ` *`,
770
+ ` * // Email / password`,
771
+ ` * const { user } = await auth.signIn("alice@example.com", "pass");`,
772
+ ` *`,
773
+ ` * // Google sign-in — add this to your root component / entry point:`,
774
+ ` * await auth.handleGatewayCallback(); // handles ?cfx_token= on return`,
775
+ ` *`,
776
+ ` * // On sign-in button click:`,
777
+ ` * await auth.signInWithGateway("google");`,
778
+ ] : []),
768
779
  ...(storage ? [` * import { storage } from "@lib/clefBase";`] : []),
769
780
  ...(fns ? [
770
781
  ` * import { fns, httpsCallable } from "@lib/clefBase";`,
@@ -804,6 +815,20 @@ function buildLibTs(cfg) {
804
815
  lines.push(`/** Clefbase Auth — sign up, sign in, manage sessions. */`);
805
816
  lines.push(`export const auth: Auth = getAuth(app);`);
806
817
  lines.push("");
818
+ lines.push(`/**`);
819
+ lines.push(` * Call this once on every page load (before rendering your UI).`);
820
+ lines.push(` * Detects the ?cfx_token= param the gateway appends after OAuth,`);
821
+ lines.push(` * saves the session, and cleans the URL.`);
822
+ lines.push(` *`);
823
+ lines.push(` * @example`);
824
+ lines.push(` * // React / Next.js — in your root layout or _app.tsx:`);
825
+ lines.push(` * useEffect(() => { auth.handleGatewayCallback(); }, []);`);
826
+ lines.push(` *`);
827
+ lines.push(` * // Vanilla JS — at the top of your entry point:`);
828
+ lines.push(` * await auth.handleGatewayCallback();`);
829
+ lines.push(` */`);
830
+ lines.push(`export { auth };`);
831
+ lines.push("");
807
832
  }
808
833
  if (storage) {
809
834
  lines.push(`/** Clefbase Storage — upload and manage files. */`);
@@ -941,6 +966,8 @@ function printUsageHint(cfg) {
941
966
  if (cfg.services.auth) {
942
967
  console.log();
943
968
  console.log(chalk_1.default.cyan(` const { user } = await auth.signIn("email", "pass");`));
969
+ console.log(chalk_1.default.cyan(` await auth.signInWithGateway("google"); // redirects to auth.cleforyx.com`));
970
+ console.log(chalk_1.default.cyan(` await auth.handleGatewayCallback(); // call on every page load`));
944
971
  }
945
972
  if (cfg.services.storage) {
946
973
  console.log();