@bravophone/webphone 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +49 -3
  2. package/dist/bravophone.mjs +359 -287
  3. package/dist/bravophone.umd.js +43 -7
  4. package/host/_locales/pt_BR/messages.json +1430 -0
  5. package/host/allowed-origins.json +8 -0
  6. package/host/css/bravophoneContactDialer.css +385 -0
  7. package/host/css/dark-theme.css +116 -0
  8. package/host/favicon.ico +0 -0
  9. package/host/fonts/Audiowide-Regular.ttf +0 -0
  10. package/host/fonts/Seguiemj.ttf +0 -0
  11. package/host/images/answer-gray.png +0 -0
  12. package/host/images/answer.png +0 -0
  13. package/host/images/auto-answer-off.png +0 -0
  14. package/host/images/auto-answer-on.png +0 -0
  15. package/host/images/avatar.png +0 -0
  16. package/host/images/bravophone-logo.svg +39 -0
  17. package/host/images/bravotech_Bravotech_logo.png +0 -0
  18. package/host/images/circle-green.png +0 -0
  19. package/host/images/circle-orange.png +0 -0
  20. package/host/images/circle-red.png +0 -0
  21. package/host/images/dialer-button-down.png +0 -0
  22. package/host/images/dialer-button.png +0 -0
  23. package/host/images/gateways/activecampaign.png +0 -0
  24. package/host/images/gateways/agendor.png +0 -0
  25. package/host/images/gateways/appfacilita.png +0 -0
  26. package/host/images/gateways/call-in.png +0 -0
  27. package/host/images/gateways/click-to-call.png +0 -0
  28. package/host/images/gateways/clickup.png +0 -0
  29. package/host/images/gateways/exactsales.png +0 -0
  30. package/host/images/gateways/go-high-lvl.png +0 -0
  31. package/host/images/gateways/groner.png +0 -0
  32. package/host/images/gateways/hubspot.png +0 -0
  33. package/host/images/gateways/kommo.png +0 -0
  34. package/host/images/gateways/moskit.png +0 -0
  35. package/host/images/gateways/nectar.png +0 -0
  36. package/host/images/gateways/pipedrive.png +0 -0
  37. package/host/images/gateways/pipefy.png +0 -0
  38. package/host/images/gateways/piperun.png +0 -0
  39. package/host/images/gateways/ploomes.png +0 -0
  40. package/host/images/gateways/rdstation-crm.png +0 -0
  41. package/host/images/gateways/salesforce.png +0 -0
  42. package/host/images/gateways/sharpspring.png +0 -0
  43. package/host/images/gateways/sunhub.png +0 -0
  44. package/host/images/gateways/vendfly.png +0 -0
  45. package/host/images/gateways/zendesk.png +0 -0
  46. package/host/images/gateways/zoho.png +0 -0
  47. package/host/images/hangup.png +0 -0
  48. package/host/images/hold.png +0 -0
  49. package/host/images/icons/logo-128-christmas-celebration.png +0 -0
  50. package/host/images/icons/logo-128.png +0 -0
  51. package/host/images/icons/logo-16-christmas-celebration.png +0 -0
  52. package/host/images/icons/logo-16.png +0 -0
  53. package/host/images/icons/logo-24-christmas-celebration.png +0 -0
  54. package/host/images/icons/logo-24.png +0 -0
  55. package/host/images/icons/logo-32-christmas-celebration.png +0 -0
  56. package/host/images/icons/logo-32.png +0 -0
  57. package/host/images/icons/logo-48-christmas-celebration.png +0 -0
  58. package/host/images/icons/logo-48.png +0 -0
  59. package/host/images/loading.gif +0 -0
  60. package/host/images/logo-bravotech-white.png +0 -0
  61. package/host/images/logo-bravotech.png +0 -0
  62. package/host/images/logo-inline-christmas-celebration.png +0 -0
  63. package/host/images/logo-inline.png +0 -0
  64. package/host/images/mic-off.png +0 -0
  65. package/host/images/mic-on.png +0 -0
  66. package/host/images/play.png +0 -0
  67. package/host/images/transfer.png +0 -0
  68. package/host/index.html +34 -0
  69. package/host/js/bravophone-noise-suppressor.js +418 -0
  70. package/host/js/bravophone-route-selector.js +1099 -0
  71. package/host/js/libwebphone.js +20 -0
  72. package/host/js/noise/LICENSE-web-noise-suppressor.txt +21 -0
  73. package/host/js/noise/rnnoise-worklet.js +13 -0
  74. package/host/js/noise/rnnoise.wasm +0 -0
  75. package/host/js/noise/rnnoise_simd.wasm +0 -0
  76. package/host/mock-webphone.js +195 -0
  77. package/host/mock.html +54 -0
  78. package/host/popup.js +23 -0
  79. package/host/shim/chrome-shim.js +287 -0
  80. package/host/shim/guest-bridge.js +353 -0
  81. package/host/shim/messages.js +13 -0
  82. package/host/styles/theme-fixes.css +92 -0
  83. package/package.json +4 -2
  84. package/types/index.d.ts +21 -1
package/README.md CHANGED
@@ -178,9 +178,16 @@ Bravophone-SDK/
178
178
  for atualizada:
179
179
 
180
180
  ```bash
181
- npm run sync # copia popup.js, libwebphone.js, css, fonts… (ignora .bak-*)
181
+ npm run sync # host servido de um domínio próprio (public path "/")
182
+ npm run prepare:host # host servido do CDN — é o que vai no pacote publicado
182
183
  ```
183
184
 
185
+ O `prepare:host` reescreve o `public_path` do bundle para
186
+ `cdn.jsdelivr.net/npm/@bravophone/webphone@<versão>/host/`. **Rode-o depois de
187
+ cada bump de versão e antes de publicar**: se a URL apontar para outra versão,
188
+ o pacote busca assets que podem não existir. O `npm test` recusa esse
189
+ descompasso.
190
+
184
191
  O script recusa rodar se um asset obrigatório sumir, em vez de gerar um host quebrado
185
192
  silenciosamente.
186
193
 
@@ -256,7 +263,7 @@ exercitar o postMessage cross-origin de verdade, incluindo a validação de orig
256
263
 
257
264
  | Porta | Papel | Serve |
258
265
  |---|---|---|
259
- | 5173 | site do cliente | `examples/test.html`, carrega `dist/bravophone.umd.cjs` por `<script>`, como no CDN |
266
+ | 5173 | site do cliente | `examples/test.html`, carrega `dist/bravophone.umd.js` por `<script>`, como no CDN |
260
267
  | 5174 | host do webphone | `host/mock.html`, com os headers `frame-ancestors` e `Permissions-Policy` de produção |
261
268
 
262
269
  ### Testar sem SIP nem backend
@@ -330,7 +337,8 @@ um major não quebre a página deles.
330
337
  | Opção | Tipo | Padrão | Descrição |
331
338
  |---|---|---|---|
332
339
  | `token` | `string` | — | Token de sessão emitido pelo seu backend |
333
- | `hostUrl` | `string` | `https://webphone.bravophone.com/embed/` | Origem do webphone |
340
+ | `mode` | `'hosted' \| 'srcdoc'` | `'hosted'` | Como o webphone é carregado — ver abaixo |
341
+ | `hostUrl` | `string` | `https://webphone.bravophone.com/` | Origem do webphone (só no modo `hosted`) |
334
342
  | `position` | `string` | `'bottom-right'` | Canto inicial |
335
343
  | `open` | `boolean` | `false` | Abrir já visível |
336
344
  | `launcher` | `boolean` | `true` | Exibir a aba lateral de abertura |
@@ -361,6 +369,44 @@ Use `frame: 'bar'` se preferir a barra com título, indicador de estado e contro
361
369
  **Janela** — `show()` · `hide()` · `toggle()` · `minimize(force?)` · `move(x, y)` ·
362
370
  `resize(w, h)` · `dock(zone)` · `destroy()` · `isOpen` · `geometry`
363
371
 
372
+ ### Dois modos de carregar o webphone
373
+
374
+ ```js
375
+ Bravophone.init({ token }) // hospedado (padrão)
376
+ Bravophone.init({ token, mode: 'srcdoc' }) // na origem do próprio site
377
+ ```
378
+
379
+ | | `hosted` (padrão) | `srcdoc` |
380
+ |---|---|---|
381
+ | Onde o iframe roda | `webphone.bravophone.com` | origem do próprio site |
382
+ | De onde vêm os arquivos | do host | do CDN, travados nesta versão |
383
+ | CORS dos backends | uma origem fixa, não cresce | **uma entrada por integrador** |
384
+ | Iframe de terceiro | sim — sujeito a bloqueador e política | não |
385
+ | Storage particionado | sim (login por site do cliente) | não |
386
+ | Você precisa manter | o domínio do host | nada |
387
+
388
+ **Antes de oferecer o `srcdoc` a um cliente, a origem dele precisa estar na
389
+ allowlist de CORS de `api.bravophone.com`, `reports.teambravotech.com` e
390
+ `devices.wavoip.com`.** Sem isso o webphone carrega, aparece na tela e não
391
+ registra — o navegador descarta as respostas. Isso é trabalho no **nosso**
392
+ backend: o integrador não tem como liberar CORS de um servidor que não é dele.
393
+
394
+ Há requests com `withCredentials`, então `Access-Control-Allow-Origin: *` não
395
+ serve: a resposta precisa ecoar a origem exata mais
396
+ `Access-Control-Allow-Credentials: true`. O caminho sustentável é a allowlist
397
+ sair de banco, para entrar um cliente ser um registro e não um deploy em três
398
+ serviços.
399
+
400
+ Do lado do integrador, o único requisito é o CSP admitir `cdn.jsdelivr.net` em
401
+ `script-src`, `style-src` e `font-src` — a maioria dos sites não tem CSP
402
+ restritivo e não precisa fazer nada.
403
+
404
+ O que foi verificado em navegador (`examples/srcdoc-validation.html`):
405
+ `getUserMedia` funciona dentro do `srcdoc` **sem `allow=`**, a permissão é
406
+ herdada do topo, `enumerateDevices` traz os rótulos, `localStorage` funciona,
407
+ `document.baseURI` resolve para a página pai e `@font-face` com URL absoluta do
408
+ CDN carrega.
409
+
364
410
  ### A aba de abertura
365
411
 
366
412
  Com a janela fechada, o webphone fica acessível por uma **aba colada na lateral** da