mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-26 01:34:07 +00:00
## Summary Backport outputs from new cloud history endpoint Does: 1. Show history in the Queue 2. Show outputs from prompt execution Does not: 1. Handle appending latest images generated to queue history 2. Making sure that workflow data from images is available from load (requires additional API call to fetch) Most of this PR is: 1. Test fixtures (truncated workflow to test). 2. The service worker so I could verify my changes locally. ## Changes - Add `history_v2` to `history` adapter - Add tests for mapping - Do branded validation for promptIds (suggestion from @DrJKL) - Create a dev environment service worker so we can view cloud hosted images in development. ## Review Focus 1. Is the dev-only service work the right way to do it? It was the easiest I could think of. 4. Are the validation changes too heavy? I can rip them out if needed. ## Screenshots 🎃 https://github.com/user-attachments/assets/1787485a-8d27-4abe-abc8-cf133c1a52aa ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-6288-Feat-history-v2-outputs-2976d73d365081a99864c40343449dcd) by [Unito](https://www.unito.io) --------- Co-authored-by: bymyself <cbyrne@comfy.org>
85 lines
2.6 KiB
TypeScript
85 lines
2.6 KiB
TypeScript
import { watch } from 'vue'
|
|
|
|
import { useCurrentUser } from '@/composables/auth/useCurrentUser'
|
|
import { useFirebaseAuthStore } from '@/stores/firebaseAuthStore'
|
|
|
|
/**
|
|
* Registers the authentication service worker for cloud distribution.
|
|
* Intercepts /api/view requests to add auth headers for browser-native requests.
|
|
*/
|
|
async function registerAuthServiceWorker(): Promise<void> {
|
|
if (!('serviceWorker' in navigator)) {
|
|
return
|
|
}
|
|
|
|
try {
|
|
// Use dev service worker in development mode (rewrites to configured backend URL with token in query param)
|
|
// Use production service worker in production (same-origin requests with Authorization header)
|
|
const swPath = import.meta.env.DEV ? '/auth-dev-sw.js' : '/auth-sw.js'
|
|
const registration = await navigator.serviceWorker.register(swPath)
|
|
|
|
// Configure base URL for dev service worker
|
|
if (import.meta.env.DEV) {
|
|
console.warn('[Auth DEV SW] Registering development serviceworker')
|
|
// Use the same URL that Vite proxy is using
|
|
const baseUrl = __DEV_SERVER_COMFYUI_URL__
|
|
navigator.serviceWorker.controller?.postMessage({
|
|
type: 'SET_BASE_URL',
|
|
baseUrl
|
|
})
|
|
|
|
// Also set base URL when service worker becomes active
|
|
registration.addEventListener('updatefound', () => {
|
|
const newWorker = registration.installing
|
|
newWorker?.addEventListener('statechange', () => {
|
|
if (newWorker.state === 'activated') {
|
|
navigator.serviceWorker.controller?.postMessage({
|
|
type: 'SET_BASE_URL',
|
|
baseUrl
|
|
})
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
setupAuthHeaderProvider()
|
|
setupCacheInvalidation()
|
|
} catch (error) {
|
|
console.error('[Auth SW] Registration failed:', error)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Listens for auth header requests from the service worker
|
|
*/
|
|
function setupAuthHeaderProvider(): void {
|
|
navigator.serviceWorker.addEventListener('message', async (event) => {
|
|
if (event.data.type === 'REQUEST_AUTH_HEADER') {
|
|
const firebaseAuthStore = useFirebaseAuthStore()
|
|
const authHeader = await firebaseAuthStore.getAuthHeader()
|
|
|
|
event.ports[0].postMessage({
|
|
type: 'AUTH_HEADER_RESPONSE',
|
|
authHeader
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Invalidates cached auth header when user logs in/out
|
|
*/
|
|
function setupCacheInvalidation(): void {
|
|
const { isLoggedIn } = useCurrentUser()
|
|
|
|
watch(isLoggedIn, (newValue, oldValue) => {
|
|
if (newValue !== oldValue) {
|
|
navigator.serviceWorker.controller?.postMessage({
|
|
type: 'INVALIDATE_AUTH_HEADER'
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
await registerAuthServiceWorker()
|