c441366f89
- mas_oidc_loopback_go_infra: OAuth2 PKCE + loopback HTTP for desktop login - keyring_token_store_go_infra: persist OAuth tokens in SO keychain - matrix_client_init_go_infra: init mautrix.Client from access_token + whoami Plus go.work workspace including matrix_client_pc sub-repo for shared import path during dev. All 3 fns tagged matrix-mas capability group. Tests: TestMasOidcLoopback (15 cases), TestKeyringTokenStore (5 cases, SKIP on headless), TestMatrixClientInit (6 cases) — all green/skip. Refs: dev/issues/0147-matrix-client-pc-scaffold.md Refs: dataforge/matrix_client_pc commit f28c2b1
5.0 KiB
5.0 KiB
name, kind, lang, domain, version, purity, signature, description, tags, params, output, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | params | output | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | tests | test_file_path | file_path | ||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| matrix_client_init | function | go | infra | 0.1.0 | impure | func MatrixClientInit(cfg MatrixClientInitConfig) (*MatrixClientInitResult, error) | Construye un *mautrix.Client listo para Sync a partir de un access_token ya obtenido (OIDC). Valida inputs, crea StoreDir con permisos 0700, descubre DeviceID via /whoami si no se proporciona. No maneja login — eso lo hace mas_oidc_loopback. |
|
|
*MatrixClientInitResult con Client (*mautrix.Client listo para Sync), StorePath (ruta absoluta del directorio de estado) y CryptoPath (calculado pero vacio en v0.1.0). | false | error_go_core |
|
true |
|
functions/infra/matrix_client_init_test.go | functions/infra/matrix_client_init.go |
Ejemplo
import (
"fmt"
infra "fn-registry/functions/infra"
)
cfg := infra.MatrixClientInitConfig{
HomeserverURL: "https://matrix-af2f3d.organic-machine.com",
UserID: "@egutierrez:matrix-af2f3d.organic-machine.com",
AccessToken: "mxat_xyz...", // de mas_oidc_loopback_go_infra
DeviceID: "", // se descubre via whoami
StoreDir: "/home/lucas/.matrix_client_pc/egutierrez/",
EnableCrypto: false, // v0.1.0
}
res, err := infra.MatrixClientInit(cfg)
if err != nil {
panic(err)
}
// res.Client listo para res.Client.Sync()
fmt.Println("DeviceID:", res.Client.DeviceID)
fmt.Println("StorePath:", res.StorePath)
Cuando usarla
Llamar UNA vez por sesion, justo tras obtener el access_token via OIDC flow (mas_oidc_loopback_go_infra). El *mautrix.Client resultante se pasa al loop de Sync, al sender de mensajes y al handler de eventos. No volver a llamarla mientras el token siga valido.
Gotchas
- DeviceID vacio dispara GET /whoami: suma ~100ms de latencia al arranque. Si guardas el DeviceID en keyring tras el primer uso (recomendado), pasalo directamente para evitarlo.
- StoreDir permisos 0700: la funcion los aplica en Linux/macOS. En Windows el
MkdirAllno soporta permisos Unix — usar una ubicacion bajoos.UserConfigDir()que ya esta protegida por el SO. - mautrix-go v0.28+ cambio de tipos:
id.UserIDyid.DeviceIDya no son alias destring. Importarmaunium.net/go/mautrix/idpara conversiones explicitas. - EnableCrypto=true devuelve error en v0.1.0: la inicializacion correcta de Olm/Megolm con cross-signing requiere configurar
crypto.OlmMachinecon su propio SQLite — issue 0150 lo aborda completo. No hacerlo a medias aqui evita estados de crypto corrompidos. - M_UNKNOWN_TOKEN en Whoami: si el AccessToken esta caducado y DeviceID es vacio, el error menciona explicitamente "UNKNOWN_TOKEN". El caller debe refrescar via OIDC (refresh_token de
MasOidcLoopbackResult). - mautrix.NewClient normaliza HomeserverURL: llama
ParseAndNormalizeBaseURLinternamente. Si la URL tiene trailing slash o path extra, se normaliza. Verificar enres.Client.HomeserverURL.String()si hay dudas.
Notas
- El
*mautrix.ClientusaNewMemorySyncStore()por defecto (no persiste next_batch entre reinicios). Para persistencia real del sync state, el caller debe configurar unSQLiteSyncStoreapuntando a{StoreDir}/sync.db— ver documentacion de mautrix-go SQLite stores. CryptoPathse calcula como{StoreDir}/crypto.dbpero no se inicializa. Reservado paramatrix_crypto_init_go_infra(issue 0150).- La funcion no configura un
SyncerniStateStorecustom — el caller lo hace segun sus necesidades (DefaultSyncer con handlers de eventos para matrix_client_pc).