Pular para o conteúdo

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.

Uma aplicação backend que serve a UI do Wippy:

  1. Um servidor HTTP e um router público.
  2. A dependência wippy/facade, conectada a esse servidor e router, com branding personalizado.
  3. Um shell em execução em / e sua configuração em /api/public/facade/config.
  • Um projeto Wippy (clone o app-template, ou wippy init).

  • O facade instalado:

    Terminal window
    wippy add wippy/facade
    wippy install
  1. index.html é servido como arquivo estático a partir do seu servidor HTTP.
  2. Ao carregar, ele busca GET /api/public/facade/config.
  3. Ele verifica o localStorage por um token de autenticação, redirecionando para login_path se ausente.
  4. Ele importa o bundle do Web Host a partir da CDN (facade_url + '/module.js') e chama initWippyApp(...) com a configuração.

Sua aplicação envia apenas o shell e a configuração; a própria UI vem da CDN.

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 App

O 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.

Terminal window
wippy run

O shell é servido na raiz do servidor, e o endpoint de configuração retorna a configuração de runtime:

Terminal window
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.

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âmetroPropósito
server / router(obrigatório) Servidor HTTP e router público
app_title / app_name / app_iconBranding (o ícone é uma referência Iconify)
show_admin / hide_nav_barFeature flags ("true" / "false")
login_pathPara onde o shell redireciona quando não há token de autenticação presente
session_typenon-persistent ou cookie
history_modehash ou browser
css_variablesString JSON de propriedades CSS customizadas, por exemplo '{"--p-primary":"#6366f1"}'
fe_facade_urlURL 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 (httpws, httpswss). 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 para login_path. Combine-o com userspace/users ou 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.