@proveanything/smartlinks-auth-ui 0.5.1 → 0.5.2

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.
package/dist/index.js CHANGED
@@ -11509,10 +11509,14 @@ class AuthAPI {
11509
11509
  return smartlinks__namespace.authKit.verifyMagicLink(this.clientId, token);
11510
11510
  }
11511
11511
  // ============= WhatsApp =============
11512
- async sendWhatsApp(redirectUrl, phoneNumber) {
11512
+ async sendWhatsApp(redirectUrl, phoneNumber, reply) {
11513
11513
  // phoneNumber is optional — backend extracts it from the inbound WhatsApp webhook.
11514
- // Cast keeps us forward-compatible with the relaxed backend schema.
11515
- return smartlinks__namespace.authKit.sendWhatsApp(this.clientId, { phoneNumber: phoneNumber ?? '', redirectUrl });
11514
+ // `reply`, when provided, is sent back to the user via WhatsApp on successful verification.
11515
+ return smartlinks__namespace.authKit.sendWhatsApp(this.clientId, {
11516
+ phoneNumber: phoneNumber ?? '',
11517
+ redirectUrl,
11518
+ ...(reply ? { reply } : {}),
11519
+ });
11516
11520
  }
11517
11521
  async getWhatsAppStatus(token) {
11518
11522
  return smartlinks__namespace.authKit.getWhatsAppStatus(this.clientId, token);
@@ -12843,6 +12847,31 @@ const getActionResultErrorMessage = (result) => {
12843
12847
  details: candidate.details,
12844
12848
  });
12845
12849
  };
12850
+ const interpolateReply = (input, vars) => {
12851
+ if (!input)
12852
+ return input;
12853
+ return input
12854
+ .replace(/\{\{\s*name\s*\}\}/gi, vars.name?.trim() || 'there')
12855
+ .replace(/\{\{\s*clientName\s*\}\}/gi, vars.clientName?.trim() || '')
12856
+ .replace(/\{\{\s*phoneNumber\s*\}\}/gi, vars.phoneNumber?.trim() || '');
12857
+ };
12858
+ const buildWhatsAppReply = (cfg, vars) => {
12859
+ if (!cfg)
12860
+ return undefined;
12861
+ if (cfg.enabled === false)
12862
+ return undefined;
12863
+ const text = interpolateReply(cfg.text, vars);
12864
+ const cta = cfg.cta && cfg.cta.buttonUrl && cfg.cta.buttonLabel
12865
+ ? {
12866
+ body: interpolateReply(cfg.cta.body, vars) || '',
12867
+ buttonLabel: interpolateReply(cfg.cta.buttonLabel, vars) || cfg.cta.buttonLabel,
12868
+ buttonUrl: interpolateReply(cfg.cta.buttonUrl, vars) || cfg.cta.buttonUrl,
12869
+ }
12870
+ : undefined;
12871
+ if (!text && !cta)
12872
+ return undefined;
12873
+ return { ...(text ? { text } : {}), ...(cta ? { cta } : {}) };
12874
+ };
12846
12875
  // Default Smartlinks Google OAuth Client ID (public - safe to expose)
12847
12876
  const DEFAULT_GOOGLE_CLIENT_ID = '696509063554-jdlbjl8vsjt7cr0vgkjkjf3ffnvi3a70.apps.googleusercontent.com';
12848
12877
  // Default Google OAuth proxy URL (hosted on our whitelisted domain)
@@ -13020,7 +13049,7 @@ const checkSilentGoogleSignIn = async (clientId, googleClientId) => {
13020
13049
  });
13021
13050
  };
13022
13051
  // getFriendlyErrorMessage is now imported from ../utils/errorHandling
13023
- const SmartlinksAuthUI = ({ apiEndpoint, clientId, clientName, accountData, onAuthSuccess, onAuthError, onRedirect, enabledProviders = ['email', 'google', 'phone'], initialMode, signupProminence, redirectUrl, theme = 'light', className, customization, skipConfigFetch = false, minimal = false, logger, proxyMode = false, collectionId, disableConfigCache = false, enableSilentGoogleSignIn = false, }) => {
13052
+ const SmartlinksAuthUI = ({ apiEndpoint, clientId, clientName, accountData, onAuthSuccess, onAuthError, onRedirect, enabledProviders = ['email', 'google', 'phone'], initialMode, signupProminence, redirectUrl, theme = 'light', className, customization, skipConfigFetch = false, minimal = false, logger, proxyMode = false, collectionId, disableConfigCache = false, enableSilentGoogleSignIn = false, whatsappReply, }) => {
13024
13053
  // Resolve signup prominence from props, customization, config, or default
13025
13054
  const resolvedSignupProminence = signupProminence || customization?.signupProminence || 'minimal';
13026
13055
  // Determine initial mode based on signupProminence setting
@@ -14243,9 +14272,13 @@ const SmartlinksAuthUI = ({ apiEndpoint, clientId, clientName, accountData, onAu
14243
14272
  try {
14244
14273
  // No ensureAccount and no phone number — the backend creates/links the
14245
14274
  // account from the inbound WhatsApp webhook (sender's number is the proof).
14246
- // displayName is reserved for a future "name on first contact" hook.
14247
- void displayName;
14248
- const result = await api.sendWhatsApp(getRedirectUrl());
14275
+ // Resolve reply config: per-call prop wins, otherwise fall back to AuthKit default.
14276
+ const replyConfig = whatsappReply ?? config?.whatsappReply;
14277
+ const reply = buildWhatsAppReply(replyConfig, {
14278
+ name: displayName,
14279
+ clientName,
14280
+ });
14281
+ const result = await api.sendWhatsApp(getRedirectUrl(), undefined, reply);
14249
14282
  return result;
14250
14283
  }
14251
14284
  catch (err) {