@horizon-integrations/jetimob-crm-client
v1.0.1
Published
Client HTTP tipado pra consumir a API do horizon-integrations-hub (rotas /api/providers/jetimob/v1/*). Instalado nos sites das imobiliárias pra puxar imóveis via hub, preservando Anti-Corruption Layer.
Maintainers
Readme
@horizon-integrations/jetimob-crm-client
Client HTTP tipado pra consumir o horizon-integrations-hub (rotas
/api/providers/jetimob/v1/*). Instalado nos sites das imobiliárias, dentro
de apps/automations/.
Preserva o Anti-Corruption Layer: o site nunca chama a API Jetimob direto — sempre vai pelo hub, que orquestra.
Site (JetimobClient) → HTTP → Hub (jetimob-crm) → HTTP → API JetimobInstalação
pnpm add @horizon-integrations/jetimob-crm-clientConfig
import { JetimobClient } from "@horizon-integrations/jetimob-crm-client"
const jetimob = new JetimobClient({
baseUrl: process.env.HUB_URL!, // https://horizon-integrations.vercel.app
authToken: process.env.HUB_API_KEY!, // x-api-key do hub
tenantCredentials: {
webserviceKey: process.env.JETIMOB_WEBSERVICE_KEY!,
},
})Uso — runSync (o padrão das automations dos sites)
É assim que cada site sincroniza, dentro de uma Inngest function
sync-properties-jetimob.ts (ver examples/sync-properties-jetimob.ts):
import { JetimobClient } from "@horizon-integrations/jetimob-crm-client"
import { HttpDestination, runSync } from "@horizon-js/integrations-core/destinations"
import { DestinationSyncMode } from "@horizon-js/integrations-core"
const source = new JetimobClient({
baseUrl: process.env.HUB_URL!,
authToken: process.env.HUB_API_KEY!,
tenantCredentials: { webserviceKey: process.env.JETIMOB_WEBSERVICE_KEY! },
}).properties
const destination = new HttpDestination({
endpoint: `${process.env.NEXT_PUBLIC_API_URL}/api/property/sync`,
apiKey: process.env.API_SECRET_KEY!,
sourceKey: "jetimob-api-imoveis",
})
const result = await runSync({
stream: source,
destination,
mode: DestinationSyncMode.APPEND_DEDUP,
})
// result: { recordsRead, recordsCreated, recordsUpdated, recordsDeleted, errors, ... }runSync lê via source.streamAll(), faz delta por sync_hash e dá upsert só
do que mudou no destino.
API
JetimobClient
| Membro | Descrição |
|---|---|
| properties | PropertiesResource — o resource de imóveis |
| capabilities | Espelho das capabilities do runtime |
| check() | Valida credenciais + conectividade com o hub |
JetimobClient.properties (PropertiesResource)
| Método | Rota do hub | Descrição |
|---|---|---|
| fetchAll<T>() | POST /properties | Dump completo { properties, errors, total } |
| getListing() | POST /properties/index | Lista leve { index, total } — ref=id_imovel, updatedAt=null |
| get<T>(ref) | POST /properties/[ref] | Um imóvel ou null (404). Aceita id_imovel ou codigo |
| streamAll<T>() | — | AsyncGenerator que runSync consome |
| check() | — | Valida credenciais |
Uso direto (sem runSync)
// Seed inicial
for await (const p of jetimob.properties.streamAll()) {
await db.properties.upsert(p)
}
// Pontual
const one = await jetimob.properties.get("6570922")
// Detecção de deletados
const { index } = await jetimob.properties.getListing()
const idsAtivos = new Set(index.map((e) => e.ref))Ver examples/ e a doc end-to-end em
Integrações/docs/INTEGRATION-LIFECYCLE.md.
