- HTML 71%
- JavaScript 28.3%
- Shell 0.7%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| vendor | ||
| .gitignore | ||
| 404.html | ||
| _headers | ||
| apple-touch-icon.png | ||
| build.sh | ||
| call.js | ||
| derive.js | ||
| disk.js | ||
| favicon.ico | ||
| favicon.png | ||
| favicon.svg | ||
| files.js | ||
| friends.js | ||
| ggjz.png | ||
| group.js | ||
| handshake.js | ||
| harness.mjs | ||
| host.js | ||
| ice.js | ||
| identity.js | ||
| index.html | ||
| LICENSE | ||
| lobby.js | ||
| log.js | ||
| logsync.js | ||
| members.js | ||
| notify.js | ||
| pair.js | ||
| pairs.js | ||
| picture.js | ||
| presence.js | ||
| quota.js | ||
| rate.js | ||
| README.md | ||
| seal.js | ||
| serve.sh | ||
| share.js | ||
| store.js | ||
| stream.js | ||
| sw.js | ||
| test-files.html | ||
| test-friends.html | ||
| test-handshake.html | ||
| test-ice.html | ||
| test-lobby.html | ||
| test-log.html | ||
| test-members.html | ||
| test-pair.html | ||
| test-presence.html | ||
| test-share.html | ||
| test-voice.html | ||
| transfer.js | ||
| voice.js | ||
会う — au.ggjz.org
Voz, tela compartilhada, canais de texto, mensagens diretas e arquivos para um grupo pequeno de amigos. Não há servidor, banco de dados nem cadastro: cada pessoa é um par de chaves guardado no próprio navegador, o grupo é um log assinado que todos os navegadores carregam, e tudo trafega direto de um navegador para o outro por WebRTC.
Uma página estática, um index.html sobre módulos ES. Nada de build, nada de framework.
Rodando localmente
./serve.sh
Isso serve a pasta em https://localhost:8770 com um certificado autoassinado — crypto.subtle
e RTCPeerConnection exigem contexto seguro, e um endereço de LAN sem HTTPS não é um. Aceite o
aviso do navegador uma vez. PLAIN=1 serve por HTTP simples, o que só vale para localhost.
Duas identidades na mesma máquina são duas origens. Abra a página em localhost numa janela
e em 127.0.0.1 na outra (ou 127.0.0.2, e assim por diante) — cada origem cria a própria
chave. Duas abas na mesma origem são a mesma pessoa.
Testes
Onze arquivos test-*.html exercitam os módulos fora da rede, com salas e relay falsos. Abra cada
um no navegador, ou rode os onze de uma vez sem interface:
npm i -D playwright # uma vez
PLAIN=1 PORT=8771 ./serve.sh # noutro terminal
node harness.mjs http://localhost:8771
BROWSER=chromium node harness.mjs http://localhost:8771
O runner não traz o Playwright junto: ele resolve playwright como qualquer outra dependência, e
PLAYWRIGHT=<caminho> aponta para uma instalação que esteja em outro lugar. Os onze precisam
passar no Firefox e no Chromium antes de qualquer mudança ser considerada pronta.
Publicando
./build.sh # monta dist/ — só o que a página serve
.forgejo/workflows/deploy.yml roda isso a cada push na main e envia o dist/ para o
Cloudflare Pages, que é o que responde em au.ggjz.org. Os testes, o runner e este arquivo não
vão para o ar.
Contribuindo
Este repositório é mantido por uma pessoa só, e o git.ggjz.org não aceita cadastro próprio: as
contas vêm por OAuth do ggjz.org. Não há como abrir um pull request de fora — se você quer mexer
no código, mande um email para nostress767@ggjz.org e a gente combina.
Licença
AGPL-3.0-or-later. O que a página usa de terceiros está creditado no botão licenças, no topo da tela de amigos.