4bce095964
Mueve duckdb_open, clickhouse_open, postgres_open, matrix_* y keyring_token_store
del paquete monolitico functions/infra a subpaquetes propios
(functions/infra/{duckdb,clickhouse,postgres,matrix,keyring}). El paquete infra ya
no importa los drivers (go-duckdb, clickhouse-go, pgx, mautrix, go-keyring), por lo
que las apps que solo usan funciones ligeras (process, cron, http, sqlite) dejan de
arrastrarlos. Reduccion de binarios: dag_engine 72->10MB, registry_api 70->8.7MB,
services_api 70->9MB, call_monitor 68->6.6MB, sqlite_api 70->8.9MB.
Los IDs del registry se mantienen estables (domain: infra en frontmatter). Se
preservan los build tags goolm/libolm de matrix_crypto_init.
Tambien corrige TestSSEHandler: el test leia el body con un unico Read() que con
HTTP chunked solo capturaba el primer evento; ahora usa io.ReadAll hasta EOF.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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/matrix_client_init_test.go | functions/infra/matrix/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).