@proveanything/smartlinks-auth-ui 0.5.1 → 0.5.4
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 +12 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/components/SmartlinksAuthUI.d.ts.map +1 -1
- package/dist/components/WhatsAppAuthForm.d.ts +1 -0
- package/dist/components/WhatsAppAuthForm.d.ts.map +1 -1
- package/dist/index.esm.js +74 -15
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +74 -15
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +42 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/api.d.ts
CHANGED
|
@@ -67,11 +67,22 @@ export declare class AuthAPI {
|
|
|
67
67
|
verifyMagicLink(token: string): Promise<AuthResponse & {
|
|
68
68
|
message: string;
|
|
69
69
|
}>;
|
|
70
|
-
sendWhatsApp(redirectUrl: string, phoneNumber?: string
|
|
70
|
+
sendWhatsApp(redirectUrl: string, phoneNumber?: string, reply?: {
|
|
71
|
+
text?: string;
|
|
72
|
+
cta?: {
|
|
73
|
+
body: string;
|
|
74
|
+
buttonLabel: string;
|
|
75
|
+
buttonUrl: string;
|
|
76
|
+
};
|
|
77
|
+
}, prefillMessage?: string): Promise<{
|
|
71
78
|
waLink: string;
|
|
72
79
|
code: string;
|
|
73
80
|
token: string;
|
|
74
81
|
expiresAt: string;
|
|
82
|
+
sessionKey?: string;
|
|
83
|
+
}>;
|
|
84
|
+
exchangeWhatsAppSession(token: string, sessionKey: string): Promise<AuthResponse & {
|
|
85
|
+
success: boolean;
|
|
75
86
|
}>;
|
|
76
87
|
getWhatsAppStatus(token: string): Promise<{
|
|
77
88
|
ok: boolean;
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAIpF;;;GAGG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,GAAG,CAAyC;gBAExC,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU;IAQxF,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAI7D,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAWnD,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAC7C,cAAc,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACjF,SAAS,CAAC,EAAE,UAAU,GAAG,cAAc,CAAC;KACzC,GAAG,OAAO,CAAC,YAAY,CAAC;IAmBnB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAc7E,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAIvE,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC;IAIlB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BxG,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAmBlH,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAIzG,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IASzH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAIhF,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAStH,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC;IAsB1C;;;;OAIG;IACG,aAAa,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBlG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAQvH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAM3E,YAAY,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SmartlinksAuthUI.d.ts","sourceRoot":"","sources":["../../src/components/SmartlinksAuthUI.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"SmartlinksAuthUI.d.ts","sourceRoot":"","sources":["../../src/components/SmartlinksAuthUI.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAapE,OAAO,KAAK,EAAE,qBAAqB,EAAyF,MAAM,UAAU,CAAC;AAqQ7I,QAAA,MAAM,mBAAmB,QAAa,OAAO,CAAC,IAAI,CAqBjD,CAAC;AAqDF,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAI/B,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAq+D5D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WhatsAppAuthForm.d.ts","sourceRoot":"","sources":["../../src/components/WhatsAppAuthForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,gBAAgB,CAAC;AAExB,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"WhatsAppAuthForm.d.ts","sourceRoot":"","sources":["../../src/components/WhatsAppAuthForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,gBAAgB,CAAC;AAExB,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAClE,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,UAAU,qBAAqB;IAC7B,kGAAkG;IAClG,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9D,qDAAqD;IACrD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/D,qEAAqE;IACrE,UAAU,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACnD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAOD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAqS5D,CAAC"}
|
package/dist/index.esm.js
CHANGED
|
@@ -10982,9 +10982,9 @@ const WhatsAppAuthForm = ({ onSend, onPollStatus, onVerified, onBack, loading =
|
|
|
10982
10982
|
const awaitingNameInput = collectName && !sent;
|
|
10983
10983
|
const awaitingAutoSend = !collectName && !sent;
|
|
10984
10984
|
return (jsxs("form", { className: "auth-form", onSubmit: awaitingNameInput ? handleNameSubmit : (e) => e.preventDefault(), children: [jsxs("div", { className: "auth-form-header", children: [jsx("h2", { className: "auth-form-title", children: "Continue with WhatsApp" }), jsx("p", { className: "auth-form-subtitle", children: sent
|
|
10985
|
-
?
|
|
10985
|
+
? "Tap below to open WhatsApp and send us the pre-filled message — that's how we confirm your number. We'll log you in the moment we receive it."
|
|
10986
10986
|
: awaitingNameInput
|
|
10987
|
-
? '
|
|
10987
|
+
? "We'll open WhatsApp with a pre-filled message. Just hit send to confirm your number — no SMS code, no typing."
|
|
10988
10988
|
: 'Preparing your WhatsApp link…' })] }), displayedError && (jsxs("div", { className: "auth-error", role: "alert", children: [jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: jsx("path", { d: "M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm1 13H7v-2h2v2zm0-3H7V4h2v6z" }) }), displayedError] })), awaitingNameInput && (jsxs(Fragment, { children: [jsxs("div", { className: "auth-form-group", children: [jsx("label", { htmlFor: "waName", className: "auth-label", children: "Name" }), jsx("input", { id: "waName", type: "text", value: displayName, onChange: (e) => setDisplayName(e.target.value), className: "auth-input", placeholder: "John Smith", disabled: loading, autoComplete: "name", autoFocus: true })] }), jsx("button", { type: "submit", className: "auth-button auth-button-primary", disabled: loading, children: loading ? jsx("span", { className: "auth-spinner" }) : 'Continue' })] })), awaitingAutoSend && (jsx("div", { style: { textAlign: 'center', padding: '1.5rem' }, children: jsx("span", { className: "auth-spinner" }) })), sent && (jsxs(Fragment, { children: [!showOnDesktop && (jsxs("a", { href: sent.waLink, target: "_blank", rel: "noopener noreferrer", className: "auth-button auth-button-primary", style: {
|
|
10989
10989
|
display: 'flex',
|
|
10990
10990
|
alignItems: 'center',
|
|
@@ -10993,7 +10993,7 @@ const WhatsAppAuthForm = ({ onSend, onPollStatus, onVerified, onBack, loading =
|
|
|
10993
10993
|
background: '#25D366',
|
|
10994
10994
|
color: '#fff',
|
|
10995
10995
|
textDecoration: 'none',
|
|
10996
|
-
}, children: [jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: 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" }) }), "Open WhatsApp"] })), showOnDesktop && qrDataUrl && (jsxs("div", { style: { textAlign: 'center', margin: '0.75rem 0' }, children: [jsx("div", { style: {
|
|
10996
|
+
}, children: [jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: 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" }) }), "Open WhatsApp & send message"] })), showOnDesktop && qrDataUrl && (jsxs("div", { style: { textAlign: 'center', margin: '0.75rem 0' }, children: [jsx("div", { style: {
|
|
10997
10997
|
display: 'inline-block',
|
|
10998
10998
|
padding: '0.75rem',
|
|
10999
10999
|
background: '#fff',
|
|
@@ -11003,7 +11003,7 @@ const WhatsAppAuthForm = ({ onSend, onPollStatus, onVerified, onBack, loading =
|
|
|
11003
11003
|
fontSize: '0.8125rem',
|
|
11004
11004
|
color: '#6B7280',
|
|
11005
11005
|
marginTop: '0.5rem',
|
|
11006
|
-
}, children: "Scan with your phone \u2014 your WhatsApp will open with a pre-filled message. Just hit send." })] })), showOnDesktop && (jsx("a", { href: sent.waLink, target: "_blank", rel: "noopener noreferrer", className: "auth-button auth-button-secondary", style: { display: 'block', textAlign: 'center', textDecoration: 'none' }, children: "Or
|
|
11006
|
+
}, children: "Scan with your phone \u2014 your WhatsApp will open with a pre-filled message. Just hit send." })] })), showOnDesktop && (jsx("a", { href: sent.waLink, target: "_blank", rel: "noopener noreferrer", className: "auth-button auth-button-secondary", style: { display: 'block', textAlign: 'center', textDecoration: 'none' }, children: "Or send the message from this device" })), jsxs("div", { style: {
|
|
11007
11007
|
marginTop: '1rem',
|
|
11008
11008
|
padding: '0.75rem',
|
|
11009
11009
|
borderRadius: '0.5rem',
|
|
@@ -11012,7 +11012,7 @@ const WhatsAppAuthForm = ({ onSend, onPollStatus, onVerified, onBack, loading =
|
|
|
11012
11012
|
fontSize: '0.8125rem',
|
|
11013
11013
|
color: '#374151',
|
|
11014
11014
|
textAlign: 'center',
|
|
11015
|
-
}, children: [jsx("span", { className: "auth-spinner", style: { marginRight: '0.5rem' } }), "Waiting for your
|
|
11015
|
+
}, children: [jsx("span", { className: "auth-spinner", style: { marginRight: '0.5rem' } }), "Waiting for your message \u2014 we'll log you in automatically\u2026", jsxs("div", { style: { marginTop: '0.25rem', fontSize: '0.75rem', opacity: 0.7 }, children: ["Code: ", jsx("code", { children: sent.code })] })] }), jsx("button", { type: "button", className: "auth-link", onClick: handleSendNew, disabled: loading, style: {
|
|
11016
11016
|
marginTop: '0.75rem',
|
|
11017
11017
|
background: 'none',
|
|
11018
11018
|
border: 'none',
|
|
@@ -11489,10 +11489,19 @@ class AuthAPI {
|
|
|
11489
11489
|
return smartlinks.authKit.verifyMagicLink(this.clientId, token);
|
|
11490
11490
|
}
|
|
11491
11491
|
// ============= WhatsApp =============
|
|
11492
|
-
async sendWhatsApp(redirectUrl, phoneNumber) {
|
|
11492
|
+
async sendWhatsApp(redirectUrl, phoneNumber, reply, prefillMessage) {
|
|
11493
11493
|
// phoneNumber is optional — backend extracts it from the inbound WhatsApp webhook.
|
|
11494
|
-
//
|
|
11495
|
-
|
|
11494
|
+
// `reply`, when provided, is sent back to the user via WhatsApp on successful verification.
|
|
11495
|
+
// `prefillMessage` customizes the message body pre-filled in the wa.me link.
|
|
11496
|
+
return smartlinks.authKit.sendWhatsApp(this.clientId, {
|
|
11497
|
+
phoneNumber: phoneNumber ?? '',
|
|
11498
|
+
redirectUrl,
|
|
11499
|
+
...(reply ? { reply } : {}),
|
|
11500
|
+
...(prefillMessage ? { prefillMessage } : {}),
|
|
11501
|
+
});
|
|
11502
|
+
}
|
|
11503
|
+
async exchangeWhatsAppSession(token, sessionKey) {
|
|
11504
|
+
return smartlinks.authKit.exchangeWhatsAppSession(this.clientId, token, sessionKey);
|
|
11496
11505
|
}
|
|
11497
11506
|
async getWhatsAppStatus(token) {
|
|
11498
11507
|
return smartlinks.authKit.getWhatsAppStatus(this.clientId, token);
|
|
@@ -12823,6 +12832,31 @@ const getActionResultErrorMessage = (result) => {
|
|
|
12823
12832
|
details: candidate.details,
|
|
12824
12833
|
});
|
|
12825
12834
|
};
|
|
12835
|
+
const interpolateReply = (input, vars) => {
|
|
12836
|
+
if (!input)
|
|
12837
|
+
return input;
|
|
12838
|
+
return input
|
|
12839
|
+
.replace(/\{\{\s*name\s*\}\}/gi, vars.name?.trim() || 'there')
|
|
12840
|
+
.replace(/\{\{\s*clientName\s*\}\}/gi, vars.clientName?.trim() || '')
|
|
12841
|
+
.replace(/\{\{\s*phoneNumber\s*\}\}/gi, vars.phoneNumber?.trim() || '');
|
|
12842
|
+
};
|
|
12843
|
+
const buildWhatsAppReply = (cfg, vars) => {
|
|
12844
|
+
if (!cfg)
|
|
12845
|
+
return undefined;
|
|
12846
|
+
if (cfg.enabled === false)
|
|
12847
|
+
return undefined;
|
|
12848
|
+
const text = interpolateReply(cfg.text, vars);
|
|
12849
|
+
const cta = cfg.cta && cfg.cta.buttonUrl && cfg.cta.buttonLabel
|
|
12850
|
+
? {
|
|
12851
|
+
body: interpolateReply(cfg.cta.body, vars) || '',
|
|
12852
|
+
buttonLabel: interpolateReply(cfg.cta.buttonLabel, vars) || cfg.cta.buttonLabel,
|
|
12853
|
+
buttonUrl: interpolateReply(cfg.cta.buttonUrl, vars) || cfg.cta.buttonUrl,
|
|
12854
|
+
}
|
|
12855
|
+
: undefined;
|
|
12856
|
+
if (!text && !cta)
|
|
12857
|
+
return undefined;
|
|
12858
|
+
return { ...(text ? { text } : {}), ...(cta ? { cta } : {}) };
|
|
12859
|
+
};
|
|
12826
12860
|
// Default Smartlinks Google OAuth Client ID (public - safe to expose)
|
|
12827
12861
|
const DEFAULT_GOOGLE_CLIENT_ID = '696509063554-jdlbjl8vsjt7cr0vgkjkjf3ffnvi3a70.apps.googleusercontent.com';
|
|
12828
12862
|
// Default Google OAuth proxy URL (hosted on our whitelisted domain)
|
|
@@ -13000,7 +13034,7 @@ const checkSilentGoogleSignIn = async (clientId, googleClientId) => {
|
|
|
13000
13034
|
});
|
|
13001
13035
|
};
|
|
13002
13036
|
// getFriendlyErrorMessage is now imported from ../utils/errorHandling
|
|
13003
|
-
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, }) => {
|
|
13037
|
+
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, whatsappPrefillMessage, }) => {
|
|
13004
13038
|
// Resolve signup prominence from props, customization, config, or default
|
|
13005
13039
|
const resolvedSignupProminence = signupProminence || customization?.signupProminence || 'minimal';
|
|
13006
13040
|
// Determine initial mode based on signupProminence setting
|
|
@@ -14217,15 +14251,24 @@ const SmartlinksAuthUI = ({ apiEndpoint, clientId, clientName, accountData, onAu
|
|
|
14217
14251
|
setLoading(false);
|
|
14218
14252
|
}
|
|
14219
14253
|
};
|
|
14254
|
+
// Track the most recent WhatsApp send so we can exchange its sessionKey for a real login session.
|
|
14255
|
+
const whatsappSendRef = useRef(null);
|
|
14220
14256
|
const handleWhatsAppSend = async (displayName) => {
|
|
14221
14257
|
setLoading(true);
|
|
14222
14258
|
setError(undefined);
|
|
14223
14259
|
try {
|
|
14224
14260
|
// No ensureAccount and no phone number — the backend creates/links the
|
|
14225
14261
|
// account from the inbound WhatsApp webhook (sender's number is the proof).
|
|
14226
|
-
//
|
|
14227
|
-
|
|
14228
|
-
const
|
|
14262
|
+
// Resolve reply config: per-call prop wins, otherwise fall back to AuthKit default.
|
|
14263
|
+
const replyConfig = whatsappReply ?? config?.whatsappReply;
|
|
14264
|
+
const reply = buildWhatsAppReply(replyConfig, {
|
|
14265
|
+
name: displayName,
|
|
14266
|
+
clientName,
|
|
14267
|
+
});
|
|
14268
|
+
// Resolve outbound prefill message: per-call prop wins, then AuthKit default.
|
|
14269
|
+
const prefillMessage = whatsappPrefillMessage ?? config?.whatsappPrefillMessage;
|
|
14270
|
+
const result = await api.sendWhatsApp(getRedirectUrl(), undefined, reply, prefillMessage);
|
|
14271
|
+
whatsappSendRef.current = { token: result.token, sessionKey: result.sessionKey };
|
|
14229
14272
|
return result;
|
|
14230
14273
|
}
|
|
14231
14274
|
catch (err) {
|
|
@@ -14240,12 +14283,28 @@ const SmartlinksAuthUI = ({ apiEndpoint, clientId, clientName, accountData, onAu
|
|
|
14240
14283
|
const handleWhatsAppPoll = async (token) => {
|
|
14241
14284
|
return api.getWhatsAppStatus(token);
|
|
14242
14285
|
};
|
|
14243
|
-
const handleWhatsAppVerified = (status) => {
|
|
14244
|
-
// Backend returns a redirectUrl containing a magic-link-style token that
|
|
14245
|
-
// completes the login on landing. Treat the same as magic-link verification.
|
|
14286
|
+
const handleWhatsAppVerified = async (status) => {
|
|
14246
14287
|
const target = status.redirectUrl || getRedirectUrl();
|
|
14247
14288
|
setAuthSuccess(true);
|
|
14248
14289
|
setSuccessMessage('WhatsApp verified! Signing you in…');
|
|
14290
|
+
// Exchange the verified WhatsApp proof for a real Auth Kit session token,
|
|
14291
|
+
// so the user is fully logged in (not just verified) and any same-tab
|
|
14292
|
+
// continuation flows (claim, bid, etc.) pick up an authenticated session.
|
|
14293
|
+
const send = whatsappSendRef.current;
|
|
14294
|
+
if (send?.sessionKey) {
|
|
14295
|
+
try {
|
|
14296
|
+
const session = await api.exchangeWhatsAppSession(send.token, send.sessionKey);
|
|
14297
|
+
if (session?.token && session.user) {
|
|
14298
|
+
await auth.login(session.token, session.user, session.accountData, true, getExpirationFromResponse(session));
|
|
14299
|
+
if (!proxyMode) {
|
|
14300
|
+
onAuthSuccess(session.token, session.user, session.accountData);
|
|
14301
|
+
}
|
|
14302
|
+
}
|
|
14303
|
+
}
|
|
14304
|
+
catch (err) {
|
|
14305
|
+
log.warn('WhatsApp session exchange failed, falling back to redirect-only flow:', err);
|
|
14306
|
+
}
|
|
14307
|
+
}
|
|
14249
14308
|
performRedirect(target, 'magic-link');
|
|
14250
14309
|
};
|
|
14251
14310
|
// Show processing state for URL-based auth (verification, magic link, password reset)
|