@bravophone/webphone 0.1.2 → 0.2.1

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 +64 -5
  2. package/dist/bravophone.mjs +419 -302
  3. package/dist/bravophone.umd.js +66 -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 +98 -0
  83. package/package.json +4 -2
  84. package/types/index.d.ts +30 -2
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
@@ -323,6 +330,15 @@ um major não quebre a página deles.
323
330
 
324
331
  ---
325
332
 
333
+ ## Documentação
334
+
335
+ | Documento | Para quem |
336
+ |---|---|
337
+ | [`docs/api.html`](docs/api.html) | Referência completa da API — abra no navegador |
338
+ | [`docs/PARA-IA.md`](docs/PARA-IA.md) | Contexto para um agente de IA implementar a integração |
339
+ | [`examples/integracao.html`](examples/integracao.html) | Exemplo pronto para colar numa página |
340
+ | [`examples/loader.js`](examples/loader.js) | Carregar o SDK por JavaScript (SPA, Tag Manager) |
341
+
326
342
  ## API
327
343
 
328
344
  ### `Bravophone.init(options)`
@@ -330,7 +346,8 @@ um major não quebre a página deles.
330
346
  | Opção | Tipo | Padrão | Descrição |
331
347
  |---|---|---|---|
332
348
  | `token` | `string` | — | Token de sessão emitido pelo seu backend |
333
- | `hostUrl` | `string` | `https://webphone.bravophone.com/embed/` | Origem do webphone |
349
+ | `mode` | `'hosted' \| 'srcdoc'` | `'hosted'` | Como o webphone é carregado — ver abaixo |
350
+ | `hostUrl` | `string` | `https://webphone.bravophone.com/` | Origem do webphone (só no modo `hosted`) |
334
351
  | `position` | `string` | `'bottom-right'` | Canto inicial |
335
352
  | `open` | `boolean` | `false` | Abrir já visível |
336
353
  | `launcher` | `boolean` | `true` | Exibir a aba lateral de abertura |
@@ -361,6 +378,44 @@ Use `frame: 'bar'` se preferir a barra com título, indicador de estado e contro
361
378
  **Janela** — `show()` · `hide()` · `toggle()` · `minimize(force?)` · `move(x, y)` ·
362
379
  `resize(w, h)` · `dock(zone)` · `destroy()` · `isOpen` · `geometry`
363
380
 
381
+ ### Dois modos de carregar o webphone
382
+
383
+ ```js
384
+ Bravophone.init({ token }) // hospedado (padrão)
385
+ Bravophone.init({ token, mode: 'srcdoc' }) // na origem do próprio site
386
+ ```
387
+
388
+ | | `hosted` (padrão) | `srcdoc` |
389
+ |---|---|---|
390
+ | Onde o iframe roda | `webphone.bravophone.com` | origem do próprio site |
391
+ | De onde vêm os arquivos | do host | do CDN, travados nesta versão |
392
+ | CORS dos backends | uma origem fixa, não cresce | **uma entrada por integrador** |
393
+ | Iframe de terceiro | sim — sujeito a bloqueador e política | não |
394
+ | Storage particionado | sim (login por site do cliente) | não |
395
+ | Você precisa manter | o domínio do host | nada |
396
+
397
+ **Antes de oferecer o `srcdoc` a um cliente, a origem dele precisa estar na
398
+ allowlist de CORS de `api.bravophone.com`, `reports.teambravotech.com` e
399
+ `devices.wavoip.com`.** Sem isso o webphone carrega, aparece na tela e não
400
+ registra — o navegador descarta as respostas. Isso é trabalho no **nosso**
401
+ backend: o integrador não tem como liberar CORS de um servidor que não é dele.
402
+
403
+ Há requests com `withCredentials`, então `Access-Control-Allow-Origin: *` não
404
+ serve: a resposta precisa ecoar a origem exata mais
405
+ `Access-Control-Allow-Credentials: true`. O caminho sustentável é a allowlist
406
+ sair de banco, para entrar um cliente ser um registro e não um deploy em três
407
+ serviços.
408
+
409
+ Do lado do integrador, o único requisito é o CSP admitir `cdn.jsdelivr.net` em
410
+ `script-src`, `style-src` e `font-src` — a maioria dos sites não tem CSP
411
+ restritivo e não precisa fazer nada.
412
+
413
+ O que foi verificado em navegador (`examples/srcdoc-validation.html`):
414
+ `getUserMedia` funciona dentro do `srcdoc` **sem `allow=`**, a permissão é
415
+ herdada do topo, `enumerateDevices` traz os rótulos, `localStorage` funciona,
416
+ `document.baseURI` resolve para a página pai e `@font-face` com URL absoluta do
417
+ CDN carrega.
418
+
364
419
  ### A aba de abertura
365
420
 
366
421
  Com a janela fechada, o webphone fica acessível por uma **aba colada na lateral** da
@@ -456,8 +511,12 @@ const off = Bravophone.on('call:incoming', (call) => { /* … */ })
456
511
  off() // remove o listener
457
512
  ```
458
513
 
459
- `ready` · `state` · `call:incoming` · `call:answered` · `call:ended` · `call:failed` ·
460
- `open` · `close` · `error`. Use `'*'` para receber todos como `{ event, payload }`.
514
+ `ready` · `state` · `call:dialing` · `call:incoming` · `call:answered` ·
515
+ `call:ended` · `resize` · `reveal` · `open` · `close` · `error`.
516
+ Use `'*'` para receber todos como `{ event, payload }`.
517
+
518
+ Uma chamada que não completa chega como `call:ended`: o estado do bundle não
519
+ distingue desligar de falhar.
461
520
 
462
521
  ---
463
522