npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@horizon-modules/jetimob-crm-integration

v1.0.6

Published

Integração CRM Jetimob para conversão de dados imobiliários para property-model-v3

Readme

@horizon-modules/jetimob-crm-integration

Integração completa com o CRM Jetimob para sincronização e conversão de dados imobiliários para o formato PropertyModelV3.

🏠 O que faz

Este pacote oferece uma solução completa para integrar sistemas imobiliários com a API do Jetimob CRM:

  • Download automático de imóveis da API Jetimob
  • Conversão de dados Jetimob para PropertyModelV3
  • Upload para sua API própria
  • Profiling genérico de datasets JSON
  • Dados de teste para desenvolvimento

📦 Instalação

npm install @horizon-modules/jetimob-crm-integration
# ou
pnpm add @horizon-modules/jetimob-crm-integration

🚀 Uso Rápido

✅ Uso Mais Simples (Recomendado)

// ESM (TypeScript/Módulos modernos)
import { JetimobDownloader } from '@horizon-modules/jetimob-crm-integration'

// CommonJS (JavaScript tradicional)
const { JetimobDownloader } = require('@horizon-modules/jetimob-crm-integration')

// 🎯 Configuração mínima - baseUrl é OPCIONAL!
const downloader = new JetimobDownloader({
  webserviceKey: 'sua_webservice_key_jetimob',
  outputDir: './data/imoveis'
  // baseUrl: automático (https://api.jetimob.com)
})

// Download simples
const result = await downloader.downloadPages({
  startPage: 1,
  endPage: 5,
  pageSize: 100
})

🔧 Configuração Completa (Opcional)

import { 
  JetimobDownloader, 
  JetimobApiClient, 
  ProfilerService,
  convertJetimobToPropertyV3,
  testMocks,
  fakeData
} from '@horizon-modules/jetimob-crm-integration'

// Configuração com baseUrl customizado (opcional)
const downloader = new JetimobDownloader({
  webserviceKey: 'sua_webservice_key_jetimob',
  outputDir: './data/imoveis',
  baseUrl: 'https://api.jetimob.com' // Opcional
})

const result = await downloader.downloadPages({
  startPage: 1,
  endPage: 5,
  pageSize: 100
})

// 2. Upload para sua API
await downloader.uploadToApi({
  endpoint: 'https://sua-api.com/imoveis',
  headers: { 'Authorization': 'Bearer seu_token' }
})

// 3. Conversão manual
const imovelJetimob = await new JetimobApiClient({ webserviceKey }).getImovel(123)
const propertyV3 = convertJetimobToPropertyV3(imovelJetimob)

// 4. Profiling de dados
const profiler = new ProfilerService({
  inputDir: './data',
  outputDir: './output',
  fieldConfigs: {
    'tipo': { maxExamples: 5 },
    'endereco_bairro': { maxExamples: 20 }
  }
})

const profile = await profiler.profile()
console.log(profile.tipo) // ['Residencial', 'Comercial', ...]

🛠️ API

JetimobDownloader

Principais métodos:

  • downloadPage(page, pageSize) - Baixa uma página específica
  • downloadPages(options) - Baixa múltiplas páginas
  • uploadToApi(config) - Envia dados para sua API
  • downloadAndUpload(downloadOpts, uploadOpts) - Operação completa

Configuração:

interface JetimobDownloaderConfig {
  webserviceKey: string // Webservice Key da API Jetimob (obrigatório)
  outputDir: string     // Pasta onde salvar arquivos (obrigatório)
  baseUrl?: string      // URL base da API (OPCIONAL - padrão: https://api.jetimob.com)
}

JetimobApiClient

Principais métodos:

  • getImoveis(page?, pageSize?) - Lista imóveis
  • getImovel(id) - Busca imóvel específico
  • testConnection() - Testa conexão com a API

ProfilerService

Ferramenta genérica para análise de datasets JSON:

const profiler = new ProfilerService({
  inputDir: './dados',           // Pasta com arquivos JSON
  outputDir: './saida',         // Onde salvar o relatório  
  fieldConfigs: {
    campo1: { maxExamples: 5 },  // Máximo 5 exemplos
    campo2: { maxExamples: 10 }  // Máximo 10 exemplos
  },
  defaultMaxExamples: 3         // Padrão para outros campos
})

const resultado = await profiler.profile()
// Resultado: { campo1: [valores únicos], campo2: [...] }

Características:

  • ✅ Genérico - funciona com qualquer estrutura JSON
  • ✅ Arrays concatenados - junta valores de arrays de vários objetos
  • ✅ Objetos aninhados - preserva hierarquia (corretor.nome)
  • ✅ Ordem alfabética - campos organizados automaticamente
  • ✅ Configurável - controle de quantos exemplos por campo

Dados de Teste

import { testMocks, fakeData } from '@horizon-modules/jetimob-crm-integration'

// Mocks para testes
const validData = testMocks.validos      // Dados válidos para testes
const problematicData = testMocks.problematicos  // Casos edge

// Dados falsos para desenvolvimento
const apartments = fakeData.apartamentos
const houses = fakeData.casas
const commercial = fakeData.comerciais  
const land = fakeData.terrenos
const coberturas = fakeData.coberturas

🔧 Configuração via .env

# === JETIMOB API ===
JETIMOB_WEBSERVICE_KEY=sua_webservice_key_jetimob
JETIMOB_START_PAGE=1
JETIMOB_END_PAGE=10
JETIMOB_PAGE_SIZE=100

# === SUA API ===
API_ENDPOINT=https://sua-api.com/imoveis
API_TOKEN=seu_bearer_token
API_BATCH_SIZE=10

# === OPERAÇÃO ===
OPERATION_MODE=download-and-upload  # download-only | upload-only | download-and-upload
DATA_DIR=./data/jetimob-imports

📁 Estrutura de Dados

Entrada (Jetimob)

{
  "codigo": "427",
  "contrato": "Compra",
  "tipo": "Residencial",
  "subtipo": "Cobertura",
  "titulo_anuncio": "Cobertura com 4 dormitórios à venda",
  "observacoes": "Imponente cobertura duplex com vista panorâmica...",
  "valor_venda": 2500000,
  "valor_venda_visivel": true,
  "dormitorios": 4,
  "suites": 3,
  "banheiros": 5,
  "garagens": 3,
  "area_total": 350,
  "area_privativa": 320,
  "endereco_estado": "Rio Grande do Sul",
  "endereco_cidade": "Torres", 
  "endereco_bairro": "Centro",
  "endereco_logradouro": "Rua XV de Novembro",
  "endereco_numero": "250",
  "endereco_cep": "95560000",
  "latitude": "-29.334722",
  "longitude": "-49.727500",
  "situacao": "Desocupado",
  "destaque": "Sem destaque",
  "imagens": [
    {
      "link": "https://s01.jetimgs.com/427_1.jpg",
      "titulo": "Sala de estar",
      "link_thumb": "https://s01.jetimgs.com/427_1_thumb.jpg"
    }
  ]
}

Saída (PropertyV3)

{
  "reference": "427",
  "title": "Cobertura com 4 dormitórios à venda",
  "description": "Imponente cobertura duplex com vista panorâmica...",
  "media_assets": {
    "images": [
      {
        "full": "https://s01.jetimgs.com/427_1.jpg",
        "md": "https://s01.jetimgs.com/427_1_thumb.jpg",
        "sm": "https://s01.jetimgs.com/427_1_thumb.jpg",
        "cover": true
      }
    ]
  },
  "attributes": {
    "operacao": ["Compra"],
    "tipo": "Residencial",
    "subtipo": "Cobertura",
    "valor_venda": 2500000,
    "area_total": 350,
    "area_util": 320,
    "dormitorios": 4,
    "suites": 3,
    "banheiros": 5,
    "vagas": 3,
    "endereco_cep": "95560000",
    "endereco_estado": "Rio Grande do Sul",
    "endereco_cidade": "Torres",
    "endereco_bairro": "Centro",
    "endereco_logradouro": "Rua XV de Novembro",
    "endereco_numero": "250",
    "latitude": -29.334722,
    "longitude": -49.727500,
    "situacao": "Desocupado",
    "destaque": false
  },
  "settings": {
    "currency_unit": "BRL",
    "area_unit": "m2",
    "distance_unit": "meters",
    "exibir_no_mapa": true
  }
}

Profiling

{
  "tipo": ["Residencial", "Comercial", "Rural"],
  "subtipo": ["Casa", "Apartamento", "Cobertura", "Terreno"],
  "endereco_cidade": ["Torres", "Capão da Canoa", "Xangri-lá"],
  "imagens.link": ["foto1.jpg", "foto2.jpg", "foto3.jpg"]
}

🧪 Desenvolvimento

# Instalar dependências
pnpm install

# Build
pnpm build

# Testes
pnpm test

# Typecheck
pnpm typecheck

Scripts de Desenvolvimento

# Download de propriedades reais
node __dev__/scripts/download-properties.js

# Profiling dos dados baixados  
node __dev__/scripts/profile-properties.js

# Gerar dados falsos
pnpm tsx __dev__/scripts/generate-fake-data.ts

# Gerar mocks para testes
pnpm tsx __dev__/scripts/generate-mocks.ts

# Converter downloads para PropertyV3
pnpm convert:downloads

🎯 Casos de Uso

1. Sincronização Automática

Script diário para manter seu sistema atualizado com dados do Jetimob.

2. Migração de Dados

Conversão em lote de propriedades existentes do Jetimob para seu formato.

3. Análise de Dados

Profiling para entender estrutura e qualidade dos dados imobiliários.

4. Desenvolvimento

Dados falsos e mocks para testes e desenvolvimento local.

🔑 Autenticação Jetimob

A API Jetimob utiliza apenas a Webservice Key na URL:

  • ✅ Webservice Key: Incluída na URL do endpoint (obrigatória)
  • ❌ Headers de autenticação: Não são necessários
  • ❌ Bearer tokens: Não são utilizados
// URL de exemplo
https://api.jetimob.com/webservice/{WEBSERVICE_KEY}/imoveis?v=4&page=1&pageSize=100

📝 Licença

MIT

🤝 Contribuição

Este é um pacote interno da Horizon Labs. Para suporte, abra uma issue no repositório principal.