fix social-app uri
This commit is contained in:
@ -5,6 +5,24 @@
|
|||||||
// Global variables for AI functionality
|
// Global variables for AI functionality
|
||||||
let aiProfileData = null;
|
let aiProfileData = null;
|
||||||
|
|
||||||
|
// Get config from window or use defaults
|
||||||
|
const OAUTH_PDS = window.OAUTH_CONFIG?.pds || 'syu.is';
|
||||||
|
const ADMIN_HANDLE = window.OAUTH_CONFIG?.admin || 'ai.syui.ai';
|
||||||
|
const OAUTH_COLLECTION = window.OAUTH_CONFIG?.collection || 'ai.syui.log';
|
||||||
|
|
||||||
|
// Listen for AI profile data from OAuth app
|
||||||
|
window.addEventListener('aiProfileLoaded', function(event) {
|
||||||
|
console.log('AI profile received from OAuth app:', event.detail);
|
||||||
|
aiProfileData = event.detail;
|
||||||
|
updateAskAIButton();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Check if AI profile data is already available
|
||||||
|
if (window.aiProfileData) {
|
||||||
|
console.log('AI profile already available:', window.aiProfileData);
|
||||||
|
aiProfileData = window.aiProfileData;
|
||||||
|
}
|
||||||
|
|
||||||
// Original functions from working implementation
|
// Original functions from working implementation
|
||||||
function toggleAskAI() {
|
function toggleAskAI() {
|
||||||
const panel = document.getElementById('askAiPanel');
|
const panel = document.getElementById('askAiPanel');
|
||||||
@ -129,11 +147,7 @@ async function loadAndShowProfiles() {
|
|||||||
chatHistory.innerHTML = '<div class="loading-message">Loading profiles...</div>';
|
chatHistory.innerHTML = '<div class="loading-message">Loading profiles...</div>';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const ADMIN_HANDLE = 'ai.syui.ai';
|
const response = await fetch(`https://${OAUTH_PDS}/xrpc/com.atproto.repo.listRecords?repo=${ADMIN_HANDLE}&collection=${OAUTH_COLLECTION}&limit=100`);
|
||||||
const OAUTH_COLLECTION = 'ai.syui.log';
|
|
||||||
const ATPROTO_PDS = 'syu.is';
|
|
||||||
|
|
||||||
const response = await fetch(`https://${ATPROTO_PDS}/xrpc/com.atproto.repo.listRecords?repo=${ADMIN_HANDLE}&collection=${OAUTH_COLLECTION}&limit=100`);
|
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error('Failed to fetch profiles');
|
throw new Error('Failed to fetch profiles');
|
||||||
@ -174,7 +188,7 @@ async function loadAndShowProfiles() {
|
|||||||
<div class="avatar">${avatarElement}</div>
|
<div class="avatar">${avatarElement}</div>
|
||||||
<div class="user-info">
|
<div class="user-info">
|
||||||
<div class="display-name">${profile.value.author.displayName || profile.value.author.handle} ${adminBadge}</div>
|
<div class="display-name">${profile.value.author.displayName || profile.value.author.handle} ${adminBadge}</div>
|
||||||
<div class="handle"><a href="https://web.syu.is/profile/${profile.value.author.handle}" target="_blank" rel="noopener noreferrer">@${profile.value.author.handle}</a></div>
|
<div class="handle"><a href="https://${OAUTH_PDS}/profile/${profile.value.author.handle}" target="_blank" rel="noopener noreferrer">@${profile.value.author.handle}</a></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="message-content">${profile.value.text}</div>
|
<div class="message-content">${profile.value.text}</div>
|
||||||
@ -255,7 +269,7 @@ function addUserMessage(question) {
|
|||||||
<div class="avatar">${userAvatar}</div>
|
<div class="avatar">${userAvatar}</div>
|
||||||
<div class="user-info">
|
<div class="user-info">
|
||||||
<div class="display-name">${userDisplay}</div>
|
<div class="display-name">${userDisplay}</div>
|
||||||
<div class="handle"><a href="https://web.syu.is/profile/${userHandle}" target="_blank" rel="noopener noreferrer">@${userHandle}</a></div>
|
<div class="handle"><a href="https://${OAUTH_PDS}/profile/${userHandle}" target="_blank" rel="noopener noreferrer">@${userHandle}</a></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="message-content">${question}</div>
|
<div class="message-content">${question}</div>
|
||||||
@ -318,7 +332,7 @@ function showInitialGreeting() {
|
|||||||
<div class="avatar">${avatarElement}</div>
|
<div class="avatar">${avatarElement}</div>
|
||||||
<div class="user-info">
|
<div class="user-info">
|
||||||
<div class="display-name">${aiProfileData.displayName}</div>
|
<div class="display-name">${aiProfileData.displayName}</div>
|
||||||
<div class="handle"><a href="https://web.syu.is/profile/${aiProfileData.handle}" target="_blank" rel="noopener noreferrer">@${aiProfileData.handle}</a></div>
|
<div class="handle"><a href="https://${OAUTH_PDS}/profile/${aiProfileData.handle}" target="_blank" rel="noopener noreferrer">@${aiProfileData.handle}</a></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="message-content">Hello! I'm an AI assistant trained on this blog's content. I can answer questions about the articles, provide insights, and help you understand the topics discussed here. What would you like to know?</div>
|
<div class="message-content">Hello! I'm an AI assistant trained on this blog's content. I can answer questions about the articles, provide insights, and help you understand the topics discussed here. What would you like to know?</div>
|
||||||
@ -345,7 +359,7 @@ function showAIIntroduction() {
|
|||||||
<div class="avatar">${avatarElement}</div>
|
<div class="avatar">${avatarElement}</div>
|
||||||
<div class="user-info">
|
<div class="user-info">
|
||||||
<div class="display-name">${aiProfileData.displayName}</div>
|
<div class="display-name">${aiProfileData.displayName}</div>
|
||||||
<div class="handle"><a href="https://web.syu.is/profile/${aiProfileData.handle}" target="_blank" rel="noopener noreferrer">@${aiProfileData.handle}</a></div>
|
<div class="handle"><a href="https://${OAUTH_PDS}/profile/${aiProfileData.handle}" target="_blank" rel="noopener noreferrer">@${aiProfileData.handle}</a></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="message-content">Hello! I'm an AI assistant trained on this blog's content. I can answer questions about the articles, provide insights, and help you understand the topics discussed here. What would you like to know?</div>
|
<div class="message-content">Hello! I'm an AI assistant trained on this blog's content. I can answer questions about the articles, provide insights, and help you understand the topics discussed here. What would you like to know?</div>
|
||||||
@ -361,7 +375,7 @@ function showAIIntroduction() {
|
|||||||
<div class="avatar">${avatarElement}</div>
|
<div class="avatar">${avatarElement}</div>
|
||||||
<div class="user-info">
|
<div class="user-info">
|
||||||
<div class="display-name">${aiProfileData.displayName}</div>
|
<div class="display-name">${aiProfileData.displayName}</div>
|
||||||
<div class="handle"><a href="https://web.syu.is/profile/${aiProfileData.handle}" target="_blank" rel="noopener noreferrer">@${aiProfileData.handle}</a></div>
|
<div class="handle"><a href="https://${OAUTH_PDS}/profile/${aiProfileData.handle}" target="_blank" rel="noopener noreferrer">@${aiProfileData.handle}</a></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="message-content">Please atproto oauth login</div>
|
<div class="message-content">Please atproto oauth login</div>
|
||||||
@ -404,7 +418,7 @@ function handleAIResponse(responseData) {
|
|||||||
<div class="avatar">${avatarElement}</div>
|
<div class="avatar">${avatarElement}</div>
|
||||||
<div class="user-info">
|
<div class="user-info">
|
||||||
<div class="display-name">${aiProfile.displayName}</div>
|
<div class="display-name">${aiProfile.displayName}</div>
|
||||||
<div class="handle"><a href="https://web.syu.is/profile/${aiProfile.handle}" target="_blank" rel="noopener noreferrer">@${aiProfile.handle}</a></div>
|
<div class="handle"><a href="https://${OAUTH_PDS}/profile/${aiProfile.handle}" target="_blank" rel="noopener noreferrer">@${aiProfile.handle}</a></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="message-content">${responseData.answer}</div>
|
<div class="message-content">${responseData.answer}</div>
|
||||||
|
@ -92,6 +92,26 @@
|
|||||||
<p>© {{ config.author }}</p>
|
<p>© {{ config.author }}</p>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Config variables from Hugo
|
||||||
|
window.OAUTH_CONFIG = {
|
||||||
|
{% if config.oauth.pds %}
|
||||||
|
pds: "{{ config.oauth.pds }}",
|
||||||
|
{% else %}
|
||||||
|
pds: "syu.is",
|
||||||
|
{% endif %}
|
||||||
|
{% if config.oauth.admin %}
|
||||||
|
admin: "{{ config.oauth.admin }}",
|
||||||
|
{% else %}
|
||||||
|
admin: "ai.syui.ai",
|
||||||
|
{% endif %}
|
||||||
|
{% if config.oauth.collection %}
|
||||||
|
collection: "{{ config.oauth.collection }}"
|
||||||
|
{% else %}
|
||||||
|
collection: "ai.syui.log"
|
||||||
|
{% endif %}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
<script src="/js/ask-ai.js"></script>
|
<script src="/js/ask-ai.js"></script>
|
||||||
<script src="/js/theme.js"></script>
|
<script src="/js/theme.js"></script>
|
||||||
|
|
||||||
|
@ -87,6 +87,26 @@ export default function App() {
|
|||||||
fetchUserChatRecords()
|
fetchUserChatRecords()
|
||||||
}, [user, agent])
|
}, [user, agent])
|
||||||
|
|
||||||
|
// Expose AI profile data to blog's ask-ai.js
|
||||||
|
useEffect(() => {
|
||||||
|
if (adminData?.profile) {
|
||||||
|
console.log('AI profile loaded:', adminData.profile)
|
||||||
|
|
||||||
|
// Make AI profile data available globally for ask-ai.js
|
||||||
|
window.aiProfileData = {
|
||||||
|
did: adminData.did,
|
||||||
|
handle: adminData.profile.handle,
|
||||||
|
displayName: adminData.profile.displayName,
|
||||||
|
avatar: adminData.profile.avatar
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dispatch event to notify ask-ai.js
|
||||||
|
window.dispatchEvent(new CustomEvent('aiProfileLoaded', {
|
||||||
|
detail: window.aiProfileData
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
}, [adminData])
|
||||||
|
|
||||||
// Event listeners for blog communication
|
// Event listeners for blog communication
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Clear OAuth completion flag once app is loaded
|
// Clear OAuth completion flag once app is loaded
|
||||||
|
@ -13,7 +13,7 @@ function getCorrectWebUrl(avatarUrl) {
|
|||||||
|
|
||||||
// If avatar is from syu.is, use web.syu.is
|
// If avatar is from syu.is, use web.syu.is
|
||||||
if (avatarUrl.includes('bsky.syu.is') || avatarUrl.includes('syu.is')) {
|
if (avatarUrl.includes('bsky.syu.is') || avatarUrl.includes('syu.is')) {
|
||||||
return 'https://web.syu.is'
|
return 'https://syu.is'
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default to bsky.app
|
// Default to bsky.app
|
||||||
@ -151,4 +151,4 @@ export default function RecordList({ title, records, apiConfig, showTitle = true
|
|||||||
))}
|
))}
|
||||||
</section>
|
</section>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ export function getApiConfig(pds) {
|
|||||||
pds: `https://${env.pds}`,
|
pds: `https://${env.pds}`,
|
||||||
bsky: `https://bsky.${env.pds}`,
|
bsky: `https://bsky.${env.pds}`,
|
||||||
plc: `https://plc.${env.pds}`,
|
plc: `https://plc.${env.pds}`,
|
||||||
web: `https://web.${env.pds}`
|
web: `https://${env.pds}`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
@ -36,4 +36,4 @@ export async function getPdsFromHandle(handle) {
|
|||||||
.then(res => res.json())
|
.then(res => res.json())
|
||||||
|
|
||||||
return data.didDoc?.service?.[0]?.serviceEndpoint || initialPds
|
return data.didDoc?.service?.[0]?.serviceEndpoint || initialPds
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user