@proveanything/smartlinks-auth-ui 0.5.0 → 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/api.d.ts +8 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/components/AuthUIPreview.d.ts.map +1 -1
- package/dist/components/SmartlinksAuthUI.d.ts.map +1 -1
- package/dist/index.esm.js +45 -8
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +45 -8
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
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
|
-
//
|
|
11515
|
-
return smartlinks__namespace.authKit.sendWhatsApp(this.clientId, {
|
|
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
|
-
//
|
|
14247
|
-
|
|
14248
|
-
const
|
|
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) {
|
|
@@ -15608,11 +15641,12 @@ const AuthUIPreview = ({ customization, enabledProviders = ['email', 'google', '
|
|
|
15608
15641
|
const showGoogle = enabledProviders.includes('google');
|
|
15609
15642
|
const showPhone = enabledProviders.includes('phone');
|
|
15610
15643
|
const showMagicLink = enabledProviders.includes('magic-link');
|
|
15644
|
+
const showWhatsApp = enabledProviders.includes('whatsapp');
|
|
15611
15645
|
// Determine ordered providers (excluding email if in button mode)
|
|
15612
15646
|
const orderedProviders = providerOrder && providerOrder.length > 0
|
|
15613
15647
|
? providerOrder.filter(p => enabledProviders.includes(p) && p !== 'email')
|
|
15614
15648
|
: enabledProviders.filter(p => p !== 'email');
|
|
15615
|
-
const hasOtherProviders = showGoogle || showPhone || showMagicLink;
|
|
15649
|
+
const hasOtherProviders = showGoogle || showPhone || showMagicLink || showWhatsApp;
|
|
15616
15650
|
// Render provider button helper
|
|
15617
15651
|
const renderProviderButton = (provider) => {
|
|
15618
15652
|
if (provider === 'google' && showGoogle) {
|
|
@@ -15624,6 +15658,9 @@ const AuthUIPreview = ({ customization, enabledProviders = ['email', 'google', '
|
|
|
15624
15658
|
if (provider === 'magic-link' && showMagicLink) {
|
|
15625
15659
|
return (jsxRuntime.jsxs("button", { className: "auth-provider-button", disabled: true, children: [jsxRuntime.jsx("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" }) }), jsxRuntime.jsx("span", { children: "Continue with Magic Link" })] }, "magic-link"));
|
|
15626
15660
|
}
|
|
15661
|
+
if (provider === 'whatsapp' && showWhatsApp) {
|
|
15662
|
+
return (jsxRuntime.jsxs("button", { className: "auth-provider-button", disabled: true, style: { background: '#25D366', color: '#fff', borderColor: '#25D366' }, children: [jsxRuntime.jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: jsxRuntime.jsx("path", { d: "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.247-.694.247-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893A11.821 11.821 0 0020.464 3.488" }) }), jsxRuntime.jsx("span", { children: "Continue with WhatsApp" })] }, "whatsapp"));
|
|
15663
|
+
}
|
|
15627
15664
|
if (provider === 'email' && showEmail && emailDisplayMode === 'button') {
|
|
15628
15665
|
return (jsxRuntime.jsxs("button", { className: "auth-provider-button", disabled: true, children: [jsxRuntime.jsx("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" }) }), jsxRuntime.jsx("span", { children: "Continue with Email" })] }, "email"));
|
|
15629
15666
|
}
|