implement free plan age verification via Stripe SetupIntent; personalize soul demo greeting with user name and timezone
Dev — Build & local smoke test / build-smoke (pull_request) Successful in 1m49s
Dev — Build & local smoke test / build-smoke (pull_request) Successful in 1m49s
This commit is contained in:
+68
-9
@@ -14,6 +14,10 @@ fn main() -> Void {
|
||||
var turnstileVerified = false;
|
||||
var isOpen = false;
|
||||
var MAX = 10;
|
||||
var _userName = '';
|
||||
var _userTimezone = (typeof Intl !== 'undefined' && Intl.DateTimeFormat)
|
||||
? Intl.DateTimeFormat().resolvedOptions().timeZone
|
||||
: '';
|
||||
|
||||
// ── Supabase auth state ───────────────────────────────────────────────────
|
||||
var supabaseClient = null;
|
||||
@@ -45,6 +49,11 @@ fn main() -> Void {
|
||||
}
|
||||
|
||||
function _onWidgetAuthenticated() {
|
||||
// Capture user name for personalized greeting
|
||||
if (_supabaseSession && _supabaseSession.user) {
|
||||
var _meta = _supabaseSession.user.user_metadata || {};
|
||||
_userName = _meta.full_name || _meta.name || _supabaseSession.user.email || '';
|
||||
}
|
||||
var authPane = document.getElementById('neuron-demo-auth');
|
||||
var gate = document.getElementById('neuron-demo-gate');
|
||||
var msgs = document.getElementById('neuron-demo-messages');
|
||||
@@ -60,10 +69,8 @@ fn main() -> Void {
|
||||
if (session && session.messages && session.messages.length > 0) {
|
||||
session.messages.forEach(function(m) { addMsg(m.role, m.text, true); });
|
||||
} else if (!session.greeted) {
|
||||
addMsg('ai', 'Hey. What is on your mind?', true);
|
||||
session.greeted = true;
|
||||
saveSession(session);
|
||||
}
|
||||
_sendIntroGreeting();
|
||||
}
|
||||
}
|
||||
var inp = document.getElementById('neuron-demo-text');
|
||||
if (inp) inp.focus();
|
||||
@@ -247,10 +254,61 @@ fn main() -> Void {
|
||||
}
|
||||
}
|
||||
|
||||
function _timeOfDay() {
|
||||
var h = new Date().getHours();
|
||||
if (h < 12) return 'morning';
|
||||
if (h < 17) return 'afternoon';
|
||||
if (h < 21) return 'evening';
|
||||
return 'night';
|
||||
}
|
||||
|
||||
function _sendIntroGreeting() {
|
||||
if (session.greeted) return;
|
||||
session.greeted = true;
|
||||
saveSession(session);
|
||||
var accessToken = (_supabaseSession && _supabaseSession.access_token) ? _supabaseSession.access_token : '';
|
||||
fetch('/api/demo', {
|
||||
method: 'POST',
|
||||
headers: {'Content-Type': 'application/json'},
|
||||
body: JSON.stringify({
|
||||
message: '__intro_phase1__',
|
||||
history: [],
|
||||
cf_token: '',
|
||||
uid: session.uid || '',
|
||||
access_token: accessToken,
|
||||
user_name: _userName,
|
||||
user_timezone: _userTimezone,
|
||||
time_of_day: _timeOfDay(),
|
||||
is_return: session.count > 0 ? 'true' : 'false',
|
||||
activated_nodes: [],
|
||||
engram_node_count: 0,
|
||||
questions_remaining: MAX,
|
||||
is_last_question: false
|
||||
})
|
||||
})
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(d) {
|
||||
var reply = d.response || d.reply || d.message || '';
|
||||
if (reply) {
|
||||
addMsg('ai', reply, true);
|
||||
session.messages = session.messages || [];
|
||||
session.messages.push({ role: 'ai', text: reply });
|
||||
saveSession(session);
|
||||
} else {
|
||||
addMsg('ai', 'Hey. What\'s on your mind?', true);
|
||||
}
|
||||
})
|
||||
.catch(function() {
|
||||
addMsg('ai', 'Hey. What\'s on your mind?', true);
|
||||
});
|
||||
}
|
||||
|
||||
window.neuronDemoReset = function() {
|
||||
if (_headerResetInterval) { clearInterval(_headerResetInterval); _headerResetInterval = null; }
|
||||
clearSession();
|
||||
session = { messages: [], count: 0, context: '' };
|
||||
session.uid = 'u' + Date.now().toString(36) + Math.random().toString(36).slice(2, 7);
|
||||
saveSession(session);
|
||||
msgCount = 0;
|
||||
var msgs = document.getElementById('neuron-demo-messages');
|
||||
if (msgs) msgs.innerHTML = '';
|
||||
@@ -258,7 +316,7 @@ fn main() -> Void {
|
||||
if (input) { input.disabled = false; input.placeholder = 'Ask me anything...'; }
|
||||
var btn = document.getElementById('neuron-demo-send');
|
||||
if (btn) btn.disabled = false;
|
||||
addMsg('ai', 'Hey. What is on your mind?', true);
|
||||
_sendIntroGreeting();
|
||||
};
|
||||
|
||||
window.neuronDemoToggle = function() {
|
||||
@@ -277,9 +335,7 @@ fn main() -> Void {
|
||||
if (input) { input.disabled = true; input.placeholder = 'Interaction limit reached'; }
|
||||
}
|
||||
} else if (!session.greeted) {
|
||||
addMsg('ai', 'Hey. What is on your mind?', true);
|
||||
session.greeted = true;
|
||||
saveSession(session);
|
||||
_sendIntroGreeting();
|
||||
}
|
||||
}
|
||||
var input = document.getElementById('neuron-demo-text');
|
||||
@@ -315,8 +371,8 @@ fn main() -> Void {
|
||||
if (gate) gate.style.display = 'none';
|
||||
if (msgs) msgs.style.display = 'flex';
|
||||
if (inputRow) inputRow.style.display = 'flex';
|
||||
addMsg('ai', 'Hey. What is on your mind?', true);
|
||||
updateCountdown();
|
||||
_sendIntroGreeting();
|
||||
var inp = document.getElementById('neuron-demo-text');
|
||||
if (inp) inp.focus();
|
||||
},
|
||||
@@ -454,6 +510,9 @@ fn main() -> Void {
|
||||
cf_token: turnstileVerified && !session._cfSent ? turnstileToken : '',
|
||||
uid: session.uid || '',
|
||||
access_token: accessToken,
|
||||
user_name: _userName,
|
||||
user_timezone: _userTimezone,
|
||||
time_of_day: _timeOfDay(),
|
||||
activated_nodes: activated_nodes,
|
||||
engram_node_count: (session._m && session._m.nodes) ? session._m.nodes.length : 0,
|
||||
questions_remaining: questionsRemaining,
|
||||
|
||||
Reference in New Issue
Block a user