Frontend Facade
Frontend Facade
Seção intitulada “Frontend Facade”Sirva a UI web do Wippy a partir de uma aplicação somente-backend com wippy/facade. O
facade é um shell estático fino: ele carrega o bundle frontend do Wippy Web Host a partir
de uma CDN e o configura a partir de um endpoint JSON que sua aplicação serve — sem etapa
de build de frontend no seu projeto. Branding, temas e feature flags são todos
controlados por parâmetros de dependência.
O que você construirá
Seção intitulada “O que você construirá”Uma aplicação backend que serve a UI do Wippy:
- Um servidor HTTP e um router público.
- A dependência
wippy/facade, conectada a esse servidor e router, com branding personalizado. - Um shell em execução em
/e sua configuração em/api/public/facade/config.
Pré-requisitos
Seção intitulada “Pré-requisitos”-
Um projeto Wippy (clone o app-template, ou
wippy init). -
O facade instalado:
Terminal window wippy add wippy/facadewippy install
Como funciona
Seção intitulada “Como funciona”index.htmlé servido como arquivo estático a partir do seu servidor HTTP.- Ao carregar, ele busca
GET /api/public/facade/config. - Ele verifica o
localStoragepor um token de autenticação, redirecionando paralogin_pathse ausente. - Ele importa o bundle do Web Host a partir da CDN (
facade_url + '/module.js') e chamainitWippyApp(...)com a configuração.
Sua aplicação envia apenas o shell e a configuração; a própria UI vem da CDN.
Dependências
Seção intitulada “Dependências”O facade precisa de duas coisas da sua aplicação: um http.service a partir do qual servir
arquivos, e o http.router no qual seu endpoint de configuração é montado. Todo o resto é
branding opcional com padrões sensatos.
version: "1.0"namespace: app
entries: - name: gateway kind: http.service addr: :8087 lifecycle: auto_start: true
- name: api.public kind: http.router meta: server: app:gateway prefix: /api/public
- name: facade kind: ns.dependency component: wippy/facade parameters: - name: server value: app:gateway - name: router value: app:api.public - name: app_title value: Verify AppO index.html enviado busca /api/public/facade/config, então o prefixo do router
público deve ser /api/public para que o shell padrão encontre sua configuração.
Execute
Seção intitulada “Execute”wippy runO shell é servido na raiz do servidor, e o endpoint de configuração retorna a configuração de runtime:
curl http://localhost:8087/api/public/facade/config{ "mode": "compat", "facade_url": "https://web-host.wippy.ai/webcomponents-1.0.32", "iframe_origin": "https://web-host.wippy.ai", "iframe_url": "https://web-host.wippy.ai/webcomponents-1.0.32/iframe.html?waitForCustomConfig", "module_file": "/module.js", "login_path": "/login.html", "env": { "APP_API_URL": "", "APP_AUTH_API_URL": "", "APP_WEBSOCKET_URL": "" }, "theming": { "host": { "i18n": { "app": { "title": "Verify App", "icon": "wippy:logo", "appName": "Wippy AI" } } } }, "hostConfig": { "showAdmin": true, "allowSelectModel": false, "hideNavBar": false, "session": { "type": "non-persistent" }, "history": "hash" }}Note como o parâmetro app_title aparece como theming.host.i18n.app.title.
Configuração
Seção intitulada “Configuração”Os parâmetros são passados como parameters de dependência (os valores são strings;
valores JSON são strings codificadas em JSON). Os mais comuns:
| Parâmetro | Propósito |
|---|---|
server / router | (obrigatório) Servidor HTTP e router público |
app_title / app_name / app_icon | Branding (o ícone é uma referência Iconify) |
show_admin / hide_nav_bar | Feature flags ("true" / "false") |
login_path | Para onde o shell redireciona quando não há token de autenticação presente |
session_type | non-persistent ou cookie |
history_mode | hash ou browser |
css_variables | String JSON de propriedades CSS customizadas, por exemplo '{"--p-primary":"#6366f1"}' |
fe_facade_url | URL do bundle na CDN (fixada por release do facade; deixe o padrão a menos que sobrescreva) |
Dois valores são derivados em runtime a partir da variável de ambiente PUBLIC_API_URL
em vez de parâmetros: a URL base da API e a URL do WebSocket (http→ws, https→wss).
Se não definida, o navegador recorre a window.location.origin.
- O facade não fornece autenticação. Ele espera um fluxo de autenticação que escreva um
token no
localStorage; sem um, ele redireciona paralogin_path. Combine-o comuserspace/usersou sua própria autenticação. - O bundle da UI carrega a partir da CDN (
fe_facade_url), então a aplicação em execução precisa de acesso de rede de saída para renderizar.
Próximos Passos
Seção intitulada “Próximos Passos”- Hello World — o layout mínimo de projeto
- Authentication — conecte o fluxo de login que o shell espera
- HTTP Endpoints — routers, arquivos estáticos e handlers